diff -uwNr -x dvbdevice.c -x menu.c -x libsi.a -x 'sysconfig*' -x .dependencies -x .svn -x '*.save' -x '*.o' vdr-1.4.reel/bat.c vdr-1.4.freesat-tva/bat.c --- vdr-1.4.reel/bat.c 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.4.freesat-tva/bat.c 2008-10-12 19:54:40.435450958 +0100 @@ -0,0 +1,110 @@ +/* + * bat.c: BAT section filter + * + * See the main source file 'vdr.c' for copyright information and + * how to reach the author. + * + * $Id: bat.c 1.16 2006/04/15 14:12:21 kls Exp $ + */ + +#include "bat.h" +#include "channels.h" +#include "config.h" +#include "libsi/section.h" +#include "libsi/descriptor.h" + + + +// --- cBatFilter ------------------------------------------------------------ + +cBatFilter::cBatFilter() +{ + Set(3841, 0x4a); // BAT - freesat +} + +cBatFilter::~cBatFilter() +{ + batMap::iterator p; + + for(p = batmap.begin(); p!=batmap.end(); ++p) { + delete p->second; + } + +} + +void cBatFilter::SetStatus(bool On) +{ + cFilter::SetStatus(On); + + batMap::iterator p; + + for(p = batmap.begin(); p!=batmap.end(); ++p) { + p->second->Reset(); + } + +} + +void cBatFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length) +{ + if (!(Source() && Transponder())) + return; + SI::BAT bat(Data, false); + if (!bat.CheckCRCAndParse()) + return; + + cSectionSyncer *syncer; + batMap::iterator iter; + iter = batmap.find(bat.getBouquetId()); + if ( iter == batmap.end() ) { + syncer = new cSectionSyncer(); + batmap.insert(batMap::value_type(bat.getBouquetId(), syncer)); + } else { + syncer = iter->second; + } + + if ( !syncer->Sync(bat.getVersionNumber(), bat.getSectionNumber(), bat.getLastSectionNumber())) + return; + + if (!Channels.Lock(true, 10)) + return; + SI::BAT::TransportStream ts; + for (SI::Loop::Iterator it; bat.transportStreamLoop.getNext(ts, it); ) { + SI::Descriptor *d; + + + SI::Loop::Iterator it2; + char DaBuf[1024]; + DaBuf[0] = 0; + + for (SI::Loop::Iterator it2; (d = ts.transportStreamDescriptors.getNext(it2)); ) { + switch (d->getDescriptorTag()) { + case SI::DefaultAuthorityDescriptorTag: { + SI::DefaultAuthorityDescriptor *da = (SI::DefaultAuthorityDescriptor *)d; + da->DefaultAuthority.getText(DaBuf, sizeof(DaBuf)); + break; + } + case SI::ServiceListDescriptorTag: { + SI::ServiceListDescriptor *sl = (SI::ServiceListDescriptor *)d; + SI::ServiceListDescriptor::Service service; + SI::Loop::Iterator it3; + for (SI::Loop::Iterator it3; sl->serviceLoop.getNext(service, it3); ) { + cChannel *channel = Channels.GetByChannelID(tChannelID(Source(), ts.getOriginalNetworkId(), ts.getTransportStreamId(), service.getServiceId())); + if ( channel == NULL && Setup.UpdateChannels >= 5 ) { + // channel = Channels.NewChannel(Channel(), "Unknown", "Unknown", "Unknown", ts.getOriginalNetworkId(), ts.getTransportStreamId(), service.getServiceId()); + } + if ( channel && strlen(DaBuf) ) { + channel->SetDefaultAuthority(DaBuf); + } + } + break; + } + default: + break; + } + delete d; + } + } + Channels.Unlock(); +} + + diff -uwNr -x dvbdevice.c -x menu.c -x libsi.a -x 'sysconfig*' -x .dependencies -x .svn -x '*.save' -x '*.o' vdr-1.4.reel/bat.h vdr-1.4.freesat-tva/bat.h --- vdr-1.4.reel/bat.h 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.4.freesat-tva/bat.h 2008-10-12 19:30:25.943733925 +0100 @@ -0,0 +1,29 @@ +/* + * bat.h: BAT section filter + * + * See the main source file 'vdr.c' for copyright information and + * how to reach the author. + * + * $Id: bat.h 1.2 2004/01/05 14:30:14 kls Exp $ + */ + +#ifndef __BAT_H +#define __BAT_H + +#include "filter.h" +#include + +typedef std::map batMap; + +class cBatFilter : public cFilter { +private: + batMap batmap; +protected: + virtual void Process(u_short Pid, u_char Tid, const u_char *Data, int Length); +public: + cBatFilter(); + ~cBatFilter(); + virtual void SetStatus(bool On); + }; + +#endif //__BAT_H diff -uwNr -x dvbdevice.c -x menu.c -x libsi.a -x 'sysconfig*' -x .dependencies -x .svn -x '*.save' -x '*.o' vdr-1.4.reel/channels.c vdr-1.4.freesat-tva/channels.c --- vdr-1.4.reel/channels.c 2008-09-27 17:51:41.052673227 +0100 +++ vdr-1.4.freesat-tva/channels.c 2008-10-12 02:53:28.789836702 +0100 @@ -205,6 +205,7 @@ shortName = strdup(""); provider = strdup(""); portalName = strdup(""); + defaultAuthority = strdup(""); memset(&__BeginData__, 0, (char *)&__EndData__ - (char *)&__BeginData__); inversion = INVERSION_AUTO; bandwidth = BANDWIDTH_AUTO; @@ -227,6 +228,7 @@ shortName = NULL; provider = NULL; portalName = NULL; + defaultAuthority = NULL; schedule = NULL; linkChannels = NULL; refChannel = NULL; @@ -257,6 +259,7 @@ free(shortName); free(provider); free(portalName); + free(defaultAuthority); } cChannel& cChannel::operator= (const cChannel &Channel) @@ -265,6 +268,7 @@ shortName = strcpyrealloc(shortName, Channel.shortName); provider = strcpyrealloc(provider, Channel.provider); portalName = strcpyrealloc(portalName, Channel.portalName); + defaultAuthority = strcpyrealloc(defaultAuthority, Channel.defaultAuthority); memcpy(&__BeginData__, &Channel.__BeginData__, (char *)&Channel.__EndData__ - (char *)&Channel.__BeginData__); return *this; } @@ -399,6 +403,7 @@ return true; } + void cChannel::SetId(int Nid, int Tid, int Sid, int Rid) { if (nid != Nid || tid != Tid || sid != Sid || rid != Rid) { @@ -452,6 +457,15 @@ } } +void cChannel::SetDefaultAuthority(const char *DefaultAuthority) +{ + if (!isempty(DefaultAuthority) && strcmp(defaultAuthority, DefaultAuthority) != 0) { + isyslog("setting authority of channel %d to '%s'",Number(), DefaultAuthority); + defaultAuthority = strcpyrealloc(defaultAuthority, DefaultAuthority); + } +} + + #define STRDIFF 0x01 #define VALDIFF 0x02 @@ -745,11 +759,11 @@ q += IntArrayToString(q, Channel->dpids, 10, Channel->dlangs); } *q = 0; - char caidbuf[MAXCAIDS * 5 + 10]; // 5: 4 digits plus delimiting ',', 10: paranoia + char caidbuf[MAXCAIDS * 5 + 10 + 256]; // 5: 4 digits plus delimiting ',', 10: paranoia q = caidbuf; q += IntArrayToString(q, Channel->caids, 16); *q = 0; - asprintf(&buffer, "%s:%d:%s:%s:%d:%s:%s:%d:%s:%d:%d:%d:%d\n", FullName, Channel->frequency, *Channel->ParametersToString(), *cSource::ToString(Channel->source), Channel->srate, vpidbuf, apidbuf, Channel->tpid, caidbuf, Channel->sid, Channel->nid, Channel->tid, Channel->rid); + asprintf(&buffer,"%s:%d:%s:%s:%d:%s:%s:%d:%s:%d:%d:%d:%d:%s\n", FullName, Channel->frequency, *Channel->ParametersToString(), *cSource::ToString(Channel->source), Channel->srate, vpidbuf, apidbuf, Channel->tpid, caidbuf, Channel->sid, Channel->nid, Channel->tid, Channel->rid, Channel->defaultAuthority); } return cString(buffer, true); } @@ -785,17 +799,24 @@ char *vpidbuf = NULL; char *apidbuf = NULL; char *caidbuf = NULL; - int fields = sscanf(s, "%a[^:]:%d :%a[^:]:%a[^:] :%d :%a[^:]:%a[^:]:%d :%a[^:]:%d :%d :%d :%d ", &namebuf, &frequency, ¶mbuf, &sourcebuf, &srate, &vpidbuf, &apidbuf, &tpid, &caidbuf, &sid, &nid, &tid, &rid); + char *dabuf = NULL; + int fields = sscanf(s, "%a[^:]:%d :%a[^:]:%a[^:] :%d :%a[^:]:%a[^:]:%d :%a[^:]:%d :%d :%d :%d :%a[^:]", &namebuf, &frequency, ¶mbuf, &sourcebuf, &srate, &vpidbuf, &apidbuf, &tpid, &caidbuf, &sid, &nid, &tid, &rid, &dabuf); if (fields >= 9) { if (fields == 9) { // allow reading of old format sid = atoi(caidbuf); - delete caidbuf; + free(caidbuf); caidbuf = NULL; + free(dabuf); + dabuf = strdup(""); caids[0] = tpid; caids[1] = 0; tpid = 0; } + if ( fields == 13 ) { + // Some sscanf weirdness + dabuf[0] = 0; + } vpid = ppid = 0; apids[0] = 0; dpids[0] = 0; @@ -892,13 +913,17 @@ shortName = strcpyrealloc(shortName, p); } name = strcpyrealloc(name, namebuf); + defaultAuthority = strcpyrealloc(defaultAuthority, dabuf); free(parambuf); free(sourcebuf); free(vpidbuf); free(apidbuf); + if ( caidbuf ) { free(caidbuf); + } free(namebuf); + free(dabuf); if (!GetChannelID().Valid()) { esyslog("ERROR: channel data results in invalid ID!"); return false; diff -uwNr -x dvbdevice.c -x menu.c -x libsi.a -x 'sysconfig*' -x .dependencies -x .svn -x '*.save' -x '*.o' vdr-1.4.reel/channels.h vdr-1.4.freesat-tva/channels.h --- vdr-1.4.reel/channels.h 2008-09-27 17:51:41.052673227 +0100 +++ vdr-1.4.freesat-tva/channels.h 2008-10-06 18:46:44.403088585 +0100 @@ -120,6 +120,7 @@ char *shortName; char *provider; char *portalName; + char *defaultAuthority; int __BeginData__; int frequency; // MHz int source; @@ -169,6 +170,7 @@ const char *ShortName(bool OrName = false) const { return (OrName && isempty(shortName)) ? name : shortName; } const char *Provider(void) const { return provider; } const char *PortalName(void) const { return portalName; } + const char *DefaultAuthority(void) const { return defaultAuthority; } int Frequency(void) const { return frequency; } ///< Returns the actual frequency, as given in 'channels.conf' int Transponder(void) const; ///< Returns the transponder frequency in MHz, plus the polarization in case of sat static int Transponder(int Frequency, char Polarization); ///< builds the transponder from the given Frequency and Polarization @@ -220,6 +222,7 @@ void SetId(int Nid, int Tid, int Sid, int Rid = 0); void SetName(const char *Name, const char *ShortName, const char *Provider); void SetPortalName(const char *PortalName); + void SetDefaultAuthority(const char *DefaultAuthority); void SetPids(int Vpid, int Ppid, int *Apids, char ALangs[][MAXLANGCODE2], int *Dpids, char DLangs[][MAXLANGCODE2], int *Spids, char SLangs[][MAXLANGCODE2], int Tpid); void SetCaIds(const int *CaIds); // list must be zero-terminated void ForceCaIds(const int *CaIds); // list must be zero-terminated // TB: does not check for reserved values Binary files vdr-1.4.reel/core and vdr-1.4.freesat-tva/core differ diff -uwNr -x dvbdevice.c -x menu.c -x libsi.a -x 'sysconfig*' -x .dependencies -x .svn -x '*.save' -x '*.o' vdr-1.4.reel/device.c vdr-1.4.freesat-tva/device.c --- vdr-1.4.reel/device.c 2008-09-27 17:51:41.052673227 +0100 +++ vdr-1.4.freesat-tva/device.c 2008-10-12 19:32:24.443041929 +0100 @@ -259,6 +259,7 @@ patFilter = NULL; sdtFilter = NULL; nitFilter = NULL; + batFilter = NULL; ciHandler = NULL; player = NULL; @@ -694,6 +695,7 @@ AttachFilter(patFilter = new cPatFilter(this)); AttachFilter(sdtFilter = new cSdtFilter(patFilter)); AttachFilter(nitFilter = new cNitFilter); + AttachFilter(batFilter = new cBatFilter); } } @@ -706,8 +708,11 @@ sectionHandler->Detach(patFilter); sectionHandler->Detach(sdtFilter); sectionHandler->Detach(nitFilter); + sectionHandler->Detach(batFilter); delete nitFilter; nitFilter = NULL; + delete batFilter; + batFilter = NULL; delete sdtFilter; sdtFilter = NULL; delete patFilter; diff -uwNr -x dvbdevice.c -x menu.c -x libsi.a -x 'sysconfig*' -x .dependencies -x .svn -x '*.save' -x '*.o' vdr-1.4.reel/device.h vdr-1.4.freesat-tva/device.h --- vdr-1.4.reel/device.h 2008-09-27 17:51:41.052673227 +0100 +++ vdr-1.4.freesat-tva/device.h 2008-10-12 19:31:07.443485932 +0100 @@ -15,6 +15,7 @@ #include "dvbsubtitle.h" #include "eit.h" #include "filter.h" +#include "bat.h" #include "nit.h" #include "pat.h" #include "ringbuffer.h" @@ -316,6 +317,7 @@ cPatFilter *patFilter; cSdtFilter *sdtFilter; cNitFilter *nitFilter; + cBatFilter *batFilter; protected: void StartSectionHandler(void); ///< A derived device that provides section data must call diff -uwNr -x dvbdevice.c -x menu.c -x libsi.a -x 'sysconfig*' -x .dependencies -x .svn -x '*.save' -x '*.o' vdr-1.4.reel/eit.c vdr-1.4.freesat-tva/eit.c --- vdr-1.4.reel/eit.c 2008-09-27 17:51:41.052673227 +0100 +++ vdr-1.4.freesat-tva/eit.c 2008-10-12 20:20:00.926645784 +0100 @@ -112,6 +112,8 @@ SI::Descriptor *d; SI::ExtendedEventDescriptors *ExtendedEventDescriptors = NULL; SI::ShortEventDescriptor *ShortEventDescriptor = NULL; + SI::ContentIdentifierDescriptor *itemCrid = NULL; + SI::ContentIdentifierDescriptor *seriesCrid = NULL; cLinkChannels *LinkChannels = NULL; cComponents *Components = NULL; for (SI::Loop::Iterator it2; (d = SiEitEvent.eventDescriptors.getNext(it2)); ) { @@ -252,10 +254,29 @@ } } break; + case SI::ContentIdentifierDescriptorTag: { + SI::ContentIdentifierDescriptor *cd = (SI::ContentIdentifierDescriptor *)d; + switch (cd->getCridType()) { + case 0x01: + case 0x31: { + itemCrid = cd; + d = NULL; // so that it is not deleted + break; + } + case 0x02: + case 0x32: { + seriesCrid = cd; + d = NULL; // so that it is not deleted + break; + } + } + } default: ; } + if ( d ) { delete d; } + } if (!rEvent) { if (ShortEventDescriptor) { @@ -273,9 +294,33 @@ } else if (!HasExternalData) pEvent->SetDescription(NULL); + if (itemCrid && (itemCrid->getCridLocation() == 0)) { + char buffer[512]; + char buffer2[512]; + strcpy (buffer, channel->DefaultAuthority()); + buffer2[0] = 0; + itemCrid->entry.getText(buffer2, sizeof(buffer2)); + if ( strlen(buffer2) ) { + strcat(buffer, buffer2); + pEvent->SetItemCRID(buffer); + } + } + if (seriesCrid && (seriesCrid->getCridLocation() == 0)) { + char buffer[512]; + char buffer2[512]; + strcpy (buffer, channel->DefaultAuthority()); + buffer2[0] = 0; + seriesCrid->entry.getText(buffer2, sizeof(buffer2)); + if ( strlen(buffer2) ) { + strcat(buffer, buffer2); + pEvent->SetSeriesCRID(buffer); + } + } } delete ExtendedEventDescriptors; delete ShortEventDescriptor; + delete itemCrid; + delete seriesCrid; pEvent->SetComponents(Components); @@ -346,11 +391,17 @@ #ifdef RBLITE Set(8191, 0xff); // Premiere Radio EPG #endif + // Freesat + Set(3842, 0x4E, 0xFE); // event info, actual(0x4E)/other(0x4F) TS, present/following + Set(3842, 0x50, 0xF0); // event info, actual TS, schedule(0x50)/schedule for future days(0x5X) + Set(3842, 0x60, 0xF0); // event info, other TS, schedule(0x60)/schedule for future days(0x6X) + } void cEitFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length) { switch (Pid) { + case 3842: case 0x12: { cSchedulesLock SchedulesLock(true, 10); cSchedules *Schedules = (cSchedules *)cSchedules::Schedules(SchedulesLock); diff -uwNr -x dvbdevice.c -x menu.c -x libsi.a -x 'sysconfig*' -x .dependencies -x .svn -x '*.save' -x '*.o' vdr-1.4.reel/epg.c vdr-1.4.freesat-tva/epg.c --- vdr-1.4.reel/epg.c 2008-09-27 09:50:31.281871864 +0100 +++ vdr-1.4.freesat-tva/epg.c 2008-10-06 18:46:44.403088585 +0100 @@ -271,6 +271,8 @@ startTime = 0; duration = 0; vps = 0; + itemCRID = NULL; + seriesCRID = NULL; SetSeen(); } @@ -279,6 +281,8 @@ free(title); free(shortText); free(description); + free(itemCRID); + free(seriesCRID); delete components; } @@ -375,6 +379,16 @@ vps = Vps; } +void cEvent::SetItemCRID(const char *CRID) +{ + itemCRID = strcpyrealloc(itemCRID, CRID); +} + +void cEvent::SetSeriesCRID(const char *CRID) +{ + seriesCRID = strcpyrealloc(seriesCRID, CRID); +} + void cEvent::SetSeen(void) { seen = time(NULL); @@ -448,6 +462,10 @@ } if (vps) fprintf(f, "%sV %ld\n", Prefix, vps); + if (!isempty(itemCRID)) + fprintf(f, "%sI %s\n", Prefix, itemCRID); + if (!isempty(seriesCRID)) + fprintf(f, "%sR %s\n", Prefix, seriesCRID); if (!InfoOnly) fprintf(f, "%se\n", Prefix); } @@ -470,6 +488,10 @@ break; case 'V': SetVps(atoi(t)); break; + case 'I': SetItemCRID(t); + break; + case 'R': SetSeriesCRID(t); + break; default: esyslog("ERROR: unexpected tag while reading EPG data: %s", s); return false; } diff -uwNr -x dvbdevice.c -x menu.c -x libsi.a -x 'sysconfig*' -x .dependencies -x .svn -x '*.save' -x '*.o' vdr-1.4.reel/epg.h vdr-1.4.freesat-tva/epg.h --- vdr-1.4.reel/epg.h 2008-09-27 09:50:31.281871864 +0100 +++ vdr-1.4.freesat-tva/epg.h 2008-10-06 18:46:44.403088585 +0100 @@ -66,6 +66,8 @@ int duration; // Duration of this event in seconds time_t vps; // Video Programming Service timestamp (VPS, aka "Programme Identification Label", PIL) time_t seen; // When this event was last seen in the data stream + char *itemCRID; // Item CRID + char *seriesCRID; // Series CRID public: cEvent(tEventID EventID); ~cEvent(); @@ -84,6 +86,8 @@ time_t EndTime(void) const { return startTime + duration; } int Duration(void) const { return duration; } time_t Vps(void) const { return vps; } + const char *ItemCRID(void) const { return itemCRID; } + const char *SeriesCRID(void) const { return seriesCRID; } time_t Seen(void) const { return seen; } bool SeenWithin(int Seconds) const { return time(NULL) - seen < Seconds; } bool HasTimer(void) const; @@ -103,6 +107,8 @@ void SetStartTime(time_t StartTime); void SetDuration(int Duration); void SetVps(time_t Vps); + void SetItemCRID(const char *CRID); + void SetSeriesCRID(const char *CRID); void SetSeen(void); cString ToDescr(void) const; void Dump(FILE *f, const char *Prefix = "", bool InfoOnly = false) const; diff -uwNr -x dvbdevice.c -x menu.c -x libsi.a -x 'sysconfig*' -x .dependencies -x .svn -x '*.save' -x '*.o' vdr-1.4.reel/freesat.t1 vdr-1.4.freesat-tva/freesat.t1 --- vdr-1.4.reel/freesat.t1 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.4.freesat-tva/freesat.t1 2008-10-12 20:12:06.929408518 +0100 @@ -0,0 +1,1530 @@ +# Huffman Table for FreeSat table 1 +# +# This table was derived from on-air transmissions. It certainly has omissions +# and almost certainly contains errors. Use entirely at your own risk. +# +# Data taken from MythTV and Freesat EPG Parser by mitsubushi +# Additions, and corrections made by Dom +# More additions and corrections from Jochen Mann +# +# $Id: freesat.t1,v 1.13 2008/10/11 19:38:04 dom Exp $ +# + +START:00:T: +START:010:B: +START:1000:C: +START:1001:I: +START:1101:S: +START:01100:L: +START:01110:D: +START:01111:H: +START:10100:R: +START:10101:N: +START:10110:E: +START:11000:F: +START:11001:A: +START:11100:M: +START:11101:P: +START:11110:W: +START:011011:Q: +START:101111:G: +START:111110:J: +START:0110100:K: +START:1011101:U: +START:1111110:O: +START:01101010:6: +START:10111000:V: +START:11111110:Y: +START:011010111:.: +START:101110011:2: +START:111111111:X: +START:1011100100:Z: +START:1111111100:8: +START:10111001010:1: +START:10111001011:3: +START:111111110100:4: +START:111111110101:': +START:111111110111: : +START:11111111011000:5: +START:1111111101101000:9: +START:111111110110100110:t: +START:11111111011010011110:ESCAPE: + :0000:W: + :0011:M: + :0100:C: + :0101:B: + :0111:P: + :1001:T: + :1100:N: + :1111:S: + :00011:I: + :00100:G: + :01100:H: + :01101:D: + :10000:o: + :10001:A: + :10100:t: + :10110:a: + :10111:F: + :11010:L: + :11011:R: + :001011:U: + :101011:O: + :111001:J: + :111010:E: + :0001000:f: + :0001001:Q: + :0001011:V: + :0010100:STOP: + :0010101:w: + :1110000:2: + :1110001:K: + :1110110:Y: + :1110111:i: + :00010100:-: + :10101001:1: + :101010000:&: + :101010101:X: + :0001010101:r: + :1010100010:5: + :1010100011:Z: + :1010101001:9: + :1010101101:s: + :1010101110:4: + :1010101111:3: + :00010101000:7: + :00010101100:b: + :00010101110:y: + :10101010000:': + :10101011000:6: + :000101011010:v: + :000101011011:d: + :101010100010: : + :101010100011:0: + :101010110010:n: + :101010110011:8: + :0001010100110:g: + :0001010111110:u: + :00010101001001:.: + :00010101001010:ESCAPE: + :00010101001011:l: + :00010101001111:m: + :00010101111110:p: + :000101011111111:e: + :00010101111111001:c: + :000101011111110000:k: + :000101011111110001:h: + :0001010111100111111:(: +!:1:STOP: +!:01: : +!:0001:!: +!:000001:0x3a: +$:1:ESCAPE: +%:1: : +&:1: : +&:01:B: +&:000:ESCAPE: +&:001:.: +':1:s: +':000:m: +':010:C: +':0010:t: +':0011: : +':01100:d: +':01110:v: +':011011:r: +':011111:A: +':0110101:n: +':01101000:G: +':01111001:l: +':011010011:D: +':011110000:B: +':011110101:i: +':011110110:6: +':0110100100:L: +':0111101001:STOP: +':0111101111:w: +':01101001010:O: +':01111010000:S: +':01111011101:N: +':011110111001:R: +':0110100101100:a: +':0110100101110:K: +':0110100101111:F: +':0111101110000:0: +':01111011100010:ESCAPE: +(:0:ESCAPE: +):1:STOP: +*:0:*: +*:1000:d: +*:10010:e: +*:100110:ESCAPE: ++:0:ESCAPE: +,:1: : +,:01:0: +,:001:.: +-:11: : +-:011:S: +-:100:G: +-:101:O: +-:0011:T: +-:0100:U: +-:00010:D: +-:000111:I: +-:010100:F: +-:010101:o: +-:0000110:L: +-:0000111:C: +-:0010001:A: +-:0010011:Y: +-:0101100:B: +-:00100000:P: +-:00100001:Z: +-:01011101:i: +-:01011110:d: +-:01011111:H: +-:001011001:N: +-:001011011:R: +-:010110111:.: +-:0010110000:1: +-:0010110001:W: +-:00101101010:a: +-:00101101011:M: +-:001011010000:ESCAPE: +.:1:.: +.:01:STOP: +.:0010: : +.:00001:T: +.:00010:C: +.:00110:p: +.:00111:0: +.:00011010:W: +.:000110001:S: +.:000110110:3: +.:000110111:B: +.:0001100000:1: +.:0001100001:M: +.:0001100110:c: +.:00011001111:A: +.:0001100101100:ESCAPE: +/:00:1: +/:10:7: +/:010:4: +0:00:6: +0:01: : +0:11:0: +0:1001:p: +0:1010:STOP: +0:10000:1: +0:10111:7: +0:1011010:s: +0:10110011:4: +0:10110110:t: +0:101101111:%: +0:1011001000:8: +0:1011001001:0x3a: +0:1011001010:5: +0:1011001011:2: +0:1011011100:/: +0:101101110101:,: +0:10110111010010:ESCAPE: +1:01:STOP: +1:000:.: +1:101:0: +1:111:1: +1:0010:2: +1:0011: : +1:10010:8: +1:11000:3: +1:100000:5: +1:100001:s: +1:100010:6: +1:100011:0x3a: +1:100110:': +1:110010:X: +1:110011:9: +1:100111001:7: +1:10011100010:ESCAPE: +2:0:0: +2:11:4: +2:101:STOP: +2:1001: : +2:10000:0x3a: +2:1000101:5: +2:10001000:.: +2:10001001:1: +2:100011011:7: +2:10001101001:3: +2:100011010101:': +2:10001101010000011:8: +3:0: : +3:100:STOP: +3:1100:r: +3:1101:/: +3:11100:0: +3:1110100:0x3a: +3:1110111000:6: Guess at length +3:1110111011:9: +3:11101110011:t: +3:11101110100:3: +3:111011100100:ESCAPE: +3:111011101011:5: +4:00:STOP: +4:11: : +4:1001:0x3a: +4:1011:/: +4:10001:8: +4:10101:.: +4:101000:0: +4:1010010:M: +4:10100111:-: +4:100001110:P: +4:100001111:5: +4:10000100100:ESCAPE: +4:10000100101:': +5:0:STOP: +5:11: : +5:101:0: +5:100011:0x3a: +5:1000001:t: +5:1000100:3: +5:10000000:ESCAPE: +6:01: : +6:10:0: +6:111:0x3a: +6:11001:.: +6:110000:-: +6:1100011:4: +6:1101000:8: +6:11000100:6: +6:000000000:STOP: +6:110001011:9: +7:1:STOP: +7:01: : +7:000:0: +7:0011:.: +7:00101:/: +7:0010000:1: +7:0010010:5: +7:00100010:ESCAPE: +7:00100011:4: +7:00100110:3: +7:00100111:2: +8:1: : +8:00:0: +8:010:0x3a: +8:01101:STOP: +8:011110:.: +8:01110011110:ESCAPE: +8:01110011111:c: +9:0:1: +9:110:STOP: +9:1000:9: +9:1010:.: +9:10011:0: +9:100100: : +9:100101:8: +9:101100:7: +9:101101:/: +9:101110:6: +9:1011111:0x3a: +9:10111101:4: +9:101111000:ESCAPE: +9:101111001:3: +0x3a:1: : +0x3a:00:0: +0x3a:011:.: +0x3a:01011000:ESCAPE: +0x3a:01011001:T: +;:1: : +?:1:STOP: +?:01: : +?:001:0x3a: +?:0001:.: +A:001:r: +A:010: : +A:100:l: +A:110:n: +A:0000:m: +A:0111:g: +A:1111:d: +A:00010:w: +A:01101:c: +A:10101:t: +A:10110:f: +A:10111:i: +A:11100:s: +A:000110:u: +A:000111:STOP: +A:111010:b: +A:1010001:v: +A:1110110:p: +A:10100000:S: +A:101000011:P: +A:10100001000:e: +A:10100001001:B: +A:10100001010:1: +A:11101111011:-: +A:11101111111:.: +A:101000010110:k: +A:101000010111:h: +A:111011110000:a: +A:111011110100:y: +A:1110111100010:x: +A:1110111100011:': +A:11101111001010:0x3a: +A:111011110011100:D: +A:1110111100111010:ESCAPE: +B:00:C: +B:01:B: +B:101:r: +B:1001:i: +B:1100:o: +B:1101:u: +B:1110:a: +B:1111:e: +B:10001:l: +B:1000010:y: +B:10000000:STOP: +B:10000010:O: +B:100000111:A: +B:100001110:S: +B:10000011000:.: +B:10000011001:w: +B:10000111101:h: +B:10000111110:*: +B:10000111111: : +B:10000111100011:T: +B:100001111000100:ESCAPE: +C:00:o: +C:01: : +C:100:l: +C:110:h: +C:1010:r: +C:1110:a: +C:10110:i: +C:10111:e: +C:111100:u: +C:111101:B: +C:1111100:y: +C:1111110:!: +C:11111011:.: +C:111110100:w: +C:111111100:STOP: +C:111111110:S: +C:111111111:T: +C:1111101011:2: +C:1111111011:I: +C:11111010100:4: +C:11111110101:D: +C:1111111010010:': +C:111111101001110:z: +C:11111110100111101:E: +C:111111101001111110:ESCAPE: +D:01:o: +D:10:a: +D:000:r: +D:110:e: +D:111:i: +D:00111:u: +D:001011: : +D:0010101:J: +D:0011000:y: +D:0011011:I: +D:00110011:0x3a: +D:001010010:-: +D:001010011:&: +D:001100100:': +D:001101000:STOP: +D:0010100000:A: +D:0010100001:h: +D:00110010101:N: +D:00110010110:V: +D:001100101111:w: +D:0011001010011:d: +D:00110010100100:ESCAPE: +D:00110010100101:T: +E:00:m: +E:011:v: +E:101:n: +E:111:a: +E:0100:E: +E:1000:STOP: +E:1101:x: +E:10011:d: +E:11001:l: +E:010100:4: +E:010101:y: +E:010110:u: +E:100100:r: +E:110000:i: +E:0101111:s: +E:1001010:F: +E:10010110:R: +E:11000111: : +E:010111010:g: +E:110001100:T: +E:110001101:': +E:0101110001:c: +E:0101110011:q: +E:1001011100:p: +E:10010111011:t: +E:01011100100010:f: +E:01011100100011:U: +E:01011100100101:M: +E:100101110100100:ESCAPE: +F:00:i: +F:10:a: +F:011:r: +F:110:u: +F:111:o: +F:0100:e: +F:01011:l: +F:0101000:A: +F:0101010:O: +F:01010010: : +F:010100110:h: +F:010101101:f: +F:010101111:L: +F:01010111001:I: +F:01010111011:1: +F:010101100000:M: +F:0101011000010:y: +F:010101100001100:ESCAPE: +G:10:r: +G:001:M: +G:010:a: +G:011:o: +G:110:i: +G:111:e: +G:00001:u: +G:000001:h: +G:000111:l: +G:0000001:y: +G:0001100:w: +G:00000000:0x3a: +G:00011011:C: +G:0001101010:P: +G:0001101011: : +G:00000001010:A: +G:000000010110:T: +G:0000000100110:ESCAPE: +H:0:o: +H:100:a: +H:101:i: +H:110:e: +H:1110:u: +H:11110:R: +H:111111101:y: +H:111111110:S: +H:1111111111:r: +H:111111100011:w: +H:1111111000101:D: +H:11111110001000:ESCAPE: +I:0:T: +I:100:s: +I:101:n: +I:1101:t: +I:11001: : +I:11101:': +I:11111:r: +I:110000:I: +I:110001:STOP: +I:111001:m: +I:1110000:d: +I:1110001:N: +I:1111010:.: +I:11110000:a: +I:11110001:Y: +I:111101110:c: +I:11110110101:D: +I:11110110110:f: +I:11110111100:l: +I:111101101000:V: +I:111101101110:o: +I:1111011010010:,: +I:1111011010011:A: +I:1111011110101:g: +I:1111011111000:C: +I:1111011111001:0x3a: +I:11110111101000:B: +I:11110111110101:b: +I:1111011110100100:ESCAPE: +J:00:a: +J:01:u: +J:11:e: +J:101:o: +J:1001:i: +J:10000: : +J:100010:K: +J:10001110:STOP: +J:100011001:s: +J:1000110001:': +J:100011011000:ESCAPE: +J:100011011001:D: +K:01:i: +K:11:y: +K:001:e: +K:101: : +K:0000:a: +K:1000:o: +K:00010:STOP: +K:00011:r: +K:100110:n: +K:100111:S: +K:10010011:G: +K:100100011:O: +K:100100100:h: +K:100100101:w: +K:10010001011:u: +K:100100010000:T: +K:1001000101010:ESCAPE: +K:1001000101011:l: +L:00:a: +L:10:o: +L:11:i: +L:010:e: +L:0111:u: +L:01101:K: +L:0110000:l: +L:0110010:A: +L:0110011: : +L:01100011:y: +L:0110001000:L: +L:01100010110010:ESCAPE: +M:01:a: +M:10:o: +M:000:e: +M:111:i: +M:0010:T: +M:1100:y: +M:1101:u: +M:00110:STOP: +M:001111:c: +M:00111001:r: +M:00111010:E: +M:0011100011: : +M:0011101100:1: +M:00111000001:h: +M:001110000001:Q: +M:00111000000000:0x3a: +M:001110000000110:ESCAPE: +M:001110001011111:R: +N:1:e: +N:00:o: +N:011:i: +N:0101:a: +N:01001:u: +N:01000100:E: +N:010001111:H: +N:0100010110:Y: +N:01000101001:': +N:01000101011:I: +N:01000101110:A: +N:010001010100:M: +N:010001011110: : +N:010001010101110:ESCAPE: +N:01000101111100000:STOP: +O:000:': +O:010:f: +O:110:u: +O:111:n: +O:0011:l: +O:1001:m: +O:01101:r: +O:01110:d: +O:10000:p: +O:10110:STOP: +O:011001:S: +O:011111:b: +O:100011:v: +O:101010:w: +O:101011:U: +O:1011100:T: +O:01100010:x: +O:01100011:.: +O:10001001:t: +O:10001011: : +O:10111110:s: +O:10111111:N: +O:011000001:g: +O:100010101:a: +O:1000100010:i: +O:1000101001:o: +O:01100000010:c: +O:10001010000:2: +O:01100000011010:ESCAPE: +P:01:r: +P:10:l: +P:000:e: +P:001:a: +P:111:o: +P:1101:i: +P:110000:D: +P:110001:u: +P:110011:h: +P:11001000: : +P:11001010:2: +P:110010011:M: +P:110010110:S: +P:11001011100:0x3a: +P:110010111101:s: +P:1100101111100:STOP: +P:1100101111101:G: +P:110010111100010:C: +P:110010111100011:ESCAPE: +Q:1:u: +Q:001:STOP: +Q:010:V: +Q:0111: : +Q:01101:C: +Q:011000:ESCAPE: +R:00:a: +R:01:o: +R:11:e: +R:100:i: +R:1011:u: +R:10101:E: +R:1010011:STOP: +R:10100101:h: +R:1010010000:I: +R:1010010010:y: +R:1010010011:n: +R:101001000110: : +R:1010010001011:S: +R:1010010001110:N: +R:10100100010100:&: +R:10100100011110:T: +R:10100100011111:1: +R:101001000101010:ESCAPE: +S:001:o: +S:010:p: +S:011:u: +S:110:h: +S:111:t: +S:0001:a: +S:1001:e: +S:1011:c: +S:00000:n: +S:10001:i: +S:10101:k: +S:000011:w: +S:101000:m: +S:0000101:A: +S:1000010:l: +S:1010010:q: +S:00001000:2: +S:10000000:O: +S:10000011: : +S:100000010:y: +S:100001100:E: +S:10000001100:B: +S:10000110100:g: +S:100000011011:r: +S:1000011010110:3: +S:1000011010111:.: +S:10000001101000:5: +S:10000001101010:0x3a: +S:10000001101011:1: +S:1000000110100110:ESCAPE: +T:0:h: +T:101:o: +T:111:V: +T:1000:e: +T:1001:r: +T:11000:a: +T:11010:w: +T:110011:i: +T:1101111:H: +T:11001001:y: +T:11001010:M: +T:11011000:.: +T:11011100:u: +T:11011101:W: +T:110010110:0x3a: +T:110010111:4: +T:1101100100: : +T:11001000011:s: +T:110010000000:T: +T:110010000010:B: +T:11001000001110:A: +T:1101100101000000:STOP: +T:11001000001111100:ESCAPE: +U:0:n: +U:10:p: +U:1101:K: +U:1111:l: +U:11000:R: +U:11100:S: +U:110011:E: +U:111011:s: +U:1100101:g: +U:1110101:T: +U:11001001: : +U:110010001:r: +U:111010000:2: +U:11101001010:c: +U:11101001011100:ESCAPE: +U:11101001011110:t: +V:1: : +V:000:0x3a: +V:011:i: +V:0010:e: +V:0011:a: +V:0100:3: +V:010101:C: +V:010111:STOP: +V:0101000:': +V:0101001:4: +V:0101101:o: +V:0101100000:s: +V:0101100001:D: +V:0101100010:.: +V:0101100011111:B: +V:01011000111000:ESCAPE: +W:01:o: +W:11:e: +W:001:h: +W:100:a: +W:101:i: +W:00000:.: +W:00010:O: +W:00011:r: +W:000011:y: +W:0000100:u: +W:000010110000:I: +W:0000101100010:ESCAPE: +X:10: : +X:11:t: +X:010:T: +X:0000:STOP: +X:01100010:-: +X:01100011100:ESCAPE: +X:01100011101:i: +Y:1:o: +Y:01:e: +Y:000:u: +Y:0011: : +Y:001010:a: +Y:001011000:n: +Y:00101100111:s: +Y:0010110101000:STOP: +Y:0010110101110:ESCAPE: +Z:1:o: +Z:00:a: +Z:010:i: +Z:01101:u: +Z:01110:e: +Z:011110: : +Z:01111110:STOP: +a:001:r: +a:011:t: +a:100:l: +a:110:n: +a:0001:m: +a:0100:c: +a:1010:s: +a:1110:y: +a:10110: : +a:10111:d: +a:11110:i: +a:11111:k: +a:000010:b: +a:000011:STOP: +a:010110:p: +a:010111:g: +a:0000000:e: +a:0000001:': +a:0000011:w: +a:0101001:u: +a:0101010:z: +a:0101011:v: +a:00000101:f: +a:01010001:h: +a:000001001:0x3a: +a:0000010000:!: +a:0101000000:o: +a:0101000001:x: +a:00000100010:-: +a:00000100011:a: +a:01010000101:.: +a:01010000111:,: +a:010100001000:q: +a:0101000010010:j: +a:01010000100111:?: +a:010100001001101:J: +a:0101000010011000:ESCAPE: +b:000:r: +b:001:o: +b:010:e: +b:011:a: +b:100:i: +b:1011:u: +b:1100:y: +b:1101:l: +b:1111: : +b:10101:s: +b:11100:b: +b:11101:STOP: +b:101000:h: +b:10100111:': +b:1010011001:t: +b:1010011010:j: +b:10100110000:n: +b:10100110001:d: +b:10100110111:w: +b:101001101101:m: +b:10100110110000:ESCAPE: +b:10100110110001:0x3a: +c:00:k: +c:010:o: +c:100:h: +c:110:t: +c:111:e: +c:0111:r: +c:10100: : +c:10110:i: +c:10111:a: +c:011000:l: +c:011001:y: +c:011010:s: +c:011011:STOP: +c:1010100:c: +c:1010111:u: +c:10101010:0x3a: +c:101011001:D: +c:1010110100:G: +c:1010110110:b: +c:10101100000:L: +c:10101100001:K: +c:10101100011:A: +c:10101101010:q: +c:10101101110:.: +c:10101101111:C: +c:101011000100:n: +c:101011000101:': +c:1010110101100:B: +c:1010110101101:I: +c:101011010111000:M: +c:101011010111001:ESCAPE: +c:101011010111111:F: +c:1010110101111100:w: +c:1010110101111101:Q: +d:11: : +d:001:e: +d:100:STOP: +d:101:a: +d:0001:y: +d:0100:i: +d:0110:s: +d:00000:o: +d:01010:d: +d:000011:u: +d:010110:r: +d:010111:l: +d:011101:v: +d:011110:g: +d:0000100:': +d:0111111:.: +d:00001010:0x3a: +d:00001011:h: +d:01110000:c: +d:01110010:n: +d:01110011:w: +d:011100010:?: +d:011111000:!: +d:011111001:-: +d:011111010:f: +d:0111000111:m: +d:0111110110:,: +d:01111101110:t: +d:01111101111:b: +d:0111000110001:p: +d:01110001100001:z: +d:011100011000000:ESCAPE: +e:01: : +e:000:s: +e:101:r: +e:0010:t: +e:1001:n: +e:1100:STOP: +e:1110:a: +e:1111:w: +e:10000:l: +e:11011:e: +e:001110:m: +e:100010:c: +e:100011:d: +e:0011010:i: +e:0011011:p: +e:0011110:b: +e:1101000:v: +e:1101011:y: +e:00110000:g: +e:00110001:f: +e:00110010:x: +e:00111110:k: +e:00111111:0x3a: +e:11010011:o: +e:11010100:': +e:001100111:h: +e:110100101:.: +e:0011001100:P: +e:0011001101:B: +e:1101001000:,: +e:1101010100:V: +e:1101010101:z: +e:1101010111:j: +e:11010010010:4: +e:11010010011:?: +e:11010101101:u: +e:110101011001:-: +e:1101010110001:!: +e:11010101100001:q: +e:110101011000001:G: +e:1101010110000000:ESCAPE: +f:0: : +f:101:o: +f:1001:t: +f:1100:a: +f:1101:i: +f:1111:e: +f:10000:.: +f:11100:r: +f:11101:f: +f:100010:STOP: +f:10001101:y: +f:10001111:u: +f:100011101:l: +f:1000111000:g: +f:10001110010:-: +f:100011001011:s: +f:100011100111:0x3a: +f:10001110011000:ESCAPE: +f:10001110011001:b: +g:00:h: +g:10: : +g:010:STOP: +g:011:e: +g:1100:i: +g:11100:0x3a: +g:11101:r: +g:11111:a: +g:110100:s: +g:110111:l: +g:111101:u: +g:1101011:b: +g:1101100:g: +g:1101101:o: +g:1111001:n: +g:111100011:d: +g:1101010100:.: +g:1101010101:,: +g:1101010110:': +g:1101010111:t: +g:1111000101:y: +g:11110001000:w: +g:111100010011:m: +g:11110001001011:?: +g:111100010010001:f: +g:111100010010101:;: +g:1111000100101000:ESCAPE: +h:0:e: +h:101:o: +h:1001:i: +h:1100:a: +h:1110: : +h:1111:t: +h:11010:r: +h:11011:STOP: +h:100000:b: +h:100001:u: +h:10001000:w: +h:10001001:d: +h:10001010:n: +h:10001011:y: +h:10001100:!: +h:10001101:l: +h:10001111:.: +h:100011100:': +h:1000111010:s: +h:10001110110:m: +h:100011101111:0x3a: +h:10001110111000:f: +h:10001110111010:c: +h:1000111011101101:q: +h:1000111011101110:g: +h:100011101110111100:h: +h:100011101110111101:ESCAPE: +h:100011101110111110:,: +h:100011101110111111:*: +i:01:n: +i:000:c: +i:1001:o: +i:1010:l: +i:1100:g: +i:1101:s: +i:1110:t: +i:1111:e: +i:00101:a: +i:00110:v: +i:10000:r: +i:10001:d: +i:10110:m: +i:001000:p: +i:001110: : +i:101111:f: +i:0011110:z: +i:0011111:STOP: +i:1011100:b: +i:1011101:k: +i:00100101:-: +i:00100110:x: +i:001001001:': +i:001001111:q: +i:0010011100:u: +i:0010011101:i: +i:00100100001:h: +i:00100100010:0x3a: +i:00100100011:w: +i:0010010000001:,: +i:0010010000010:y: +i:00100100000000:.: +i:001001000000010:ESCAPE: +i:001001000000011:j: +j:0:y: +j:11:o: +j:101:e: +j:1001:a: +j:10001:u: +j:100001:i: +j:10000011: : +k:00: : +k:10:e: +k:010:i: +k:110:STOP: +k:0110:y: +k:0111:s: +k:1111:f: +k:111001:a: +k:111010:l: +k:1110001:0x3a: +k:1110110:k: +k:11100000:': +k:11101111:.: +k:111000011:w: +k:111011100:o: +k:1110000101:h: +k:11100001000:b: +k:11100001001:,: +k:11101110111:n: +k:111011101010:?: +k:111011101100:m: +k:111011101101:!: +k:1110111010010:u: +k:1110111010110:d: +k:1110111010111:t: +k:11101110100001:j: +k:111011101000000:p: +k:1110111010001100:ESCAPE: +k:1110111010001101:r: +l:01:e: +l:000:l: +l:101:a: +l:0011:y: +l:1000:STOP: +l:1001:d: +l:1100:o: +l:1110:i: +l:1111: : +l:00100:u: +l:11010:s: +l:001010:t: +l:001011:m: +l:1101101:k: +l:11011000:f: +l:11011100:b: +l:11011110:': +l:11011111:c: +l:110110011:v: +l:110111010:0x3a: +l:1101100101:.: +l:1101110110:w: +l:11011001000:z: +l:11011101111:p: +l:110110010010:h: +l:1101110111000:g: +l:1101110111001:,: +l:11011101110100:r: +l:11011101110101:n: +l:11011101110111:-: +l:110111011101100:!: +l:1101110111011011:?: +l:110111011101101000:ESCAPE: +m:10:e: +m:001:m: +m:011: : +m:111:a: +m:0000:i: +m:0001:STOP: +m:0100:y: +m:1101:p: +m:01010:b: +m:11000:o: +m:110010:n: +m:110011:s: +m:0101100:l: +m:0101110:f: +m:01011010:0x3a: +m:01011110:4: +m:010110110:h: +m:010111110:w: +m:0101101111:': +m:0101111110:r: +m:0101111111:u: +m:01011011101:.: +m:0101101110000:ESCAPE: +n:000:i: +n:100:g: +n:101: : +n:110:d: +n:0011:a: +n:0100:s: +n:0110:e: +n:1110:STOP: +n:1111:t: +n:01110:c: +n:01111:n: +n:001010:y: +n:010100:': +n:010101:k: +n:010111:o: +n:0010000:r: +n:0010011:f: +n:0010110:u: +n:0010111:j: +n:00100010:v: +n:00100100:-: +n:00100101:.: +n:01011000:l: +n:01011010:x: +n:01011011:0x3a: +n:001000111:,: +n:010110011:m: +n:0010001100:!: +n:00100011010:z: +n:01011001001:?: +n:01011001010:h: +n:01011001011:b: +n:001000110110:B: +n:010110010000:w: +n:0101100100011:q: +n:01011001000101:p: +n:010110010001000:;: +n:0101100100010011:ESCAPE: +o:00:r: +o:110:n: +o:0100:f: +o:0101: : +o:0110:w: +o:1000:o: +o:1011:u: +o:01111:t: +o:10010:c: +o:10100:p: +o:10101:d: +o:11100:m: +o:11110:l: +o:011100:a: +o:011101:b: +o:100110:y: +o:100111:STOP: +o:111010:s: +o:111011:k: +o:1111101:v: +o:1111110:g: +o:11111111:i: +o:111110001:h: +o:111110010:!: +o:111111100:e: +o:111111101:j: +o:1111100110:': +o:11111000001:?: +o:11111000010:0x3a: +o:11111001110:z: +o:11111001111:x: +o:111110000110:.: +o:111110000111:-: +o:11111000000110:,: +o:11111000000111:G: +o:111110000001011:): +o:1111100000010100:S: +o:111110000001010110:ESCAPE: +o:111110000001010111:q: +p:00:e: +p:100:i: +p:110:o: +p:0100:STOP: +p:0110:s: +p:1010: : +p:1110:p: +p:01110:l: +p:01111:r: +p:10110:h: +p:11110:a: +p:101110:t: +p:101111:': +p:1111100:d: +p:1111101:m: +p:1111110:y: +p:111111101:0x3a: +p:111111111:!: +p:1111111100:w: +p:1111111101:u: +p:11111110000:b: +p:11111110010:-: +p:11111110011:.: +p:111111100011:n: +p:1111111000101:k: +p:11111110001001:,: +p:111111100010000:ESCAPE: +q:1:u: +q:001:0x3a: +q:0000:ESCAPE: +q:0001:': +q:01000:STOP: +r:000: : +r:011:i: +r:101:e: +r:0011:y: +r:0100:d: +r:1000:s: +r:1001:t: +r:1100:a: +r:1101:STOP: +r:1111:o: +r:01011:n: +r:11101:l: +r:001001:k: +r:001010:r: +r:001011:m: +r:010101:u: +r:111001:g: +r:0010000:': +r:0101001:c: +r:1110001:0x3a: +r:00100010:f: +r:00100011:.: +r:01010001:b: +r:11100000:v: +r:010100000:,: +r:010100001:p: +r:111000010:w: +r:1110000111:j: +r:11100001100:-: +r:111000011010:h: +r:1110000110110:G: +r:1110000110111100:!: +r:111000011011110100:*: +r:1110000110111101010:ESCAPE: +s:10: : +s:11:STOP: +s:011:t: +s:0000:s: +s:0010:i: +s:0011:h: +s:00011:;: +s:01010:e: +s:010001:o: +s:010011:c: +s:010110:0x3a: +s:0001000:.: +s:0001001:!: +s:0001011:y: +s:0100000:p: +s:0100100:a: +s:0101111:u: +s:00010100:,: +s:00010101:f: +s:01000011:': +s:01001011:n: +s:01011100:l: +s:01011101:r: +s:010000101:k: +s:010010100:d: +s:0100001001:m: +s:0100101011:b: +s:01000010000:?: +s:01000010001:w: +s:01001010100:g: +s:010010101010:q: +s:01001010101110:-: +s:010010101011000:ESCAPE: +t:000:i: +t:011:STOP: +t:100: : +t:111:h: +t:0010:a: +t:0100:r: +t:1010:s: +t:1011:o: +t:1101:e: +t:00111:t: +t:01010:y: +t:11000:u: +t:010110:m: +t:110010:c: +t:110011:l: +t:0011000:': +t:0011010:0x3a: +t:00110010:w: +t:00110110:!: +t:01011100:.: +t:01011101:b: +t:01011110:E: +t:01011111:f: +t:001100110:?: +t:001101110:n: +t:0011001110:z: +t:0011011110:d: +t:00110011111:,: +t:001100111101:-: +t:001101111110:): +t:0011011111110:g: +t:00110111111110:ESCAPE: +t:001101111111110:S: +t:00110111111111100:k: +t:001101111111111010:j: +u:00:r: +u:100:s: +u:111:n: +u:0100:e: +u:0101:m: +u:1100:t: +u:01100:c: +u:01101:g: +u:01110:b: +u:10100:p: +u:10101:i: +u:10110:l: +u:11010:d: +u:11011:a: +u:011110:STOP: +u:101110:y: +u:0111110:z: +u:1011110: : +u:01111111:': +u:011111100:k: +u:0111111010:f: +u:0111111011:,: +u:1011111100:w: +u:101111110100:v: +u:101111110101:x: +u:101111110111:o: +u:1011111101100:j: +u:101111110110110:.: +u:10111111011011100:?: +v:1:e: +v:01:i: +v:001:a: +v:0001:o: +v:00000: : +v:0000100:y: +v:0000110:STOP: +v:00001011:s: +v:000010101:r: +v:0000101000:ESCAPE: +v:0000101001:.: +w:0:s: +w:100: : +w:110:STOP: +w:1011:i: +w:1110:o: +w:10100:a: +w:11110:n: +w:11111:e: +w:1010111:y: +w:10101000:m: +w:10101011:d: +w:10101101:l: +w:101010011:b: +w:101010100:k: +w:101010101:r: +w:1010110001:,: +w:1010110011:h: +w:10101100000:c: +w:10101100001:f: +w:10101100101:p: +w:101010010100:g: +w:101011001000:t: +w:1010100101010:.: +w:1010100101011:0x3a: +w:1010110010011:q: +w:10101100100101:': +w:101011001001001:?: +w:1010110010010000:ESCAPE: +x:00:p: +x:10: : +x:11:t: +x:0110:STOP: +x:01000:o: +x:01010:c: +x:01110:i: +x:01111:m: +x:010010:e: +x:010110:y: +x:0100110:u: +x:0100111:f: +x:0101111:,: +x:010111001:a: +x:0101110101:': +x:01011101001:x: +x:010111010000:ESCAPE: +y:0: : +y:11:STOP: +y:10001:o: +y:10010:s: +y:10100:a: +y:10110:l: +y:10111:0x3a: +y:100110:d: +y:1000001:n: +y:1000010:t: +y:1010100:': +y:1010101:b: +y:1010111:.: +y:10000000:i: +y:10000110:,: +y:10000111:p: +y:10011100:m: +y:10011110:c: +y:10101100:w: +y:10101101:e: +y:100000010:?: +y:100000011:f: +y:100111010:r: +y:100111011:g: +y:1001111100:z: +y:1001111110:-: +y:1001111111:T: +y:100111110110:!: +y:100111110111:k: +y:1001111101010:v: +y:100111110101110:h: +y:10011111010111100:ESCAPE: +z:00:z: +z:01:STOP: +z:101:i: +z:1000:y: +z:1001:e: +z:1101: : +z:1110:l: +z:11110:a: +z:111110:o: +z:11111100:m: +z:11111101:0x3a: +z:11111111:c: +z:11111110100:u: +z:111111101011:!: +z:11111110101000:ESCAPE: +z:11111110101010:h: diff -uwNr -x dvbdevice.c -x menu.c -x libsi.a -x 'sysconfig*' -x .dependencies -x .svn -x '*.save' -x '*.o' vdr-1.4.reel/freesat.t2 vdr-1.4.freesat-tva/freesat.t2 --- vdr-1.4.reel/freesat.t2 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.4.freesat-tva/freesat.t2 2008-10-12 20:12:08.429399695 +0100 @@ -0,0 +1,2755 @@ +# Huffman Table for FreeSat table 2 +# +# This table was derived from on-air transmissions. It certainly has omissions +# and almost certainly contains errors. Use entirely at your own risk. +# +# Data taken from MythTV and Freesat EPG Parser by mitsubushi +# Additions, and corrections made by Dom +# More additions and corrections from Jochen Mann +# +# $Id: freesat.t2,v 1.13 2008/10/11 19:38:04 dom Exp $ +# +START:010:A: +START:100:C: +START:111:T: +START:0001:J: +START:0011:D: +START:1010:S: +START:00000:H: +START:00100:I: +START:00101:R: +START:01101:F: +START:01110:.: +START:01111:W: +START:10111:M: +START:11000:B: +START:11001:P: +START:11011:N: +START:000010:O: +START:011001:[: +START:101101:L: +START:110101:E: +START:0000110:K: +START:1101000:Y: +START:1101001:G: +START:00001110:2: +START:01100000:p: +START:01100010:U: +START:01100011:(: +START:10110000:1: +START:10110011:V: +START:000011110:Q: +START:101100010:3: +START:0000111110:9: +START:0000111111:8: +START:1011000110:6: +START:1011000111:5: +START:1011001000:Z: +START:1011001001:7: +START:1011001010:4: +START:101100101110:X: +START:101100101111: : +START:1011001011010:': +START:1011001011011:": +START:10110010110000:t: +START:101100101100010:a: +START:10110010110001110:ESCAPE: +0x09:1:ESCAPE: +0x0a:1:ESCAPE: +0x0d:1:ESCAPE: + :010:a: + :100:t: + :0001:o: + :0010:s: + :00110:d: + :01100:[: + :01111:p: + :10101:b: + :11001:c: + :11010:h: + :11100:w: + :11101:i: + :11111:f: + :000000:A: + :000011:M: + :001111:e: + :011100:B: + :011101:C: + :101000:T: + :101101:S: + :101110:g: + :110000:r: + :110110:n: + :110111:l: + :111101:m: + :0000011:v: + :0000100:G: + :0000101:N: + :0011101:y: + :0110101:H: + :0110111:L: + :1010010:J: + :1010011:F: + :1011001:R: + :1011110:u: + :1100010:D: + :1100011:W: + :1111001:P: + :00000100:k: + :00000101:O: + :01101000:-: + :01101101:1: + :10110001:K: + :10111110:j: + :11110000:I: + :11110001:E: + :001110010:q: + :001110011:U: + :011010010:V: + :011011000:Y: + :011011001: : + :101100001:2: + :0011100000:3: + :0011100001:8: + :0011100010:6: + :0110100111:5: + :1011000000:(: + :1011111100:STOP: + :1011111110:7: + :00111000110:0: + :01101001100:': + :01101001101:9: + :10110000010:Z: + :10111111110:4: + :10111111111:Q: + :001110001111:X: + :0011100011101:`: + :1011000001100:ESCAPE: + :1011000001101:.: + :1011000001110:&: + :10110000011110:": + :10110000011111:z: + :001110001110011:$: + :0011100011100100:+: + :00111000111001011:x: + :001110001110010101:]: + :0011100011100101000:/: + :0011100011100101001:?: +!:1: : +!:01:STOP: +!:001:.: +!:0000:0x3a: +!:0001001:": +!:0001010:/: +!:0001011:!: +!:00010000:): +!:000100010:': +!:0001000111:?: +!:00010001100:ESCAPE: +!:00010001101:]: +":11: : +":001:.: +":0000:p: +":0101:B: +":0111:T: +":1000:i: +":00010:f: +":00011:W: +":01000:S: +":01100:t: +":01101:C: +":10100:STOP: +":10111:,: +":100100:m: +":101010:n: +":101011:I: +":0100110:E: +":0100111:D: +":1001010:w: +":1001011:g: +":1001100:b: +":1001101:L: +":1011000:c: +":1011001:H: +":10011110:P: +":10110100:r: +":10110111:K: +":101101010:Y: +":101101101:A: +":1001111100:ESCAPE: +":1001111101:a: +$:0:1: +$:11:3: +$:100:4: +$:1011:2: +$:101001:5: +$:1010000:ESCAPE: +%:1: : +%:00:ESCAPE: +&:1: : +&:01:w: +&:001:B: +&:0000:E: +&:000110:A: +&:000101100:ESCAPE: +&:000101101:P: +':1:s: +':001:t: +':010: : +':0000:l: +':01101:r: +':000100:n: +':000101:.: +':000110:C: +':011000:B: +':011101:A: +':0111000:d: +':0111100:v: +':00011100:S: +':00011111:p: +':01100101:D: +':01111011:i: +':01111100:c: +':01111101:m: +':01111111:,: +':000111010:f: +':000111011:g: +':011001000:F: +':011001001:h: +':011001101:H: +':011001110:N: +':011100101:R: +':011100111:T: +':011110101:G: +':011111101:L: +':0001111000:o: +':0001111001:K: +':0001111011:a: +':0110011001:u: +':0110011111:O: +':0111001001:I: +':0111101000:w: +':0111101001:b: +':0111111001:e: +':00011110101:?: +':01100110000:E: +':01100110001:7: +':01110010000:P: +':000111101001:W: +':011001111001:0x3a: +':011001111010:!: +':011100100011:J: +':011111100001:q: +':011111100011:M: +':0001111010001:V: +':0110011110001:9: +':0110011110100:!: +':0110011110111:y: +':0111001000100:8: +':0111001000101:5: +':0111001100000:STOP: +':0111111000000:6: +':00011110100000:2: +':00011110100001:0: +':01100111100001:Y: +':01111110000010:j: +':01111110000011:Q: +':011111100010000:X: +':011111100010001:U: +':011111100010010:4: +':0110011110110100:ESCAPE: +':0110011110110101:1: +(:01:1: +(:000:P: +(:101:t: +(:1000:2: +(:1101:5: +(:1110:N: +(:00111:T: +(:10010:p: +(:11111:c: +(:001001:a: +(:001010:S: +(:001100:R: +(:100111:e: +(:111100:J: +(:111101:A: +(:0010110:D: +(:0011011:K: +(:1001100:v: +(:1001101:s: +(:1100000:b: +(:1100010:G: +(:1100100:M: +(:1100101:H: +(:1100110:C: +(:00100000:m: +(:00100010:o: +(:00100011:E: +(:00101110:W: +(:11000011:g: +(:11001110:L: +(:001000010:d: +(:001011111:U: +(:001101000:F: +(:001101010:f: +(:110000100:w: +(:110000101:B: +(:110011111:n: +(:0010000110:l: +(:0010000111:9: +(:0010111100:4: +(:0010111101:I: +(:0011010010:3: +(:0011010111:h: +(:1100111101:i: +(:00110100111:V: +(:00110101100: : +(:11001111000:k: +(:001101011011:O: +(:0011010110100:ESCAPE: +(:0011010110101:u: +):0: : +):11:.: +):101:STOP: +):1001:,: +):10000:0x3a: +):100011:;: +):1000101:!: +):1000100000:ESCAPE: +*:0:*: +*:11111:d: +*:1111001:e: +*:11110000:i: +*:111100010:ESCAPE: ++:00:ESCAPE: ++:01: : +,:1: : +,:01:S: +,:001:0: +,:00000:5: +,:0000110:b: +,:00001000:2: +,:00001001:": +,:00001011:1: +,:0000101010:': +,:000010100100:T: +,:000010100110:7: +,:0000101011010:ESCAPE: +-:00: : +-:0100:t: +-:0101:b: +-:0110:w: +-:0111:u: +-:1001:o: +-:1010:s: +-:1011:f: +-:10000:c: +-:11011:l: +-:11101:d: +-:100010:9: +-:110000:h: +-:110010:1: +-:110011:y: +-:110101:r: +-:111000:a: +-:111100:m: +-:111110:p: +-:1000110:S: +-:1101000:e: +-:1101001:i: +-:1111011:n: +-:10001110:C: +-:11000101:W: +-:11000111:g: +-:11100101:J: +-:11100110:D: +-:11110101:2: +-:11111100:7: +-:11111110:G: +-:11111111:O: +-:100011111:H: +-:110001000:A: +-:110001100:6: +-:110001101:B: +-:111001111:M: +-:111101000:E: +-:111101001:L: +-:111111010:U: +-:111111011:k: +-:1000111100:F: +-:1100010010:j: +-:1100010011:P: +-:1110010001:q: +-:1110010010:5: +-:1110010011:T: +-:1110011101:I: +-:10001111011:K: +-:11100100000:v: +-:11100100001:Z: +-:11100111001:N: +-:100011110101:R: +-:111001110001:Y: +-:1000111101001:0: +-:10001111010000:4: +-:10001111010001:z: +-:11100111000001:V: +-:11100111000010:3: +-:11100111000011:8: +-:111001110000001:Q: +-:1110011100000000:': +-:11100111000000010:ESCAPE: +.:1: : +.:010:STOP: +.:0011:.: +.:00010:i: +.:00100:0: +.:00101:c: +.:000001:u: +.:0000000:a: +.:0000001:[: +.:0001101:3: +.:00001000:4: +.:00001110:H: +.:00011000:S: +.:00011001:W: +.:00011100:o: +.:00011110:1: +.:000010100:5: +.:000010101:L: +.:000010111:p: +.:000011000:T: +.:000011001:A: +.:000011010:M: +.:000011110:C: +.:000011111:2: +.:000111011:D: +.:000111110:B: +.:0000100100:N: +.:0000100110:t: +.:0000100111:J: +.:0000101101:R: +.:0000110111:P: +.:0001110101:s: +.:0001111111:I: +.:00001011000:r: +.:00001101100:V: +.:00011101000:w: +.:00011101001:F: +.:00011111101:G: +.:000010010100:E: +.:000010010101:0x3a: +.:000010110010:h: +.:000011011010:,: +.:000111111000:': +.:0000100101101:b: +.:0000100101110:K: +.:0000100101111:Y: +.:0000101100111:O: +.:0000110110110:-: +.:0001111110010:f: +.:0001111110011:(: +.:00001011001100:": +.:000010010110000:?: +.:000010010110010:Q: +.:0000100101100110:U: +.:0000101100110101:6: +.:0000101100110111:k: +.:00001011001101100:d: +.:000010110011011010:ESCAPE: +.:000010110011011011:n: +/:110:1: +/:111:e: +/:0000:5: +/:0010:8: +/:00010:T: +/:00011:f: +/:00110:B: +/:00111:2: +/:10001:3: +/:10010:7: +/:10100:6: +/:10110:a: +/:101111:4: +/:1000000:F: +/:1000010:s: +/:1000011:M: +/:1001100:H: +/:1001110:D: +/:1001111:A: +/:1010101:S: +/:10000011:m: +/:10011010:W: +/:10101000:G: +/:10101001:U: +/:10101100:d: +/:10101101:O: +/:10101110:N: +/:10111001:C: +/:10111011:P: +/:100110110:L: +/:101011110: : +/:101011111:I: +/:101110000:E: +/:101110001:R: +/:101110100:K: +/:101110101:t: +/:1000001001:J: +/:1000001011:9: +/:10000010000:v: +/:10000010001:p: +/:10000010100:h: +/:10011011101:o: +/:10011011110:Q: +/:10011011111:0: +/:100000101010:l: +/:100110111000:V: +/:0100010111101:c: +/:10011011100100:ESCAPE: +/:10011011100101:g: +0:0:0: +0:111: : +0:1001:a: +0:1011:p: +0:10001:s: +0:11000:.: +0:11001:8: +0:11011:,: +0:100000:4: +0:100001:t: +0:101001:5: +0:110100:6: +0:1010000:3: +0:1010001:7: +0:1010101:]: +0:1010110:-: +0:1010111:1: +0:10101000:): +0:10101001:/: +0:11010100:STOP: +0:11010101:9: +0:11010111:2: +0:110101100:%: +0:1101011010:0x3a: +0:110101101111:m: +0:11010110110001:l: +0:11010110110010:;: +0:11010110110011:': +0:11010110111010:k: +0:11010110111011:!: +0:110101101100000:C: +0:1101011011000010:ESCAPE: +1:00:9: +1:100:1: +1:111:0: +1:0101: : +1:0111:2: +1:1011:.: +1:1100:5: +1:01000:6: +1:01001:8: +1:01101:/: +1:10100:]: +1:11010:3: +1:011001:7: +1:110110:4: +1:0110000:STOP: +1:0110001:-: +1:1010100:): +1:1010110:0x3a: +1:1010111:s: +1:1101110:,: +1:1101111:x: +1:10101010:': +1:101010110:X: +1:10101011110:t: +1:10101011111:R: +1:101010111011:;: +1:1010101110000:p: +1:1010101110001:m: +1:1010101110010:!: +1:101010111001110:b: +1:101010111001111:a: +1:1010101110100110:ESCAPE: +2:11:0: +2:000: : +2:010:.: +2:100:5: +2:0011:/: +2:1011:,: +2:00100:]: +2:00101:p: +2:01101:1: +2:10101:4: +2:011000:6: +2:011001:2: +2:011100:0x3a: +2:011101:-: +2:011111:): +2:1010000:STOP: +2:1010010:8: +2:1010011:9: +2:01111000:D: +2:01111001:3: +2:01111010:t: +2:01111011:7: +2:10100010:n: +2:101000110:a: +2:1010001110:': +2:10100011111:;: +2:101000111100:s: +2:1010001111010:": +2:101000111101100:ESCAPE: +2:101000111101111:L: +3:00: : +3:10:0: +3:110:.: +3:1110:/: +3:01000:2: +3:01001:1: +3:01010:): +3:01100:0x3a: +3:01110:-: +3:11111:]: +3:010110:D: +3:011010:4: +3:011011:STOP: +3:011111:5: +3:111100:,: +3:0101110:7: +3:0101111:3: +3:0111101:6: +3:1111011:t: +3:01111001:B: +3:11110100:8: +3:111101010:9: +3:0111100001:;: +3:1111010110:r: +3:01111000101:b: +3:01111000110:': +3:011110000010:p: +3:0111100010000:a: +3:01111000100110:ESCAPE: +3:010011001101101:m: +4:01: : +4:000:4: +4:100:.: +4:110:0: +4:0010:/: +4:1010:5: +4:1011:-: +4:00110:1: +4:11101:]: +4:11110:,: +4:001110:2: +4:111001:8: +4:111110:): +4:0011110:0x3a: +4:0011111:': +4:1110000:t: +4:1110001:3: +4:11111101:6: +4:11111110:STOP: +4:1111110000:9: +4:1111110010:7: +4:11111100011:C: +4:11111100110:;: +4:111111000101:x: +4:1111110011101:m: +4:11111100111110:p: +4:11111100111111:c: +4:111111001110010:ESCAPE: +5:00:0: +5:10: : +5:010:.: +5:0111:p: +5:1100:5: +5:01100:/: +5:11010:a: +5:11011:-: +5:11101:6: +5:011010:3: +5:111100:2: +5:111110:8: +5:111111:]: +5:0110110:0x3a: +5:1110000:): +5:1110001:s: +5:1110011:,: +5:1111010:7: +5:1111011:9: +5:01101110:4: +5:11100100:STOP: +5:11100101:t: +5:0110111110:c: +5:0110111111:1: +5:01101111001:;: +5:01101111011:m: +5:011011110001:': +5:011011110101:k: +5:0110111101001:l: +5:01101111010000:ESCAPE: +5:01101111010001:f: +6:00: : +6:10:.: +6:111:0: +6:0101:]: +6:01001:1: +6:01100:7: +6:01110:): +6:11000:,: +6:11001:0x3a: +6:11010:/: +6:010001:-: +6:011010:5: +6:011011:4: +6:011111:8: +6:110111:t: +6:0100000:6: +6:0111100:3: +6:0111101:2: +6:1101101:9: +6:11011000:': +6:010000100:STOP: +6:1101100101:a: +6:11011001110:;: +6:110110011111110:ESCAPE: +7:11:.: +7:001: : +7:011:0: +7:101:-: +7:0000:8: +7:0100:7: +7:1001:]: +7:01010:/: +7:000101:6: +7:000110:2: +7:000111:1: +7:010111:t: +7:100000:9: +7:100010:): +7:100011:5: +7:0001001:3: +7:0101101:,: +7:1000010:a: +7:1000011:4: +7:00010000:STOP: +7:01011000:0x3a: +7:01011001:p: +7:0001000110:;: +7:00010001000:': +7:000100011101:?: +7:0001000100100:ESCAPE: +7:0001000100101:s: +8:01: : +8:000:4: +8:110:.: +8:0011:0: +8:1000:9: +8:1001:7: +8:1011:8: +8:1110:1: +8:00100:/: +8:10100:3: +8:11110:5: +8:101010:): +8:111110:6: +8:111111:]: +8:0010100:0x3a: +8:0010101:,: +8:1010111:t: +8:00101100:p: +8:00101101:-: +8:00101111:a: +8:10101100:c: +8:10101101:2: +8:001011101:STOP: +8:0010111001:;: +8:001011100001:': +8:00101110001110:ESCAPE: +9:000:5: +9:001:]: +9:111:9: +9:0101:0: +9:0110:.: +9:0111:-: +9:1000:4: +9:1001:8: +9:1011:6: +9:1100: : +9:1101:7: +9:01000:2: +9:10100:3: +9:010010:1: +9:010011:/: +9:101010:t: +9:1010111:): +9:10101100:0x3a: +9:101011010:,: +9:10101101100:p: +9:10101101101:;: +9:10101101111:STOP: +9:1010110111010:a: +9:10101101110111:e: +9:101011011101100:ESCAPE: +0x3a:1: : +0x3a:01:0: +0x3a:00001:1: +0x3a:00010:T: +0x3a:0000000:ESCAPE: +0x3a:0000001:5: +;:0:ESCAPE: +;:1: : +=:1:ESCAPE: +?:1: : +?:01:STOP: +?:000:0x3a: +?:00100:!: +?:00111:.: +?:001010:;: +?:0010110:': +?:00101111:,: +?:001011101:/: +?:0010111000:ESCAPE: +@:1101:b: +@:11000:ESCAPE: +@:1010111:W: +@:1101110:n: +A:01: : +A:110:D: +A:111:n: +A:0000:s: +A:0001:m: +A:0010:d: +A:1000:r: +A:1011:l: +A:00110:c: +A:10010:u: +A:10100:g: +A:001111:b: +A:100111:t: +A:101011:f: +A:1010100:w: +A:1010101:i: +A:10011001:v: +A:10011011:p: +A:001110010:h: +A:001110100:.: +A:001110111:B: +A:100110100:q: +A:0011100000:C: +A:0011100010:,: +A:0011100110:y: +A:0011101010:S: +A:0011101100:k: +A:0011101101:T: +A:1001100001:R: +A:1001100010:F: +A:1001100011:z: +A:1001101011:a: +A:00111000010:P: +A:00111000110:-: +A:00111010110:A: +A:00111010111:I: +A:10011000001:e: +A:10011010100:N: +A:10011010101:x: +A:001110000110:X: +A:001110000111:K: +A:001110001110:3: +A:001110001111:&: +A:001110011101:M: +A:001110011111:Y: +A:0011100111000:L: +A:0011100111001:W: +A:0011100111100:*: +A:1001100000000:o: +A:1001100000001:1: +A:1001100000010:': +A:1001100000011:0x3a: +A:00111001111010:j: +A:001110011110110:G: +A:0011100111101110:O: +A:00111001111011110:4: +A:001110011110111110:ESCAPE: +A:001110011110111111:E: +B:00:C: +B:010:a: +B:101:r: +B:110:e: +B:111:B: +B:0111:i: +B:1000:u: +B:1001:o: +B:01101:l: +B:01100000:T: +B:01100001:.: +B:01100011:y: +B:01100100:I: +B:01100110:h: +B:01100111: : +B:011000100:A: +B:0110001010:O: +B:01100010110:0x3a: +B:01100101000:&: +B:01100101001:3: +B:01100101010:j: +B:01100101011:M: +B:01100101110:D: +B:011000101111:W: +B:011001011010:,: +B:011001011011:1: +B:011001011110:ESCAPE: +B:011001011111:P: +B:0110001011100:E: +B:0110010110011:R: +B:01100010111011:w: +B:011000101110100:-: +B:011001011001001:U: +B:011001011001010:S: +B:011001011001011:F: +B:0110010110010000:Q: +B:0110010110010001:4: +C:00:h: +C:011:B: +C:100:a: +C:110:o: +C:0101:r: +C:1010:.: +C:1110: : +C:1111:l: +C:01000:': +C:10111:i: +C:010011:e: +C:101101:u: +C:0100101:y: +C:1011001:,: +C:01001001:I: +C:010010000:A: +C:1011000000:C: +C:1011000001:D: +C:1011000100:S: +C:1011000101:T: +C:1011000111:G: +C:01001000111:w: +C:10110001101:J: +C:010010001010:R: +C:010010001100:2: +C:101100001000:?: +C:101100001010:O: +C:101100001011:H: +C:101100011000:E: +C:0100100010110:z: +C:1011000010011:-: +C:1011000110011:s: +C:10110000100101:!: +C:10110000110000:STOP: +C:10110001100100:P: +C:010010001011101:n: +C:101100001001000:K: +C:101100001001001:7: +C:101100011001011:4: +C:0100100010111000:0x3a: +C:1011000110010100:F: +C:01001000101110010:ESCAPE: +C:01001000101110011:b: +C:10110000101011001:O: +D:00:a: +D:01:,: +D:100:r: +D:101:o: +D:110:e: +D:1110:i: +D:111111:u: +D:1111001: : +D:1111011:': +D:11110000:.: +D:11110001:]: +D:11111010:y: +D:111101010:w: +D:111101011:W: +D:111110001:N: +D:111110010:C: +D:111110111:J: +D:1111010010:h: +D:1111100111:I: +D:1111101101:0x3a: +D:11110100001:M: +D:11110100010:&: +D:11110100011:V: +D:11111000010:-: +D:11111000011:G: +D:11111001100:O: +D:11111001101:A: +D:11111011001:S: +D:111101000000:F: +D:111101001101:s: +D:111101001111:d: +D:111110110000:v: +D:1111010011100:m: +D:1111010011101:j: +D:1111101100010:ESCAPE: +D:1111101100011:T: +D:11110100000110:9: +D:111101000001000:): +D:111101000001110:8: +D:111101000001111:7: +D:1111010000010011:R: +D:1111010000010100:B: +D:1111010000010101:4: +E:000:p: +E:010:a: +E:011:n: +E:110:l: +E:1001:m: +E:1010:x: +E:1110:v: +E:1111:d: +E:00100:s: +E:00110:r: +E:00111:u: +E:10000:E: +E:10001: : +E:001010:.: +E:001011:i: +E:101101:0x3a: +E:1011000:y: +E:1011001:t: +E:1011100:g: +E:1011110:4: +E:101110110:w: +E:101111100:c: +E:101111110:b: +E:1011101010:R: +E:1011101011:F: +E:1011101111:C: +E:10111010001:k: +E:10111010010:f: +E:10111010011:o: +E:10111011100:U: +E:10111011101:L: +E:10111110101:e: +E:10111110110:N: +E:10111111100:h: +E:10111111111:D: +E:101111101000:M: +E:101111101111:': +E:101111111100:2: +E:101111111101:-: +E:1011101000011:q: +E:1011111010010:O: +E:1011111010011:A: +E:10111010000001:S: +E:10111010000100:): +E:10111110111000:T: +E:10111110111001:,: +E:101110100001010:P: +E:1011101000010110:ESCAPE: +E:1011101000010111:z: +F:00:o: +F:10:r: +F:010:e: +F:110:i: +F:111:a: +F:0110:l: +F:01110:u: +F:0111100: : +F:0111101:O: +F:01111101:A: +F:01111111:B: +F:011111100:f: +F:0111110000:.: +F:0111110011:L: +F:01111100010:M: +F:01111100101:T: +F:01111110101:C: +F:01111110110:W: +F:011111001000:0x3a: +F:011111101000:U: +F:011111101001:': +F:011111101111:1: +F:0111110010010:y: +F:0111110010011:,: +F:01111110111010:I: +F:011111101110011:h: +F:0111111011100100:*: +F:0111111011100101:K: +F:0111111011101100:F: +F:0111111011101101:ESCAPE: +F:01111110111011100:X: +F:01111110111011101:R: +G:00:r: +G:01:a: +G:101:o: +G:110:e: +G:1001:u: +G:1111:i: +G:10001:n: +G:11101:l: +G:1110000:y: +G:1110001: : +G:1110011:w: +G:10000101:4: +G:10000111:P: +G:11100101:h: +G:100001000:-: +G:100001100:C: +G:111001001:M: +G:1000011010:B: +G:1110010000:.: +G:1110010001:I: +G:10000100100:;: +G:10000100101:,: +G:10000100110:A: +G:10000110111:0x3a: +G:1000011011000:O: +G:100001101101000:K: +G:100001101101001:2: +G:100001101101011:': +G:1000011011011100:ESCAPE: +G:1000011011011110:T: +G:1000011011011111:S: +H:00:e: +H:01:a: +H:10:o: +H:110:i: +H:1111:u: +H:11100:R: +H:1110100:P: +H:1110110:y: +H:11101011:I: +H:111011100:Q: +H:111011101:M: +H:111011110:A: +H:111011111: : +H:1110101000:S: +H:1110101001:.: +H:11101010101:G: +H:111010101001:E: +H:1110101011101:L: +H:11101010111101:w: +H:11101010111110:v: +H:111010101000101:W: +H:111010101000110:D: +H:111010101111110:s: +H:1110101010001110:ESCAPE: +H:1110101010001111:r: +I:0:n: +I:110:t: +I:1001:s: +I:1111:r: +I:10000:T: +I:10101:a: +I:11100: : +I:100010:c: +I:101001:m: +I:101100:z: +I:101101:.: +I:101111:d: +I:111011:I: +I:1000111:': +I:1011101:l: +I:10100000:A: +I:10100001:v: +I:10111001:V: +I:11101001:f: +I:11101011:o: +I:100011001:C: +I:100011010:P: +I:101000100:w: +I:101000110:0x3a: +I:101110000:p: +I:111010000:R: +I:111010001:,: +I:111010101:Y: +I:1000110000:E: +I:1000110001:6: +I:1000110111:q: +I:1010001011:y: +I:1010001110:M: +I:1110101000:g: +I:1110101001:D: +I:10001101100:e: +I:10001101101:5: +I:10100010100:S: +I:10100010101:9: +I:10100011111:F: +I:10111000100:b: +I:10111000110:-: +I:101000111100:B: +I:101000111101:): +I:1011100010100:N: +I:1011100010101:Q: +I:1011100010110:k: +I:10111000101111:O: +I:1011100010111000:ESCAPE: +I:1011100010111001:h: +J:00:e: +J:10:a: +J:11:o: +J:011:u: +J:0101:i: +J:01000: : +J:0100110:D: +J:0100111:.: +J:01001001:r: +J:010010110:s: +J:0100100000:M: +J:0100100010:J: +J:0100100011:,: +J:0100101000:B: +J:0100101001:-: +J:0100101110:K: +J:0100101111:T: +J:01001000010:C: +J:01001010110:n: +J:0100100001110:w: +J:0100100001111:R: +J:0100101011100:F: +J:0100101011111:': +J:010010101110110:ESCAPE: +K:00:i: +K:01:a: +K:10:e: +K:1111:y: +K:11000:n: +K:11001:o: +K:11011:r: +K:11101: : +K:110100:': +K:111000:u: +K:1101011:.: +K:1110011:l: +K:11100101:h: +K:110101000:T: +K:110101011:G: +K:111001001:,: +K:1101010100:w: +K:11010100101:4: +K:11010100110:A: +K:11010101010:3: +K:11100100000:2: +K:110101001110:-: +K:110101010110:0x3a: +K:110101010111:!: +K:111001000010:): +K:111001000101:S: +K:1101010011110:V: +K:1110010000110:6: +K:1110010000111:1: +K:11010100111111:L: +K:11100100010000:I: +K:11100100010001:?: +K:110101001111100:ESCAPE: +L:00:i: +L:10:o: +L:011:]: +L:110:e: +L:111:a: +L:0100:u: +L:010100:l: +L:010101:A: +L:010111:y: +L:01011011: : +L:010110000:I: +L:010110101:,: +L:0101100101:': +L:01011001101:.: +L:01011001110:C: +L:01011010010:L: +L:010110011001:t: +L:010110100111:S: +L:0101100110001:h: +L:0101101001100:J: +L:01011001100000:E: +L:010110011000010:T: +L:010110011000011:P: +L:010110100000000:D: +L:010110100110101:j: +L:0101101001101000:ESCAPE: +M:00:o: +M:11:a: +M:011:e: +M:101:i: +M:0101:c: +M:1001:u: +M:01001:y: +M:10001:r: +M:100000:S: +M:100001:P: +M:0100001: : +M:01000001:C: +M:01000110:F: +M:010000000:1: +M:010001000:h: +M:010001010:I: +M:010001110:T: +M:010001111:X: +M:0100000010:A: +M:0100010010:z: +M:01000101110:.: +M:010000001101:K: +M:010000001110:B: +M:010001001111:s: +M:010001011000:R: +M:010001011001:W: +M:010001011010:O: +M:0100000011110:,: +M:0100000011111:': +M:0100010110111:D: +M:0100010111100:4: +M:0100010111110:E: +M:01000100111000:m: +M:01000100111010:ESCAPE: +M:01000101111010:l: +M:01000101111110:): +M:01000101111111:w: +M:010001001110110:t: +M:010001001110111:V: +M:010001011011010:6: +M:010001011011011:2: +N:00:a: +N:10:o: +N:11:e: +N:011:i: +N:01010:u: +N:01011:E: +N:010010:A: +N:0100010:y: +N:0100110:g: +N:01000001:B: +N:01000010:I: +N:01000110:F: +N:01000111: : +N:010000001:': +N:010000111:Y: +N:010011100:L: +N:010011101:H: +N:0100001100:C: +N:0100111100:W: +N:0100111110:N: +N:0100111111:T: +N:010000110101:M: +N:010000110111:O: +N:010011110100:,: +N:010011110111:h: +N:0100001101001:.: +N:0100111101101:ESCAPE: +N:01000011011010:Q: +O:111:n: +O:0000:s: +O:0001:N: +O:0011:z: +O:0100:r: +O:1000:u: +O:1010:p: +O:1011:l: +O:1101:': +O:00101:U: +O:01011:h: +O:01110:f: +O:01111:w: +O:10010:.: +O:11000: : +O:001000:o: +O:001001:J: +O:010100:b: +O:010101:m: +O:011001:H: +O:011010:O: +O:011011:v: +O:100111:c: +O:110011:x: +O:1001101:d: +O:1100100:a: +O:01100001:t: +O:01100010:k: +O:10011000:g: +O:11001010:R: +O:011000000:K: +O:100110010:i: +O:110010111:V: +O:0110000011:2: +O:0110001101:S: +O:0110001110:B: +O:1001100110:W: +O:1001100111:-: +O:01100000100:,: +O:01100011000:j: +O:01100011001:L: +O:01100011111:I: +O:11001011001:A: +O:11001011011:C: +O:011000001010:0x3a: +O:011000111100:e: +O:110010110000:y: +O:110010110001:/: +O:110010110100:M: +O:0110001111011:P: +O:01100000101110:E: +O:01100000101111:D: +O:11001011010101:T: +O:110010110101000:ESCAPE: +P:11:a: +P:000:i: +P:010:e: +P:011:l: +P:100:o: +P:101:r: +P:0010:h: +P:001111:u: +P:0011010:C: +P:0011100:.: +P:0011101: : +P:00110000:B: +P:00110010:D: +P:00110111:s: +P:001100011:O: +P:001100111:,: +P:0011000101:y: +P:0011001100:M: +P:0011011000:E: +P:0011011001:': +P:0011011011:3: +P:00110001001:T: +P:001100010000:L: +P:001100010001:G: +P:001100110110:A: +P:001100110111:S: +P:001101101000:w: +P:001101101001:F: +P:0011001101011:J: +P:0011011010100:f: +P:0011011010101:R: +P:0011011010111:t: +P:00110011010100:V: +P:00110110101100:Y: +P:00110110101101:I: +P:001100110101011:&: +P:0011001101010100:ESCAPE: +Q:1:u: +Q:00:V: +Q:011: : +Q:0101:.: +Q:01000:a: +Q:0100100:w: +Q:0100110:E: +Q:0100111:C: +Q:01001011:&: +Q:010010101:': +Q:0100101000:T: +Q:01001010010:ESCAPE: +R:01:a: +R:11:o: +R:100:i: +R:101:e: +R:0000:p: +R:0011:u: +R:00011:E: +R:00100:h: +R:000100: : +R:001010:y: +R:00010100:D: +R:00010110:.: +R:00101100:T: +R:00101110:S: +R:000101010:F: +R:001011010:B: +R:001011011:n: +R:001011111:A: +R:0001010110:w: +R:0001011100:N: +R:0001011101:&: +R:0001011110:V: +R:0001011111:H: +R:0010111101:': +R:00010101110:t: +R:00010101111:I: +R:001011110000:C: +R:001011110010:O: +R:00101111000100:,: +R:00101111000110:U: +R:00101111000111:M: +R:00101111001101:ESCAPE: +R:001011110011100:2: +S:1:]: +S:0000:a: +S:0010:h: +S:0111:t: +S:00010:p: +S:00011:,: +S:00110:L: +S:01000:i: +S:01001:u: +S:01010:o: +S:01011:c: +S:01100:e: +S:001111:k: +S:0011100:w: +S:0110101: : +S:0110111:m: +S:00111010:q: +S:01101000:M: +S:01101001:n: +S:01101100:l: +S:001110110:P: +S:011011011:y: +S:0011101110:A: +S:01101101001:.: +S:001110111101:r: +S:001110111110:S: +S:001110111111:W: +S:011011010000:C: +S:011011010101:E: +S:011011010110:v: +S:0110110100011:ESCAPE: +S:0110110101000:I: +S:0110110101111:g: +S:00111011110010:4: +S:00111011110011:1: +S:01101101000100:O: +S:01101101011100:z: +S:011011010001011:B: +S:011011010111010:H: +S:011011010111011:T: +S:0011101111000100:G: +S:0011101111000111:D: +S:0110110100010100:-: +S:0110110101001100:3: +S:0110110101001101:2: +S:00111011110001010:': +S:00111011110001011:?: +S:01101101010011101:s: +S:01101101010011110:j: +S:01101101010011111:b: +S:011011010001010100:R: +S:011011010001010110:J: +S:011011010001010111:F: +S:011011010100111000:0x3a: +T:0:h: +T:100:o: +T:1010:V: +T:1011:w: +T:1100:r: +T:1111:e: +T:11010:a: +T:11011:i: +T:11100:u: +T:1110100:H: +T:1110110:W: +T:11101010: : +T:11101011:y: +T:111011101:M: +T:111011111:x: +T:1110111000:S: +T:11101110010:A: +T:11101111001:s: +T:11101111011:J: +T:111011100111:X: +T:111011110000:.: +T:1110111001101:-: +T:1110111100011:L: +T:1110111101000:C: +T:1110111101011:c: +T:11101110011000:T: +T:11101110011001:U: +T:11101111000101:4: +T:11101111010010:O: +T:111011110001001:G: +T:111011110100110:E: +T:111011110100111:,: +T:111011110101010:': +T:1110111100010001:;: +T:1110111101010010:ESCAPE: +T:1110111101010111:D: +T:11101111000100000:0x3a: +T:11101111010100110:R: +T:11101111010100111:N: +T:11101111010101100:I: +T:11101111010101101:B: +U:00:K: +U:10:n: +U:011:S: +U:110:p: +U:1111:l: +U:01010:s: +U:01011:r: +U:11101:R: +U:010000:g: +U:111000: : +U:0100111:.: +U:1110010:m: +U:01000100:k: +U:01000101:t: +U:01000110:E: +U:01000111:-: +U:01001000:F: +U:01001100:2: +U:11100110:c: +U:11100111:N: +U:010010010:f: +U:010010100:,: +U:010010111:Z: +U:0100101010:h: +U:0100110100:i: +U:0100110101:w: +U:0100110110:a: +U:01001010110:b: +U:010010110001:V: +U:010010110010:P: +U:010010110011:I: +U:010010110100:B: +U:010010110101:A: +U:010011011111:d: +U:0100101101101:C: +U:0100110111101:z: +U:01001101111000:ESCAPE: +U:01001101111001:T: +V:01: : +V:11:i: +V:000:.: +V:001:a: +V:101:e: +V:10001:C: +V:10011:o: +V:1000001:F: +V:1000011:I: +V:10000001:1: +V:10000101:4: +V:10010000:r: +V:10010010:E: +V:10010011:s: +V:10010101:': +V:10010110:0x3a: +V:10010111:l: +V:100000001:/: +V:100001001:-: +V:100100010:D: +V:100100011:u: +V:100101001:,: +V:1000000001:2: +V:1000010000:5: +V:1001010000:;: +V:10010100010:ESCAPE: +V:100001000100:7: +V:100101000110:3: +V:1000010001010:9: +V:1000010001110:A: +V:1000010001111:8: +V:1001010001111:W: +V:10010100011101:B: +W:00:h: +W:10:i: +W:011:a: +W:110:o: +W:111:e: +W:0100:r: +W:01011:O: +W:0101001: : +W:0101010:y: +W:010100000:B: +W:010100001:.: +W:010101100:I: +W:010101110:W: +W:010101111:A: +W:0101000100:': +W:0101000111:T: +W:01010001100:2: +W:01010001101:0x3a: +W:01010110100:H: +W:01010110110:V: +W:010101101010:l: +W:010101101110:s: +W:010101101111:,: +W:0101011010111:u: +W:010101101011011:E: +W:0101011010110100:ESCAPE: +X:1: : +X:000:a: +X:0011:m: +X:0111:t: +X:01010:-: +X:01011:e: +X:011000:u: +X:011001:I: +X:011011:,: +X:0100010:V: +X:0110100:5: +X:0110101:.: +X:01000000:S: +X:01000010:0x3a: +X:01000111:i: +X:010000011:': +X:010000111:X: +X:0100001100:): +X:01000011010:ESCAPE: +Y:1:o: +Y:00:e: +Y:010:u: +Y:01100:a: +Y:01110:v: +Y:01111: : +Y:0110100:n: +Y:01101010:r: +Y:01101101:O: +Y:01101111:i: +Y:011011000:L: +Y:011011001:s: +Y:011011101:m: +Y:0110101100:.: +Y:0110111001:P: +Y:011011100010:2: +Y:0110111000000:-: +Y:0110111000110:C: +Y:0110111000111:,: +Y:01101110000010:ESCAPE: +Y:01101110000011:d: +Z:01:a: +Z:10:e: +Z:11:o: +Z:0010:z: +Z:0011:i: +Z:00001:Z: +Z:00010: : +Z:00011:u: +Z:0000011:.: +Z:00000000:y: +Z:00000010:,: +Z:0000001101:-: +Z:00000011110:ESCAPE: +[:1:S: +[:01:A: +[:0000:2: +[:0010:R: +[:0011:1: +[:000101:n: +[:0001111:l: +[:00010011:r: +[:00011101:b: +[:000100001:C: +[:000100010:f: +[:000100101:M: +[:000111001:c: +[:0001000111:K: +[:0001001000:H: +[:0001110001:T: +[:00010000000:J: +[:00010000001:B: +[:00010001101:Z: +[:00010010011:P: +[:00011100000:L: +[:000100011000:F: +[:000100100101:I: +[:000111000011:N: +[:0001000110010:s: +[:0001001001001:G: +[:0001110000101:D: +[:00011100001000:O: +[:000111000010010:ESCAPE: +[:000111000010011:W: +]:1:STOP: +]:01: : +]:001:.: +]:0001:[: +]:00001:0x3a: +]:000001:,: +]:00000000:ESCAPE: +_:1:ESCAPE: +`:1000000:W: +`:10100000:o: +`:1101000010:ESCAPE: +a:01:n: +a:001:r: +a:101:t: +a:0000:m: +a:1001:s: +a:1110: : +a:1111:l: +a:00011:d: +a:10000:i: +a:11000:y: +a:11010:c: +a:000100:p: +a:100010:u: +a:100011:v: +a:110011:g: +a:110110:b: +a:110111:k: +a:0001010:w: +a:00010111:z: +a:11001000:.: +a:11001011:f: +a:000101100:,: +a:000101101:': +a:110010011:e: +a:110010101:h: +a:1100101001:x: +a:11001001000:a: +a:11001001001:-: +a:11001001011:j: +a:11001010000:0x3a: +a:11001010001:o: +a:110010010100:q: +a:11001001010100:!: +a:11001001010111:?: +a:1100100101010100:ESCAPE: +a:1100100101010110:;: +a:1100100101010111:): +a:1100100101011001:/: +a:1100100101011011:@: +a:11001001010101010:J: +a:11001001010101011:]: +a:11001001010110101:L: +a:110010010101100000:R: +a:110010010101100001:S: +a:110010010101100010:V: +a:11001001010110001110:P: +a:110010010101100011110:STOP: +b:00:e: +b:010:u: +b:011:a: +b:100:y: +b:101:o: +b:1100:l: +b:1110:r: +b:1111:i: +b:110100:s: +b:110110: : +b:110111:b: +b:11010101:c: +b:110101000:j: +b:110101100:,: +b:110101101:.: +b:1101010011:': +b:1101011111:t: +b:11010100101:0x3a: +b:11010111000:w: +b:11010111001:d: +b:11010111010:h: +b:11010111011:&: +b:11010111101:-: +b:110101111000:m: +b:110101111001:n: +b:1101010010000:?: +b:1101010010010:v: +b:11010100100010:f: +b:11010100100111:p: +b:110101001000111:;: +b:110101001001101:D: +b:1101010010001100:/: +b:11010100100110001:k: +b:1101010010011000010:ESCAPE: +b:1101010010011000011:!: +b:110101001001100000000000:STOP: +c:00:o: +c:011:a: +c:100:e: +c:110:h: +c:0100:i: +c:0101:l: +c:1011:k: +c:1111:t: +c:10100:u: +c:10101:r: +c:11100: : +c:1110100:y: +c:1110101:c: +c:11101101:s: +c:11101110:.: +c:111011111:,: +c:1110110001:G: +c:11101100001:n: +c:11101100110:D: +c:11101111000:K: +c:11101111011:C: +c:111011000000:0x3a: +c:111011001001:-: +c:111011001010:A: +c:111011001110:L: +c:111011001111:': +c:111011110010:d: +c:111011110100:q: +c:111011110101:I: +c:1110110010000:N: +c:1110110010001:z: +c:1110111100111:F: +c:11101100000101:w: +c:11101100000111:E: +c:11101100101100:?: +c:11101111001100:M: +c:11101111001101:S: +c:111011000001000:b: +c:111011000001001:ESCAPE: +c:111011000001100:!: +c:111011001011010:Q: +c:111011001011011:P: +c:111011001011100:;: +c:111011001011110:B: +c:1110110000011011:V: +c:1110110010111011:m: +c:1110110010111110:/: +c:11101100000110101:): +c:11101100101110100:U: +c:11101100101111110:W: +c:111011000001101001:H: +c:111011001011111110:R: +c:111011001011111111:T: +c:11101100101110101000000:STOP: +d:0: : +d:101:e: +d:1100:a: +d:1110:i: +d:10001:.: +d:10011:o: +d:11011:r: +d:11111:s: +d:100001:d: +d:100101:l: +d:110100:u: +d:111101:y: +d:1001001:-: +d:1101011:v: +d:1111000:g: +d:1111001:,: +d:10000000:h: +d:10000001:0x3a: +d:10000010:m: +d:10010000:w: +d:10010001:n: +d:11010101:': +d:100000111:f: +d:1101010001:?: +d:1101010010:b: +d:1101010011:c: +d:10000011000:!: +d:11010100000:p: +d:11010100001:t: +d:100000110010:STOP: +d:100000110011:): +d:100000110100:k: +d:100000110101:;: +d:100000110111:/: +d:10000011011010:": +d:10000011011011:j: +d:100000110110000:z: +d:100000110110011:q: +d:1000001101100011:@: +d:1000001101100100:ESCAPE: +d:10000011011001010:]: +e:10: : +e:010:s: +e:110:r: +e:0000:d: +e:0011:a: +e:1111:n: +e:00010:c: +e:01100:e: +e:01101:w: +e:01111:t: +e:11100:l: +e:000110:x: +e:001000:v: +e:001001:i: +e:001010:y: +e:011100:m: +e:111010:.: +e:0001110:f: +e:0010111:b: +e:0111010:,: +e:1110110:p: +e:00011110:-: +e:00011111:h: +e:00101100:k: +e:01110110:': +e:11101110:g: +e:11101111:o: +e:001011011:0x3a: +e:0010110100:): +e:0010110101:q: +e:0111011101:?: +e:0111011110:u: +e:01110111000:z: +e:01110111110:!: +e:011101111110:STOP: +e:011101111111:j: +e:0111011100110:/: +e:01110111001001:4: +e:01110111001010:B: +e:01110111001110:]: +e:01110111001111:;: +e:011101110010000:": +e:0111011100100011:D: +e:0111011100101100:ESCAPE: +e:0111011100101110:@: +e:01110111001000100:T: +e:01110111001011111:L: +e:011101110010110100:V: +e:011101110010110101:G: +e:011101110010111100:1: +e:011101110010111101000:2: +e:011101110010111101001:N: +e:0111011100101111011101:P: +e:0111011100101111011110:M: +e:0111011100101111011111:H: +f:00:o: +f:10: : +f:010:i: +f:110:r: +f:0111:a: +f:1110:e: +f:01100:t: +f:11110:u: +f:11111:f: +f:011011:l: +f:01101000:s: +f:01101001:y: +f:011010110:.: +f:0110101000:?: +f:0110101011:,: +f:0110101111:-: +f:01101010011:0x3a: +f:01101010100:': +f:01101010101:g: +f:011010100100:m: +f:011010111000:ESCAPE: +f:011010111010:b: +f:011010111011:n: +f:0110101001011:c: +f:0110101110010:!: +f:01101011100110:): +f:01101011100111:w: +f:011010100101010:/: +f:0110101001010000:h: +f:0110101001010110:;: +f:01101010010101110:k: +f:01101010010101111:v: +f:011010100101000100:STOP: +g:11: : +g:000:a: +g:010:h: +g:101:e: +g:0011:u: +g:0110:r: +g:1000:i: +g:01110:l: +g:10010:s: +g:10011:o: +g:001001:,: +g:001010:n: +g:011110:g: +g:011111:.: +g:0010110:y: +g:00100001:': +g:00100010:-: +g:00100011:0x3a: +g:001000000:d: +g:001011101:b: +g:001011110:t: +g:001011111:w: +g:0010000010:?: +g:0010000011:m: +g:00101110001:!: +g:00101110011:f: +g:001011100001:;: +g:001011100101:STOP: +g:0010111000000:k: +g:0010111001000:p: +g:00101110000010:): +g:00101110000011:": +g:001011100100101:c: +g:001011100100111:/: +g:0010111001001000:ESCAPE: +g:0010111001001100:]: +g:0010111001001101:z: +g:001011100100100110:v: +h:0:e: +h:100:o: +h:101:i: +h:110: : +h:1111:a: +h:111001:r: +h:111011:t: +h:11100001:y: +h:11100011:l: +h:11101000:.: +h:11101001:n: +h:11101011:u: +h:111000000:d: +h:111000100:s: +h:111010100:,: +h:1110000011:w: +h:1110001010:': +h:1110001011:-: +h:11101010101:m: +h:11101010110:0x3a: +h:11101010111:b: +h:111000001001:c: +h:111000001011:?: +h:111010101000:!: +h:1110000010000:): +h:1110000010100:h: +h:1110000010101:k: +h:1110101010011:f: +h:11101010100101:g: +h:111000001000100:p: +h:111000001000101:;: +h:111000001000110:/: +h:111010101001001:v: +h:1110101010010000:q: +h:11101010100100010:ESCAPE: +h:111010101001000110:": +h:11101010100100011100:z: +h:11101010100100011110:]: +h:11101010100100011111:*: +h:1110000010001110000000:STOP: +i:10:n: +i:000:t: +i:010:s: +i:0011:l: +i:1100:o: +i:1101:c: +i:1111:e: +i:00100:a: +i:01100:m: +i:01101:d: +i:01110:v: +i:11100:g: +i:11101:r: +i:001010:p: +i:011110:f: +i:0010110:z: +i:0111110: : +i:00101111:b: +i:01111110:k: +i:001011100:-: +i:001011101:x: +i:0111111100:u: +i:0111111110:q: +i:01111111010:.: +i:01111111110:,: +i:011111110111:w: +i:011111111111:': +i:0111111101101:i: +i:0111111111101:j: +i:01111111011001:0x3a: +i:01111111111000:h: +i:011111110110000:/: +i:011111111110011:y: +i:0111111101100011:?: +i:0111111111100100:P: +i:01111111111001011:!: +i:011111111110010100:): +i:0111111101100010001:C: +i:0111111101100010010:ESCAPE: +i:01111111011000100110:D: +i:01111111011000100111:;: +i:0111111101100010000000:STOP: +j:0:o: +j:11:u: +j:101:a: +j:1001:e: +j:10000:i: +j:100011:y: +j:1000101: : +j:10001001:.: +j:100010000:': +j:1000100011:t: +j:10001000100:n: +j:100010001011:s: +j:1000100010100:ESCAPE: +j:1000100010101:h: +k:10: : +k:11:e: +k:000:s: +k:011:i: +k:0010:.: +k:01001:y: +k:001100:': +k:001101:a: +k:001110:p: +k:001111:,: +k:010100:l: +k:010101:f: +k:010110:n: +k:0100000:/: +k:0100010:-: +k:0100011:o: +k:01011101:0x3a: +k:010000111:b: +k:010111000:w: +k:010111001:m: +k:010111100:h: +k:010111110:u: +k:010111111:k: +k:0100001000:r: +k:0100001001:ESCAPE: +k:0100001010:?: +k:0100001100:t: +k:0100001101:g: +k:0101111011:d: +k:01000010110:j: +k:010000101110:): +k:010111101000:;: +k:010111101001:c: +k:0100001011110:v: +k:0101111010110:!: +k:010111101011110:": +k:010111101011111:STOP: +l:010:a: +l:011:i: +l:100:l: +l:110:e: +l:111: : +l:0000:u: +l:0001:d: +l:0010:y: +l:1011:o: +l:10100:s: +l:001100:.: +l:001110:t: +l:0011010:v: +l:0011110:f: +l:1010100:m: +l:1010101:k: +l:1010110:p: +l:00110111:c: +l:00111110:-: +l:10101111:,: +l:001101101:0x3a: +l:001111111:b: +l:101011100:': +l:0011011000:r: +l:0011011001:h: +l:0011111100:n: +l:0011111101:g: +l:1010111011:w: +l:10101110100:?: +l:1010111010100:!: +l:1010111010110:z: +l:10101110101011:/: +l:101011101010100:;: +l:101011101011100:E: +l:101011101011101:*: +l:101011101011111:STOP: +l:1010111010101011:ESCAPE: +l:1010111010111100:): +l:10101110101010100:@: +l:10101110101010101:j: +l:10101110101111010:": +l:101011101011110111:]: +m:00:a: +m:01:e: +m:111: : +m:1001:p: +m:1011:o: +m:1100:i: +m:10000:.: +m:10001:s: +m:11010:u: +m:11011:m: +m:101001:y: +m:101011:b: +m:1010000:,: +m:1010100:/: +m:10100010:]: +m:101000110:0x3a: +m:101010100:': +m:1010001111:r: +m:1010101011:f: +m:1010101100:l: +m:1010101110:n: +m:10100011100:?: +m:10100011101:!: +m:10101010100:STOP: +m:10101010101:w: +m:10101011011:h: +m:10101011110:-: +m:101010111110:4: +m:1010101101010:t: +m:1010101111110:;: +m:1010101111111:c: +m:10101011010000:): +m:10101011010001:ESCAPE: +m:10101011010011:d: +m:101010110100101:g: +m:10101011010010001:v: +m:10101011010010010:k: +m:10101011010010011:z: +n:01: : +n:001:t: +n:100:g: +n:111:d: +n:0000:s: +n:1010:a: +n:1101:e: +n:10110:c: +n:11000:i: +n:000111:.: +n:101111:n: +n:110011:o: +n:0001001:u: +n:0001011:v: +n:0001100:f: +n:1011100:k: +n:1011101:': +n:1100100:y: +n:1100101:,: +n:00010000:m: +n:00010100:l: +n:00010101:-: +n:000100011:w: +n:000110101:0x3a: +n:0001000101:z: +n:0001101000:h: +n:0001101100:b: +n:0001101101:j: +n:0001101110:r: +n:00010001000:p: +n:00011010011:x: +n:00011011111:?: +n:000100010011:;: +n:000110100101:): +n:000110111100:!: +n:000110111101:q: +n:0001000100100:/: +n:0001000100101:STOP: +n:0001101001000:ESCAPE: +n:00011010010010:B: +n:0001101001001100:]: +n:0001101001001101:": +n:0001101001001110:@: +o:001:u: +o:011: : +o:100:r: +o:111:n: +o:0000:l: +o:1100:m: +o:1101:f: +o:00010:v: +o:01000:s: +o:01001:p: +o:10100:t: +o:10101:o: +o:10111:w: +o:000110:k: +o:000111:i: +o:010100:g: +o:010111:c: +o:101101:d: +o:0101011:e: +o:0101100:y: +o:0101101:a: +o:1011001:b: +o:01010101:h: +o:10110000:.: +o:010101000:-: +o:010101001:,: +o:1011000101:': +o:1011000111:x: +o:10110001001:0x3a: +o:10110001101:z: +o:101100010001:?: +o:101100011001:j: +o:1011000100000:!: +o:1011000110001:q: +o:10110001100000:/: +o:10110001100001:): +o:1011000100001101:;: +o:1011000100001110:G: +o:10110001000011000:": +o:10110001000011110:ESCAPE: +o:101100010000110010:]: +o:101100010000110011:@: +o:1011000100001111101:STOP: +o:1011000100001111110:B: +o:10110001000011111110:O: +o:10110001000011111111:C: +p:001:l: +p:010: : +p:011:o: +p:101:r: +p:111:e: +p:0000:p: +p:1100:a: +p:1101:i: +p:00011:t: +p:10000:u: +p:10001:h: +p:10010:s: +p:000101:m: +p:0001001:d: +p:1001101:y: +p:1001110:.: +p:1001111:,: +p:00010000:-: +p:000100011:?: +p:100110001:0x3a: +p:1001100100:': +p:1001100101:]: +p:1001100110:+: +p:1001100111:b: +p:00010001001:f: +p:00010001010:k: +p:00010001011:!: +p:10011000001:c: +p:10011000010:n: +p:10011000011:w: +p:000100010000:STOP: +p:000100010001:;: +p:100110000001:/: +p:1001100000001:g: +p:10011000000001:): +p:100110000000001:": +p:10011000000000000:ESCAPE: +q:1:u: +q:000:,: +q:001:.: +q:011: : +q:01001:b: +q:01010:': +q:01011:i: +q:010001:a: +q:010000100:ESCAPE: +r:000:a: +r:001:o: +r:100:i: +r:110: : +r:111:e: +r:0100:s: +r:0101:t: +r:01110:d: +r:10100:n: +r:10101:y: +r:011010:u: +r:011011:m: +r:011111:k: +r:101101:l: +r:101110:.: +r:101111:r: +r:0110000:f: +r:0110010:,: +r:0110011:v: +r:1011000:c: +r:1011001:g: +r:01100011:': +r:01111000:-: +r:01111001:b: +r:01111011:p: +r:011000101:0x3a: +r:011110100:w: +r:0111101010:?: +r:0111101011:h: +r:01100010010:!: +r:011000100001:q: +r:011000100010:j: +r:011000100011:STOP: +r:011000100110:/: +r:0110001000001:;: +r:0110001001111:): +r:01100010011101:z: +r:011000100000001:": +r:011000100000011:]: +r:0110001000000100:x: +r:0110001000000101:ESCAPE: +r:01100010000000011:Z: +s:0: : +s:101:t: +s:1000:.: +s:1110:e: +s:10011:,: +s:11000:o: +s:11001:s: +s:11110:h: +s:11111:i: +s:100101:c: +s:110100:u: +s:110110:p: +s:1101111:a: +s:10010001:n: +s:10010011:m: +s:11010100:y: +s:11010110:0x3a: +s:11011100:l: +s:11011101:k: +s:100100001:b: +s:100100100:f: +s:110101010:w: +s:110101111:': +s:1001000000:!: +s:1001000001:g: +s:1001001010:r: +s:1101010110:?: +s:1101010111:-: +s:1101011101:q: +s:11010111001:d: +s:100100101100:/: +s:100100101101:): +s:100100101111:STOP: +s:110101110000:]: +s:110101110001:;: +s:1001001011101:v: +s:100100101110001:": +s:100100101110011:z: +s:1001001011100000:j: +s:1001001011100001:ESCAPE: +s:10010010111001011:@: +s:100100101110010101:T: +t:10:h: +t:000:i: +t:010:o: +t:011:e: +t:111: : +t:0010:a: +t:00110:u: +t:11001:r: +t:11011:s: +t:001111:.: +t:110001:t: +t:110100:y: +t:0011101:c: +t:1100001:l: +t:00111001:-: +t:11000000:v: +t:11000001:m: +t:11010101:w: +t:11010110:,: +t:11010111:': +t:001110000:n: +t:0011100011:?: +t:1101010001:b: +t:1101010010:0x3a: +t:00111000100:!: +t:11010100000:z: +t:11010100110:d: +t:11010100111:f: +t:110101000010:x: +t:0011100010100:g: +t:0011100010101:;: +t:1101010000110:p: +t:00111000101100:P: +t:00111000101101:STOP: +t:00111000101111:): +t:11010100001110:/: +t:11010100001111:k: +t:0011100010111000:@: +t:0011100010111010:E: +t:00111000101110011:]: +t:00111000101110111:": +t:001110001011100100:F: +t:001110001011101100:ESCAPE: +t:0011100010111001010:j: +t:0011100010111011010:1: +u:011:t: +u:101:n: +u:110:s: +u:111:r: +u:0001:d: +u:0010:e: +u:0101:l: +u:1000:p: +u:00000:b: +u:00001: : +u:00110:i: +u:01000:a: +u:01001:g: +u:10010:c: +u:10011:m: +u:0011100:y: +u:00111010:z: +u:00111100:': +u:00111110:f: +u:00111111:k: +u:001111010:,: +u:0011101101:-: +u:0011101110:o: +u:0011110110:.: +u:0011110111:x: +u:00111011000:w: +u:00111011110:0x3a: +u:001110110010:q: +u:001110111110:h: +u:001110111111:v: +u:0011101100110:j: +u:001110110011100:u: +u:001110110011101:?: +u:0011101100111110:/: +u:0011101100111111:!: +u:00111011001111001:ESCAPE: +u:001110110011110100:;: +u:001110110011110111:): +u:0011101100111101010:T: +u:0011101100111100010000000:STOP: +v:1:e: +v:01:i: +v:000:a: +v:0011:o: +v:00101:.: +v:001001: : +v:00100001:': +v:00100011:y: +v:001000000:u: +v:001000100:s: +v:0010001010:r: +v:00100000100:-: +v:00100000110:,: +v:00100010110:n: +v:001000001010:g: +v:001000001011:v: +v:001000001111:l: +v:001000101110:@: +v:001000101111:0x3a: +v:0010000011101:k: +v:001000001110010:t: +v:0010000011100110:d: +v:001000001110011110:ESCAPE: +w:00:i: +w:011:e: +w:100: : +w:101:s: +w:110:h: +w:0101:a: +w:1111:o: +w:01000:.: +w:01001:w: +w:11100:n: +w:1110110:r: +w:11101010:,: +w:11101011:l: +w:11101111:y: +w:111010010:c: +w:111011101:b: +w:1110100010:0x3a: +w:1110100110:m: +w:1110100111:': +w:1110111000:d: +w:11101000000:f: +w:11101000001:]: +w:11101000010:!: +w:11101000111:k: +w:11101110010:-: +w:111010000111:g: +w:111010001100:?: +w:111010001101:t: +w:111011100111:p: +w:1110100001101:u: +w:1110111001101:): +w:11101000011000:STOP: +w:11101110011001:j: +w:111011100110001:q: +w:1110111001100000:/: +w:11101110011000010:;: +w:1110111001100001100:ESCAPE: +x:01:p: +x:11:t: +x:101: : +x:0000:i: +x:0010:a: +x:1000:c: +x:00010:u: +x:00111:e: +x:10011:-: +x:000110:f: +x:001101:o: +x:100100:.: +x:0001110:,: +x:0001111:m: +x:0011001:y: +x:10010101:': +x:10010110:q: +x:001100000:s: +x:100101000:0x3a: +x:100101110:h: +x:0011000011:?: +x:1001010010:l: +x:1001011110:w: +x:10010100110:x: +x:10010100111:b: +x:10010111111:): +x:001100001011:/: +x:0011000010100:4: +x:0011000010101:!: +x:1001011111011:;: +x:100101111101001:v: +x:1001011111001000:STOP: +x:1001011111010000:ESCAPE: +y:1: : +y:000:o: +y:0011:s: +y:0101:.: +y:01001:,: +y:01100:e: +y:01110:': +y:001001:a: +y:001010:i: +y:001011:d: +y:010001:n: +y:011011:0x3a: +y:011111:l: +y:0010000:w: +y:0110100:t: +y:0110101:m: +y:0111101:-: +y:00100011:b: +y:01000000:?: +y:01000001:r: +y:01000010:p: +y:01000011:f: +y:01111001:c: +y:0010001001:;: +y:0010001010:J: +y:0111100000:h: +y:0111100001:!: +y:0111100011:g: +y:00100010000:): +y:00100010111:/: +y:01111000101:]: +y:001000100011:k: +y:001000101100:ESCAPE: +y:001000101101:u: +y:011110001001:STOP: +y:0010001000100:z: +y:0111100010001:": +y:00100010001011:j: +y:01111000100001:2: +y:001000100010100:y: +y:001000100010101:x: +y:0111100010000000:v: +y:0111100010000001:T: +y:0111100010000011:P: +z:10:e: +z:001:a: +z:011:z: +z:110: : +z:111:i: +z:0001:l: +z:0100:y: +z:01010:o: +z:000000:c: +z:000010:,: +z:000011:.: +z:010110:w: +z:0000010:': +z:00000110:0x3a: +z:00000111:t: +z:01011101:m: +z:010111000:k: +z:010111100:-: +z:010111101:u: +z:010111111:b: +z:01011100100:s: +z:01011100101:/: +z:01011100111:d: +z:01011111001:p: +z:01011111011:?: +z:010111001100:h: +z:010111110000:@: +z:010111110100:): +z:0101111100011:v: +z:0101111101010:g: +z:01011100110111:r: +z:01011111000100:q: +z:01011111000101:n: +z:01011111010110:ESCAPE: +z:010111001101001:STOP: +}:0000100000: : +~:1:ESCAPE: diff -uwNr -x dvbdevice.c -x menu.c -x libsi.a -x 'sysconfig*' -x .dependencies -x .svn -x '*.save' -x '*.o' vdr-1.4.reel/include/libsi/descriptor.h vdr-1.4.freesat-tva/include/libsi/descriptor.h --- vdr-1.4.reel/include/libsi/descriptor.h 2008-09-27 09:50:29.781782204 +0100 +++ vdr-1.4.freesat-tva/include/libsi/descriptor.h 2008-10-06 18:46:44.403088585 +0100 @@ -361,6 +361,25 @@ virtual void Parse(); }; +class ContentIdentifierDescriptor : public Descriptor { +public: + String entry; + int getCridType() const; + int getCridLocation() const; +// virtual int getLength() { return sizeof(descr_content_identifier)+entry.getLength(); } + private: + const descr_content_identifier *s; +protected: + virtual void Parse(); +}; + +class DefaultAuthorityDescriptor : public Descriptor { +public: + String DefaultAuthority; //ID +protected: + virtual void Parse(); +}; + //abstract base class class MultilingualNameDescriptor : public Descriptor { public: diff -uwNr -x dvbdevice.c -x menu.c -x libsi.a -x 'sysconfig*' -x .dependencies -x .svn -x '*.save' -x '*.o' vdr-1.4.reel/include/libsi/freesat.h vdr-1.4.freesat-tva/include/libsi/freesat.h --- vdr-1.4.reel/include/libsi/freesat.h 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.4.freesat-tva/include/libsi/freesat.h 2008-10-06 18:46:27.403674056 +0100 @@ -0,0 +1,12 @@ + + +#ifndef FREESAT_H +#define FREESAT_H + +#include + +extern char *freesat_huffman_decode(const unsigned char *compressed, size_t size); + +#endif + + diff -uwNr -x dvbdevice.c -x menu.c -x libsi.a -x 'sysconfig*' -x .dependencies -x .svn -x '*.save' -x '*.o' vdr-1.4.reel/include/libsi/headers.h vdr-1.4.freesat-tva/include/libsi/headers.h --- vdr-1.4.reel/include/libsi/headers.h 2008-09-27 09:50:29.781782204 +0100 +++ vdr-1.4.freesat-tva/include/libsi/headers.h 2008-10-06 18:46:44.403088585 +0100 @@ -1673,11 +1673,39 @@ u_char descriptor_length :8; }; +struct entry_tva_id { + u_char tva_id_hi :8; + u_char tva_id_lo :8; +#if BYTE_ORDER == BIG_ENDIAN + u_char reserved :5; + u_char running_status :3; +#else + u_char running_status :3; + u_char reserved :5; +#endif +}; + + /* 0x76 content_identifier_descriptor (ETSI TS 102 323) */ struct descr_content_identifier { u_char descriptor_tag :8; u_char descriptor_length :8; +#if BYTE_ORDER == BIG_ENDIAN + u_char crid_type :6; + u_char crid_location :2; +#else + u_char crid_location :2; + u_char crid_type :6; +#endif + union { + u_char crid_length :8; + u_char crid_ref_hi :8; + }; + union { + u_char crid_byte :8; + u_char crid_ref_lo :8; + }; }; /* 0x77 time_slice_fec_identifier_descriptor (ETSI EN 301 192) */ diff -uwNr -x dvbdevice.c -x menu.c -x libsi.a -x 'sysconfig*' -x .dependencies -x .svn -x '*.save' -x '*.o' vdr-1.4.reel/include/libsi/si.h vdr-1.4.freesat-tva/include/libsi/si.h --- vdr-1.4.reel/include/libsi/si.h 2008-09-27 09:50:29.781782204 +0100 +++ vdr-1.4.freesat-tva/include/libsi/si.h 2008-10-12 03:59:25.264431644 +0100 @@ -28,7 +28,7 @@ TableIdNIT_other = 0x41, //network information section, other network TableIdSDT = 0x42, //service description section TableIdSDT_other = 0x46, - TableIdBAT = 0x46, //bouquet association section + TableIdBAT = 0x4a, //bouquet association section TableIdEIT_presentFollowing = 0x4E, //event information section TableIdEIT_presentFollowing_other = 0x4F, //range from 0x50 to 0x5F diff -uwNr -x dvbdevice.c -x menu.c -x libsi.a -x 'sysconfig*' -x .dependencies -x .svn -x '*.save' -x '*.o' vdr-1.4.reel/include/vdr/bat.h vdr-1.4.freesat-tva/include/vdr/bat.h --- vdr-1.4.reel/include/vdr/bat.h 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.4.freesat-tva/include/vdr/bat.h 2008-10-12 19:30:25.943733925 +0100 @@ -0,0 +1,29 @@ +/* + * bat.h: BAT section filter + * + * See the main source file 'vdr.c' for copyright information and + * how to reach the author. + * + * $Id: bat.h 1.2 2004/01/05 14:30:14 kls Exp $ + */ + +#ifndef __BAT_H +#define __BAT_H + +#include "filter.h" +#include + +typedef std::map batMap; + +class cBatFilter : public cFilter { +private: + batMap batmap; +protected: + virtual void Process(u_short Pid, u_char Tid, const u_char *Data, int Length); +public: + cBatFilter(); + ~cBatFilter(); + virtual void SetStatus(bool On); + }; + +#endif //__BAT_H diff -uwNr -x dvbdevice.c -x menu.c -x libsi.a -x 'sysconfig*' -x .dependencies -x .svn -x '*.save' -x '*.o' vdr-1.4.reel/include/vdr/channels.h vdr-1.4.freesat-tva/include/vdr/channels.h --- vdr-1.4.reel/include/vdr/channels.h 2008-09-27 17:51:41.052673227 +0100 +++ vdr-1.4.freesat-tva/include/vdr/channels.h 2008-10-06 18:46:44.403088585 +0100 @@ -120,6 +120,7 @@ char *shortName; char *provider; char *portalName; + char *defaultAuthority; int __BeginData__; int frequency; // MHz int source; @@ -169,6 +170,7 @@ const char *ShortName(bool OrName = false) const { return (OrName && isempty(shortName)) ? name : shortName; } const char *Provider(void) const { return provider; } const char *PortalName(void) const { return portalName; } + const char *DefaultAuthority(void) const { return defaultAuthority; } int Frequency(void) const { return frequency; } ///< Returns the actual frequency, as given in 'channels.conf' int Transponder(void) const; ///< Returns the transponder frequency in MHz, plus the polarization in case of sat static int Transponder(int Frequency, char Polarization); ///< builds the transponder from the given Frequency and Polarization @@ -220,6 +222,7 @@ void SetId(int Nid, int Tid, int Sid, int Rid = 0); void SetName(const char *Name, const char *ShortName, const char *Provider); void SetPortalName(const char *PortalName); + void SetDefaultAuthority(const char *DefaultAuthority); void SetPids(int Vpid, int Ppid, int *Apids, char ALangs[][MAXLANGCODE2], int *Dpids, char DLangs[][MAXLANGCODE2], int *Spids, char SLangs[][MAXLANGCODE2], int Tpid); void SetCaIds(const int *CaIds); // list must be zero-terminated void ForceCaIds(const int *CaIds); // list must be zero-terminated // TB: does not check for reserved values diff -uwNr -x dvbdevice.c -x menu.c -x libsi.a -x 'sysconfig*' -x .dependencies -x .svn -x '*.save' -x '*.o' vdr-1.4.reel/include/vdr/device.h vdr-1.4.freesat-tva/include/vdr/device.h --- vdr-1.4.reel/include/vdr/device.h 2008-09-27 17:51:41.052673227 +0100 +++ vdr-1.4.freesat-tva/include/vdr/device.h 2008-10-12 19:31:07.443485932 +0100 @@ -15,6 +15,7 @@ #include "dvbsubtitle.h" #include "eit.h" #include "filter.h" +#include "bat.h" #include "nit.h" #include "pat.h" #include "ringbuffer.h" @@ -316,6 +317,7 @@ cPatFilter *patFilter; cSdtFilter *sdtFilter; cNitFilter *nitFilter; + cBatFilter *batFilter; protected: void StartSectionHandler(void); ///< A derived device that provides section data must call diff -uwNr -x dvbdevice.c -x menu.c -x libsi.a -x 'sysconfig*' -x .dependencies -x .svn -x '*.save' -x '*.o' vdr-1.4.reel/include/vdr/epg.h vdr-1.4.freesat-tva/include/vdr/epg.h --- vdr-1.4.reel/include/vdr/epg.h 2008-09-27 09:50:31.281871864 +0100 +++ vdr-1.4.freesat-tva/include/vdr/epg.h 2008-10-06 18:46:44.403088585 +0100 @@ -66,6 +66,8 @@ int duration; // Duration of this event in seconds time_t vps; // Video Programming Service timestamp (VPS, aka "Programme Identification Label", PIL) time_t seen; // When this event was last seen in the data stream + char *itemCRID; // Item CRID + char *seriesCRID; // Series CRID public: cEvent(tEventID EventID); ~cEvent(); @@ -84,6 +86,8 @@ time_t EndTime(void) const { return startTime + duration; } int Duration(void) const { return duration; } time_t Vps(void) const { return vps; } + const char *ItemCRID(void) const { return itemCRID; } + const char *SeriesCRID(void) const { return seriesCRID; } time_t Seen(void) const { return seen; } bool SeenWithin(int Seconds) const { return time(NULL) - seen < Seconds; } bool HasTimer(void) const; @@ -103,6 +107,8 @@ void SetStartTime(time_t StartTime); void SetDuration(int Duration); void SetVps(time_t Vps); + void SetItemCRID(const char *CRID); + void SetSeriesCRID(const char *CRID); void SetSeen(void); cString ToDescr(void) const; void Dump(FILE *f, const char *Prefix = "", bool InfoOnly = false) const; diff -uwNr -x dvbdevice.c -x menu.c -x libsi.a -x 'sysconfig*' -x .dependencies -x .svn -x '*.save' -x '*.o' vdr-1.4.reel/libsi/descriptor.c vdr-1.4.freesat-tva/libsi/descriptor.c --- vdr-1.4.reel/libsi/descriptor.c 2008-09-27 09:50:29.781782204 +0100 +++ vdr-1.4.freesat-tva/libsi/descriptor.c 2008-10-06 18:46:44.403088585 +0100 @@ -643,6 +643,29 @@ textualServiceIdentifier.setData(data+sizeof(descr_service_identifier), getLength()-sizeof(descr_service_identifier)); } +void ContentIdentifierDescriptor::Parse() { + int offset=0; + data.setPointerAndOffset(s, offset); + if (s->crid_location == 0) { + entry.setData(data+(offset-1), s->crid_length); + } + else { + entry.setData(data+(offset-1), 2); + } +} + +int ContentIdentifierDescriptor::getCridType() const { + return s->crid_type; +} + +int ContentIdentifierDescriptor::getCridLocation() const { + return s->crid_location; +} + +void DefaultAuthorityDescriptor::Parse() { + DefaultAuthority.setData(data+sizeof(descr_default_authority), getLength()-sizeof(descr_default_authority)); +} + void MultilingualNameDescriptor::Parse() { nameLoop.setData(data+sizeof(descr_multilingual_network_name), getLength()-sizeof(descr_multilingual_network_name)); } diff -uwNr -x dvbdevice.c -x menu.c -x libsi.a -x 'sysconfig*' -x .dependencies -x .svn -x '*.save' -x '*.o' vdr-1.4.reel/libsi/descriptor.h vdr-1.4.freesat-tva/libsi/descriptor.h --- vdr-1.4.reel/libsi/descriptor.h 2008-09-27 09:50:29.781782204 +0100 +++ vdr-1.4.freesat-tva/libsi/descriptor.h 2008-10-06 18:46:44.403088585 +0100 @@ -361,6 +361,25 @@ virtual void Parse(); }; +class ContentIdentifierDescriptor : public Descriptor { +public: + String entry; + int getCridType() const; + int getCridLocation() const; +// virtual int getLength() { return sizeof(descr_content_identifier)+entry.getLength(); } + private: + const descr_content_identifier *s; +protected: + virtual void Parse(); +}; + +class DefaultAuthorityDescriptor : public Descriptor { +public: + String DefaultAuthority; //ID +protected: + virtual void Parse(); +}; + //abstract base class class MultilingualNameDescriptor : public Descriptor { public: diff -uwNr -x dvbdevice.c -x menu.c -x libsi.a -x 'sysconfig*' -x .dependencies -x .svn -x '*.save' -x '*.o' vdr-1.4.reel/libsi/freesat.c vdr-1.4.freesat-tva/libsi/freesat.c --- vdr-1.4.reel/libsi/freesat.c 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.4.freesat-tva/libsi/freesat.c 2008-10-06 18:46:27.403674056 +0100 @@ -0,0 +1,360 @@ +/* FreeSat Huffman decoder for VDR + * + * Insert GPL licence + */ + +/* The following features can be controlled: + * + * FREESAT_DATA_DIRECTORY - Directory where the freesat.tX files are stored + * FREESAT_ARCHIVE_MESSAGES - Store raw huffman strings in /var/tmp/ + * FREESAT_PRINT_MISSED_DECODING - Append missed hexcodes to end of string + * FREESAT_NO_SYSLOG - Disable use of isyslog + */ + +#include "freesat.h" +#include +#include +#include +#include +#include +#include + + +#define RELOAD_TIME 600 /* Minimum time between checking for updated tables */ +#ifndef FREESAT_DATA_DIRECTORY +#define FREESAT_DATA_DIRECTORY "/video/" +#endif +#define TABLE1_FILENAME FREESAT_DATA_DIRECTORY "freesat.t1" +#define TABLE2_FILENAME FREESAT_DATA_DIRECTORY "freesat.t2" + +#ifndef FREESAT_NO_SYSLOG +#include "../tools.h" +/* Logging via vdr */ +#ifndef isyslog +#define isyslog(a...) void( (SysLogLevel > 1) ? syslog_with_tid(LOG_INFO, a) : void() ) +#endif +void syslog_with_tid(int priority, const char *format, ...) __attribute__ ((format (printf, 2, 3))); +#else +#define isyslog(a...) +#endif + + + +struct hufftab { + unsigned int value; + short bits; + char next; +}; + +#define START '\0' +#define STOP '\0' +#define ESCAPE '\1' + + +int freesat_decode_error = 0; /* If set an error has occurred during decoding */ + +static struct hufftab *tables[2][256]; +static int table_size[2][256]; +static time_t load_time = 0; + +static void load_file(int tableid, char *filename); + + +static void freesat_table_load() +{ + struct stat sb; + time_t now = time(NULL); + int i; + + /* Only reload if we've never loaded, or it's more than 10 minutes away */ + if ( load_time != 0 ) { + int reload = 1; + if ( now - load_time < RELOAD_TIME ) { + return; + } + if ( stat(TABLE1_FILENAME,&sb) == 0 ) { + if ( sb.st_mtime < load_time ) { + if ( stat(TABLE2_FILENAME,&sb) == 0 ) { + if ( sb.st_mtime < load_time ) { + reload = 0; + } + } + } + } + if ( reload == 0 ) { + return; + } + } + + /* Reset the load time */ + load_time = now; + + + /* Reset all the tables */ + for ( i = 0 ; i < 256; i++ ) { + if ( tables[0][i] != NULL ) { + free(tables[0][i]); + } + if ( tables[1][i] ) { + free(tables[1][i]); + } + tables[0][i] = NULL; + tables[1][i] = NULL; + table_size[0][i] = 0; + table_size[1][i] = 0; + } + + /* And load the files up */ + load_file(1, TABLE1_FILENAME); + load_file(2, TABLE2_FILENAME); +} + + +/** \brief Convert a textual character description into a value + * + * \param str - Encoded (in someway) string + * + * \return Raw character + */ +static unsigned char resolve_char(char *str) +{ + int val; + if ( strcmp(str,"ESCAPE") == 0 ) { + return ESCAPE; + } else if ( strcmp(str,"STOP") == 0 ) { + return STOP; + } else if ( strcmp(str,"START") == 0 ) { + return START; + } else if ( sscanf(str,"0x%02x", &val) == 1 ) { + return val; + } + return str[0]; + + +} + + +/** \brief Decode a binary string into a value + * + * \param binary - Binary string to decode + * + * \return Decoded value + */ +static unsigned long decode_binary(char *binary) +{ + unsigned long mask = 0x80000000; + unsigned long maskval = 0; + unsigned long val = 0; + size_t i; + + for ( i = 0; i < strlen(binary); i++ ) { + if ( binary[i] == '1' ) { + val |= mask; + } + maskval |= mask; + mask >>= 1; + } + return val; +} + +/** \brief Load an individual freesat data file + * + * \param tableid - Table id that should be loaded + * \param filename - Filename to load + */ +static void load_file(int tableid, char *filename) +{ + char buf[1024]; + char *from, *to, *binary; + FILE *fp; + + tableid--; + + if ( ( fp = fopen(filename,"r") ) != NULL ) { + isyslog("Loading table %d Filename <%s>",tableid + 1, filename); + + while ( fgets(buf,sizeof(buf),fp) != NULL ) { + from = binary = to = NULL; + int elems = sscanf(buf,"%a[^:]:%a[^:]:%a[^:]:", &from, &binary, &to); + if ( elems == 3 ) { + int bin_len = strlen(binary); + int from_char = resolve_char(from); + char to_char = resolve_char(to); + unsigned long bin = decode_binary(binary); + int i = table_size[tableid][from_char]++; + + tables[tableid][from_char] = (struct hufftab *)realloc(tables[tableid][from_char], (i+1) * sizeof(tables[tableid][from_char][0])); + tables[tableid][from_char][i].value = bin; + tables[tableid][from_char][i].next = to_char; + tables[tableid][from_char][i].bits = bin_len; + free(from); + free(to); + free(binary); + } + } + } else { + isyslog("Cannot load <%s> for table %d",filename,tableid + 1); + } +} + +#ifdef FREESAT_ARCHIVE_MESSAGES +static void write_message(const unsigned char *src, size_t size) +{ + static FILE *fp = NULL; + static int written = 0; + static int suffix = 0; + char buf[32768]; + + if ( written > 10000 ) { + fclose(fp); + fp = NULL; + written = 0; + } + if ( fp == NULL ) { + snprintf(buf,sizeof(buf),"mkdir -p /var/tmp/%d",getpid()); + system(buf); + + snprintf(buf,sizeof(buf),"/var/tmp/%d/freesat.%d",getpid(),suffix); + fp = fopen(buf, "w"); + suffix = (suffix + 1)%1000; + } + size_t offs = 0; + size_t i; + for ( i = 0; i < size; i++ ) { + offs += snprintf(buf + offs, sizeof(buf) - offs, "%02x", src[i]); + } + fprintf(fp, "%s\n",buf); + fflush(fp); + written++; +} +#endif + +/** \brief Decode an EPG string as necessary + * + * \param src - Possibly encoded string + * \param size - Size of the buffer + * + * \retval NULL - Can't decode + * \return A decoded string + */ +char *freesat_huffman_decode( const unsigned char *src, size_t size) +{ + int tableid; + + freesat_decode_error = 0; + +#ifdef FREESAT_ARCHIVE_MESSAGES + write_message(src, size); +#endif + if (src[0] == 0x1f && (src[1] == 1 || src[1] == 2)) { + int uncompressed_len = 30; + char * uncompressed = (char *)calloc(1,uncompressed_len + 1); + unsigned value = 0, byte = 2, bit = 0; + int p = 0; + int lastch = START; + + tableid = src[1] - 1; + while (byte < 6 && byte < size) { + value |= src[byte] << ((5-byte) * 8); + byte++; + } + + freesat_table_load(); /**< Load the tables as necessary */ + + do { + int found = 0; + unsigned bitShift = 0; + if (lastch == ESCAPE) { + char nextCh = (value >> 24) & 0xff; + found = 1; + // Encoded in the next 8 bits. + // Terminated by the first ASCII character. + bitShift = 8; + if ((nextCh & 0x80) == 0) + lastch = nextCh; + if (p >= uncompressed_len) { + uncompressed_len += 10; + uncompressed = (char *)realloc(uncompressed, uncompressed_len + 1); + } + uncompressed[p++] = nextCh; + uncompressed[p] = 0; + } else { + int j; + for ( j = 0; j < table_size[tableid][lastch]; j++) { + unsigned mask = 0, maskbit = 0x80000000; + short kk; + for ( kk = 0; kk < tables[tableid][lastch][j].bits; kk++) { + mask |= maskbit; + maskbit >>= 1; + } + if ((value & mask) == tables[tableid][lastch][j].value) { + char nextCh = tables[tableid][lastch][j].next; + bitShift = tables[tableid][lastch][j].bits; + if (nextCh != STOP && nextCh != ESCAPE) { + if (p >= uncompressed_len) { + uncompressed_len += 10; + uncompressed = (char *)realloc(uncompressed, uncompressed_len + 1); + } + uncompressed[p++] = nextCh; + uncompressed[p] = 0; + } + found = 1; + lastch = nextCh; + break; + } + } + } + if (found) { + // Shift up by the number of bits. + unsigned b; + for ( b = 0; b < bitShift; b++) + { + value = (value << 1) & 0xfffffffe; + if (byte < size) + value |= (src[byte] >> (7-bit)) & 1; + if (bit == 7) + { + bit = 0; + byte++; + } + else bit++; + } + } else { +#ifdef FREESAT_PRINT_MISSED_DECODING + char temp[1020]; + size_t tlen = 0; + + tlen = snprintf(temp,sizeof(temp),"...[%02x][%02x][%02x][%02x]",(value >> 24 ) & 0xff, (value >> 16 ) & 0xff, (value >> 8) & 0xff, value &0xff); + do { + // Shift up by the number of bits. + unsigned b; + for ( b = 0; b < 8; b++) { + value = (value << 1) & 0xfffffffe; + if (byte < size) + value |= (src[byte] >> (7-bit)) & 1; + if (bit == 7) { + bit = 0; + byte++; + } + else bit++; + } + tlen += snprintf(temp+tlen, sizeof(temp) - tlen,"[%02x]", value & 0xff); + } while ( tlen < sizeof(temp) - 6 && byte < size); + + uncompressed_len += tlen; + uncompressed = (char *)realloc(uncompressed, uncompressed_len + 1); + freesat_decode_error = 1; + strcpy(uncompressed + p, temp); +#endif + isyslog("Missing table %d entry: <%s>",tableid + 1, uncompressed); + // Entry missing in table. + return uncompressed; + } + } while (lastch != STOP && value != 0); + + return uncompressed; + } + return NULL; +} + + diff -uwNr -x dvbdevice.c -x menu.c -x libsi.a -x 'sysconfig*' -x .dependencies -x .svn -x '*.save' -x '*.o' vdr-1.4.reel/libsi/freesat.h vdr-1.4.freesat-tva/libsi/freesat.h --- vdr-1.4.reel/libsi/freesat.h 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.4.freesat-tva/libsi/freesat.h 2008-10-06 18:46:27.403674056 +0100 @@ -0,0 +1,12 @@ + + +#ifndef FREESAT_H +#define FREESAT_H + +#include + +extern char *freesat_huffman_decode(const unsigned char *compressed, size_t size); + +#endif + + diff -uwNr -x dvbdevice.c -x menu.c -x libsi.a -x 'sysconfig*' -x .dependencies -x .svn -x '*.save' -x '*.o' vdr-1.4.reel/libsi/headers.h vdr-1.4.freesat-tva/libsi/headers.h --- vdr-1.4.reel/libsi/headers.h 2008-09-27 09:50:29.781782204 +0100 +++ vdr-1.4.freesat-tva/libsi/headers.h 2008-10-06 18:46:44.403088585 +0100 @@ -1673,11 +1673,39 @@ u_char descriptor_length :8; }; +struct entry_tva_id { + u_char tva_id_hi :8; + u_char tva_id_lo :8; +#if BYTE_ORDER == BIG_ENDIAN + u_char reserved :5; + u_char running_status :3; +#else + u_char running_status :3; + u_char reserved :5; +#endif +}; + + /* 0x76 content_identifier_descriptor (ETSI TS 102 323) */ struct descr_content_identifier { u_char descriptor_tag :8; u_char descriptor_length :8; +#if BYTE_ORDER == BIG_ENDIAN + u_char crid_type :6; + u_char crid_location :2; +#else + u_char crid_location :2; + u_char crid_type :6; +#endif + union { + u_char crid_length :8; + u_char crid_ref_hi :8; + }; + union { + u_char crid_byte :8; + u_char crid_ref_lo :8; + }; }; /* 0x77 time_slice_fec_identifier_descriptor (ETSI EN 301 192) */ diff -uwNr -x dvbdevice.c -x menu.c -x libsi.a -x 'sysconfig*' -x .dependencies -x .svn -x '*.save' -x '*.o' vdr-1.4.reel/libsi/Makefile vdr-1.4.freesat-tva/libsi/Makefile --- vdr-1.4.reel/libsi/Makefile 2008-09-27 09:50:29.781782204 +0100 +++ vdr-1.4.freesat-tva/libsi/Makefile 2008-10-06 18:57:22.381462928 +0100 @@ -17,13 +17,14 @@ INCLUDES += -DEFINES += +DEFINES += -DFREESAT_DATA_DIRECTORY=\"/etc/vdr/\" +DEFINES += -DFREESAT_PRINT_MISSED_DECODING -DFREESAT_ARCHIVE_MESSAGES LIBS += ### The object files (add further files here): -OBJS = util.o si.o section.o descriptor.o +OBJS = util.o si.o section.o descriptor.o freesat.o ### Implicit rules: diff -uwNr -x dvbdevice.c -x menu.c -x libsi.a -x 'sysconfig*' -x .dependencies -x .svn -x '*.save' -x '*.o' vdr-1.4.reel/libsi/si.c vdr-1.4.freesat-tva/libsi/si.c --- vdr-1.4.reel/libsi/si.c 2008-09-27 09:50:29.781782204 +0100 +++ vdr-1.4.freesat-tva/libsi/si.c 2008-10-12 20:16:38.427825418 +0100 @@ -15,7 +15,9 @@ #include #include #include +#include #include "descriptor.h" +#include "freesat.h" namespace SI { @@ -395,6 +397,8 @@ return false; } +#include + // originally from libdtv, Copyright Rolf Hakenes void String::decodeText(char *buffer, int size) { const unsigned char *from=data.getData(0); @@ -405,6 +409,21 @@ return; } bool singleByte; + + + if ( from[0] == 0x1f ) { + char *temp = freesat_huffman_decode(from, len); + if (temp ) { + len = strlen(temp); + len = len < size - 1 ? len : size - 1; + strncpy(buffer, temp, len); + buffer[len] = 0; + free(temp); + return; + } + } + + const char *cs = getCharacterTable(from, len, &singleByte); // FIXME Need to make this UTF-8 aware (different control codes). // However, there's yet to be found a broadcaster that actually @@ -434,6 +453,7 @@ void String::decodeText(char *buffer, char *shortVersion, int sizeBuffer, int sizeShortVersion) { const unsigned char *from=data.getData(0); + unsigned char *temp = NULL; char *to=buffer; char *toShort=shortVersion; int IsShortName=0; @@ -443,6 +463,14 @@ *toShort = '\0'; return; } + + + if ( from[0] == 0x1f ) { + temp = ( unsigned char *)freesat_huffman_decode(from, len); + from = temp; + } + + bool singleByte; const char *cs = getCharacterTable(from, len, &singleByte); // FIXME Need to make this UTF-8 aware (different control codes). @@ -480,6 +508,7 @@ if (convertCharacterTable(shortVersion, strlen(shortVersion), convShortVersion, sizeof(convShortVersion), cs)) strncpy(shortVersion, convShortVersion, strlen(convShortVersion) + 1); } + if (temp) free(temp); } Descriptor *Descriptor::getDescriptor(CharArray da, DescriptorTagDomain domain, bool returnUnimplemetedDescriptor) { @@ -599,6 +628,12 @@ case ExtensionDescriptorTag: d=new ExtensionDescriptor(); break; + case ContentIdentifierDescriptorTag: + d=new ContentIdentifierDescriptor(); + break; + case DefaultAuthorityDescriptorTag: + d=new DefaultAuthorityDescriptor(); + break; //note that it is no problem to implement one //of the unimplemented descriptors. @@ -641,10 +676,8 @@ case TransportStreamDescriptorTag: //defined in ETSI EN 300 468 v 1.7.1 - case DefaultAuthorityDescriptorTag: case RelatedContentDescriptorTag: case TVAIdDescriptorTag: - case ContentIdentifierDescriptorTag: case TimeSliceFecIdentifierDescriptorTag: case ECMRepetitionRateDescriptorTag: case EnhancedAC3DescriptorTag: diff -uwNr -x dvbdevice.c -x menu.c -x libsi.a -x 'sysconfig*' -x .dependencies -x .svn -x '*.save' -x '*.o' vdr-1.4.reel/libsi/si.h vdr-1.4.freesat-tva/libsi/si.h --- vdr-1.4.reel/libsi/si.h 2008-09-27 09:50:29.781782204 +0100 +++ vdr-1.4.freesat-tva/libsi/si.h 2008-10-12 03:59:25.264431644 +0100 @@ -28,7 +28,7 @@ TableIdNIT_other = 0x41, //network information section, other network TableIdSDT = 0x42, //service description section TableIdSDT_other = 0x46, - TableIdBAT = 0x46, //bouquet association section + TableIdBAT = 0x4a, //bouquet association section TableIdEIT_presentFollowing = 0x4E, //event information section TableIdEIT_presentFollowing_other = 0x4F, //range from 0x50 to 0x5F diff -uwNr -x dvbdevice.c -x menu.c -x libsi.a -x 'sysconfig*' -x .dependencies -x .svn -x '*.save' -x '*.o' vdr-1.4.reel/Makefile vdr-1.4.freesat-tva/Makefile --- vdr-1.4.reel/Makefile 2008-09-27 17:51:41.052673227 +0100 +++ vdr-1.4.freesat-tva/Makefile 2008-10-12 18:21:52.467746393 +0100 @@ -56,7 +56,8 @@ receiver.o recorder.o recording.o reelcamlink.o reelboxbase.o remote.o remux.o \ ringbuffer.o sdt.o sections.o skinclassic.o skins.o skinsttng.o sources.o spu.o status.o \ svdrp.o themes.o thread.o \ - timers.o tools.o transfer.o vdr.o videodir.o submenu.o help.o sysconfig_vdr.o dvdIndex.o + timers.o tools.o transfer.o vdr.o videodir.o submenu.o help.o sysconfig_vdr.o dvdIndex.o \ + bat.o # SUBMENU + TinyXML +HELP diff -uwNr -x dvbdevice.c -x menu.c -x libsi.a -x 'sysconfig*' -x .dependencies -x .svn -x '*.save' -x '*.o' vdr-1.4.reel/README.freesat vdr-1.4.freesat-tva/README.freesat --- vdr-1.4.reel/README.freesat 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.4.freesat-tva/README.freesat 2008-10-06 18:46:26.903691289 +0100 @@ -0,0 +1,33 @@ +Freesat EPG patch for vdr + +Installation: + +1. Apply the patch +2. make clean && make vdr +3. Install vdr +4. Copy freesat.t1 and freesat.t2 to /etc/vdr + +Restart VDR - enjoy a 7 day EPG with Freesat. + +Updates: + +VDR will reload the freesat.t1 and freesat.t2 every 10 minutes should the contents +of them be changed. + +Advance configuration: + +1. Edit libsi/Makefile and add the following to DEFINES: + + FREESAT_DATA_DIRECTORY - Directory where the freesat.tX files are stored + FREESAT_ARCHIVE_MESSAGES - Store raw huffman strings in /var/tmp/pid/freesat.X + FREESAT_PRINT_MISSED_DECODING - Append missed hexcodes to end of string + FREESAT_NO_SYSLOG - Disable use of isyslog + +Credits: + +Original code from MythTV +Huffman codes updated with data from mitsubushi, Jochen Mann and dom + +Enjoy, + +dom /at/ suborbital.org.uk diff -uwNr -x dvbdevice.c -x menu.c -x libsi.a -x 'sysconfig*' -x .dependencies -x .svn -x '*.save' -x '*.o' vdr-1.4.reel/sdt.c vdr-1.4.freesat-tva/sdt.c --- vdr-1.4.reel/sdt.c 2008-09-27 09:50:30.781842057 +0100 +++ vdr-1.4.freesat-tva/sdt.c 2008-10-12 20:15:06.428361226 +0100 @@ -126,6 +126,14 @@ } } break; + case SI::DefaultAuthorityDescriptorTag: { + SI::DefaultAuthorityDescriptor *da = (SI::DefaultAuthorityDescriptor *)d; + char DaBuf[1024]; + da->DefaultAuthority.getText(DaBuf, sizeof(DaBuf)); + if ( channel ) { + channel->SetDefaultAuthority(DaBuf); + } + } default: ; } delete d; Binary files vdr-1.4.reel/tinyxml/libtinyxml.a and vdr-1.4.freesat-tva/tinyxml/libtinyxml.a differ Binary files vdr-1.4.reel/vdr and vdr-1.4.freesat-tva/vdr differ diff -uwNr -x dvbdevice.c -x menu.c -x libsi.a -x 'sysconfig*' -x .dependencies -x .svn -x '*.save' -x '*.o' vdr-1.4.reel/vdr.5 vdr-1.4.freesat-tva/vdr.5 --- vdr-1.4.reel/vdr.5 2008-09-27 09:50:30.781842057 +0100 +++ vdr-1.4.freesat-tva/vdr.5 2008-10-06 18:46:44.403088585 +0100 @@ -177,6 +177,9 @@ .B RID The Radio ID of this channel (typically 0, may be used to distinguish channels where NID, TID and SID are all equal). +.TP +.B Default Authority +The Default Authority for CRIDs on this channel (TVAnytime). .PP A particular channel can be uniquely identified by its \fBchannel\ ID\fR, which is a string that looks like this: @@ -612,6 +615,8 @@ \fBD\fR@ \fBX\fR@ \fBV\fR@ +\fBI\fR@ +\fBR\fR@ \fBe\fR@ \fBc\fR@ .TE @@ -645,6 +650,8 @@ @is the three letter language code (optionally two codes, separated by '+') @is the description of this stream component @is the Video Programming Service time of this event + @is the CRID of this event (TVAnytime) + @is the CRID of the series which this event is part of (TVAnytime) .TE This file will be read at program startup in order to restore the results of