ERPM?AppleApple_partition_map?PM@disk imageApple_HFS@3goonPMApple_FreeH+10.0awv$&ES\U   xxLGPL.txtg@k README.rtf.׆׆C0HFS+ Private Data@PWWHFS+ Private Data.Trashes 502A@502 .DS_Store%@EyeTV-DVD-Offload.scptLGPL.txt README.rtf .DS_Store Desktop DB Desktop DF$EyeTV DVD Offloader.app% .DS_Store h & $"(zT0 2(EyeTV-DVD-Offload AEyeTV-DVD-Offload .DS_Store>@s.TrashesB@ Desktop DBBTFLDMGR@ Desktop DF&&DTFLDMGR@4EyeTV DVD Offloader.app$׾׾׾APPLaplt5%2EyeTV-DVD-Offload.scptJקosasToySB d nZF(EyeTV-DVD-OffloadLGPL.txtX<FasdUAS 1.101.10 k l B< Back up recordings from an EyeTV archive to DVD, preserving l  60 the data exactly as it was recorded originally.  l   l KE The size of a DVD, in bytes. We leave some slack for disk management l MG (PC and Mac disc structures, EyeTV management data, directories, etc.) l 5/ Estimated from an empty DVD-sized disk image.  l  r  ] ] ] m!!@\(\ m m m o 0 dvd_capacity DVD_CAPACITY"# "l#$% $l& &E? Main program. Scan through the EyeYTV Archive and pull out all%'( 'l) )?9 of the recordings, saving the funny name EyeTV saves the(*+ *l, ,4. program under and the name the user assigned.+-. -l./0 /l1 1B< Parcel out these files a DVD-ful at a time, copying them to023 2l4 4B< the DVD. (You must burn the DVDs when directed to proceed.)356 5l7 793 Make symlinks (or aliases) to the files on the DVD689 8l: : in a new directory.9;< ;l<=> =l? ?<6 After the files have been burnt to DVD and symlinked,>@A @lB B& stop EyeTV and then restart it.ACD ClDEF ElG G+% extract the program data from EyeTV.FHI HlJ JQK The "unique id" is a floating-point number generated by EyeTV to uniquely IKL KlM MNH name each recording. We'll use Perl to convert this to its hexadecimal LNO NlP PYS representation (which is how EyeTV uses it to name the recordings in the archive).OQR QlS Sf` We'll use this to build a list of lists that maps the hex unique id to the program information.RTU Tl V VO WX WkYYZ[ Zq\\] 0 theprograms thePrograms]^ 0 programssize programsSize^_ 0 thenameslist theNamesList_` "0thedisplaynamestheDisplayNames`a 0 therepository theRepositoryab 0 searchkey searchKeyb 0 theitemindex theItemIndex[cd cref e2  cPrg fo 0 theprograms theProgramsdgh grij im jo 0 programssize programsSizehkl krmn mJ no 0 thenameslist theNamesListlop or!qr qJ ro "0thedisplaynamestheDisplayNamespst sr"&uv uJ"$ vo 0 theprogramdb theProgramDBtwx wr'.yz yc',{| {1'*  Rurl |m*+  TEXT zo 0 therepository theRepositoryx}~ }X/ k? r?D n?B 1@B  Titl o?@ 0 theprogram theProgram o 0thetitletheTitle rEJ nEH 1FH  Epis oEF 0 theprogram theProgram o 0 theepisode theEpisode rKR nKN 1LN  Unqu oKL 0 theprogram theProgram o 0 theuniqueid theUniqueID rSf lSb ISb .sysoexecTEXTTEXT bS^ bSZ mSV perl -e 'printf "%016x", oVY 0 theuniqueid theUniqueID mZ] ' o 0 thedirname theDirName rgp bgl ogh 0 therepository theRepository ohk 0 thedirname theDirName o 0thepaththePath rq| lqx nqx 1tx  psxp oqt 0thepaththePath o 0 theposixpath thePOSIXPath r} o}~ 0thetitletheTitle o 0thedisplaynametheDisplayName Z > o 0 theepisode theEpisode m  r b b b o 0thetitletheTitle m  ( o 0 theepisode theEpisode m ) o 0thedisplaynametheDisplayName l 82 first item is the key, rest are associated values r J o 0 thedirname theDirName o 0thetitletheTitle o 0 theepisode theEpisode o 0 theuniqueid theUniqueID o 0thepaththePath o 0 theposixpath thePOSIXPath o 0thedisplaynametheDisplayName l n ; o 0 theprogramdb theProgramDB 0 theprogram theProgram o23 0 theprograms thePrograms~ I .aevtquitnullobj  Xm null߀ EyeTV.appր聿ȿְ )( 7EyTValis8flatbox H+ EyeTV.app5J Applications{B|flatbox:Applications:EyeTV.app EyeTV.appflatboxApplications/EyeTV.app/U l l _Y Now we need to look at the actual contents of the archive on disk and pick out only the  l UO programs that are associated with directories, as we might have exported some  l  in a previous run.  l O r l n 2  cfol 4  cfol o 0 therepository theRepository o 0realeyetvitemsrealEyeTVItems mnull߀ j Finder.appր聿ȿְ )( 7MACSalisbflatbox H+ j Finder.app25W CoreServices{B5 j b a.flatbox:System:Library:CoreServices:Finder.app Finder.appflatbox&System/Library/CoreServices/Finder.app/ l O I .miscactvnullnull f l l ?9 strip out the hex directory names from the folder names. l; Y; k6 q 0olddelimoldDelim r 1  txdl  o 0olddelimoldDelim   r   m :  1~ ~ txdl  r n 2} } citm l| c n 4 { { cobj o  z z0i o y y 0realeyetvitemsrealEyeTVItems mx x TEXT| ow w0 itemparts itemParts r. n' 4'v! v cobj !l&"u "\&#$ #l$%t %n$&' &1 $s s leng 'o r r0 itemparts itemPartst $m$%qqu  op p0 itemparts itemParts n() (4*-o* o cobj *o+,n n0i )o'*m m 0realeyetvitemsrealEyeTVItems+l +r/6,- ,o/0k k0olddelimoldDelim -105j j txdll 0i mii n./ .1h h leng /og g 0realeyetvitemsrealEyeTVItems01 0lfefe123 2ld4d 4PJ extract the items in the DB that correspond to the folders we just found.356 5lc7c 7% these are eligible for export.689 8l<B:b :r<B;< ;J<>aa <o` `0 cleaneddb cleanedDBb9=> =lC?_ ?YC@^AB] @kTCCDE DrT\FG FnTZHI H4WZ\J \ cobj JoXY[ [0i IoTWZ Z 0realeyetvitemsrealEyeTVItems GoY Y0 searchkey searchKeyEKX KX]LWM LkmNNOP OrmuQR QnmqST S4nqVU V cobj UmopUU TomnT T0dbitemdbItem RoS S0dbkeydbKeyPVR VZvWXQP W=v{YZ YovyO O0dbkeydbKey ZoyzN N0 searchkey searchKey Xk~[[\] \r~^_ ^o~M M0dbitemdbItem _n`a `; aoL L0 cleaneddb cleanedDB]bK bSKQPR W0dbitemdbItem Mo`aJ J0 theprogramdb theProgramDBX ^0i AmFGII BnGOcd c1JNH H leng doGJG G 0realeyetvitemsrealEyeTVItems]_>ef elFEFEfgh glDiD iLF we could sort the items by display name here; left out to shorten thehjk jlClC l script for claritykmn mlBABAnop ol@q@ q3- build a DVD-ful of programs, sorted by name.prs rlt? tquu>= >0 indexlist indexList=?svw vlx< xryz yJ;; zo: :0 indexlist indexList<w{| {l}9 }Y~87 ~k l66 :4 extract what we named the program (item 1) and what l55 71 EyeTV named it (item 2) for the current program. r n 44 4 cobj m33 n 42 2 cobj o1 10i o0 00 cleaneddb cleanedDB o/ /0 thedirname theDirName r l. n 4- - cobj m,, n 4+ + cobj o* *0i o) )0 cleaneddb cleanedDB. o( (0 thenicename theNiceName r n 4' ' cobj m&& n 4% % cobj o$ $0i o# #0 cleaneddb cleanedDB o" "0thepaththePath l! !  l QK find all the files in the EyeTV archive directory for the current program. l UO this includes any clips made from this program, plus any EyeTV internal files. OG OF kE Q r l n 1  pnam 2  file o 0filelistfileList R .ascrerr ******** l :4 run through all the files and total up their sizes. r m o  0filesindirsizefilesInDirSize XE k@ r4 n0 1,0  ptsz l, I, .sysonfo4asfe**** 4(   file l' b' b% o! 0thepaththePath m!$ : o%& 0thefiletheFile   o 0 thefilesize theFileSize r5@ [5< o58  0filesindirsizefilesInDirSize o8; 0 thefilesize theFileSize o  0filesindirsizefilesInDirSize 0thefiletheFile o  0filelistfileList 4  cfol o 0thepaththePath m OHR ILQ .miscactvnullnull fHI lSS D> if all this fits on the current DVD, add it to the name list. lSS E? otherwise, copy all these to the current DVD and burn it, then lSS  reset the list. ZS @SZ lSX [SX oST 0 programssize programsSize oTW 0filesindirsizefilesInDirSize oXY 0 dvd_capacity DVD_CAPACITY k] I]k 0 exportdvd exportDVD o^_ 0 indexlist indexList o_` 0 thenameslist theNamesList o`a "0thedisplaynamestheDisplayNames oab 0 programssize programsSize obe 0 cleaneddb cleanedDB rls Jlq olo 0thepaththePath o 0 thenameslist theNamesList rt{   Jty    otw 0 thenicename theNiceName  o "0thedisplaynamestheDisplayNames  r| o| 0filesindirsizefilesInDirSize o 0 programssize programsSize r J o 0i o 0 indexlist indexList k r o 0thepaththePath n ; o 0 thenameslist theNamesList r !  o 0 thenicename theNiceName !n"# "; #o "0thedisplaynamestheDisplayNames$% $r&' &o 0i 'n() (; )o 0 indexlist indexList%* *r+, +[-. -o 0 programssize programsSize .o 0filesindirsizefilesInDirSize ,o 0 programssize programsSize 80i m l/ /n01 01  leng 1o 0 cleaneddb cleanedDB79|23 2l4 4 handle any leftovers356 5l7 7Z89 8>:; :o 0 programssize programsSize ;m 9I< 0 exportdvd exportDVD<=> =o 0 indexlist indexList>?@ ?o 0 thenameslist theNamesList@AB Ao "0thedisplaynamestheDisplayNamesBCD Co 0 programssize programsSizeDE Eo 0 cleaneddb cleanedDB6FG FlGHI HlJ J Handlers --IKL KlLMN MlO O2, Actually burn the programs supplied to DVD.NPQ PiRS RIT 0 exportdvd exportDVDTUV Uo "0selectedindexesselectedIndexesVWX Wo 0programstoburnprogramsToBurnXYZ Yo 0 programnames programNamesZ[\ [o 0 sizeoffiles sizeOfFiles\] ]o 0 cleaneddb cleanedDB SkR^^_` _la aUO hack: shows the list of programs with OK and Cancel. We ignore any selections.`bc bld da[ if "cancel" is selected, we see if we should give up completely or just skip this diskful.cef eQgh gI ij .gtqpchltTEXT@@TEXT io 0 programnames programNamesjkl  prmp kmm m#Burn these recordings to DVD?ln  empL nm  boovtrue hR .ascrerr ********fop oZOqrs q=tu t1  rslt um  boovfals rk$vvwx wI!y .sysodlogaskrTEXT ymz z82"OK" to skip this set, "Cancel" to quit altogetherx{ {L"$| |m"#  boovfals sk'O}}~ ~l'' <6 go ahead and copy the ones that will fit on this disk r'. I', 0 pickthedisk pickTheDisk o 0thedisktheDisk I/8 0 copytodisk copyToDisk o01 0thedisktheDisk o12 0programstoburnprogramsToBurn o23 "0selectedindexesselectedIndexes o34 0 cleaneddb cleanedDB l99 C= at this point the programs are located on the disk as far as l99 E? EyeTV is concerned. We have to burn it to completely make sure l99  everything is OK t9E I=D .sysodlogaskrTEXT m=> "Burn the DVD, then click OK. 0ok m?@  boovtrue l9< ]9< m9: 1:;  min  IFO .sysodlogaskrTEXT mFI [UPut in a new DVD and label it. Click OK when you're ready to archive more recordings. 0ok mJK  boovtruep LPR mPQ  boovtrueQ l l >8 find the online disks so the backup disk can be chosen. l 0* It's up to you to actually pick your DVD! i I 0 pickthedisk pickTheDisk kF O  r  n  1   pnam 2~ ~ cdis o} }0disklistdiskList m O  I|{z |.miscactvnullnull{z f  Iy y.gtqpchltTEXT@@TEXT ox x0disklistdiskListwv w prmp m "Choose the disk for backups:v l utut Z Cs = # 1 !r r rslt m!"q q boovfals k&: I&/p p.sysodlogaskrTEXT m&' Cancelling backup runon o btns J(+m m() OKmnl O0: I49kji k.aevtquitnullobj ji f01ls r=C n=A 4>Ah h cobj m?@gg 1=>f f rslt oe e0thedisktheDisk lDDdcdcb LDF oDEa a0thedisktheDiskb l`_`_ l^^ B< copyToDisk copies the entirety of the listed directories to l]]  the supplied volume. i  I\[ \0 copytodisk copyToDisk oZ Z0thedisktheDisk oY Y0 thefolders theFolders oX X0 theindexes theIndexesW oV V0 cleaneddb cleanedDBW[ ko O k I UTS U.miscactvnullnullTSR I QP Q.aevtodocnullalis 4 O O cdis o N N0thedisktheDiskPR m lMLML   YU K  J  k!P r!' n!% 4"%I I cobj o#$H H0i o!"G G0 thefolders theFolders oF F0 thefolder theFolder r(0 4(.E E alis l*-D b*- o*+C C0 thefolder theFolder m+, :D oB B0 sourcefolder sourceFolder r19!" !417A# A alis #l36$@ $b36%& %o34? ?0thedisktheDisk &m45' ':@ "o> >0 targetfolder targetFolder () (l::=<=<)*; *O:P+, +t>O-. -IBN:/0 :.coreclon******** /4BF91 9 cfol 1oDE8 80 sourcefolder sourceFolder0723 7 insh 2oGH6 60 targetfolder targetFolder3544 5 alrp 4mIJ3 3 savoyes 4 .l>A52 5]>A67 6m>?11 71?@0 0 min 2 ,m:;; K0i  m//  n89 81. . leng 9o- -0 thefolders theFoldersJ :; :lVV,<, < find folders on DVD;=> =OV_?@ ?eZ^A AnZ^BC B2[]+ + cfol CoZ[* *0 targetfolder targetFolder @mVW>DE Dl``)F) F" move folders out of archiveEGH GI`f(I' ($0backuprecordingsbackUpRecordingsIJ& Joab% %0 thefolders theFolders&'HKL Klgg$M$ M82 symlink folders on DVD to archive (same dir name)LN# NIgo"O! "&0symlinkrecordingssymlinkRecordingsOPQ Pohi 0 theindexes theIndexesQRS Roij 0thedisktheDiskST Tojk 0 cleaneddb cleanedDB!#UV UlVWX Wi YZ YI[ $0backuprecordingsbackUpRecordings[\ \o 0 folderlist folderList Zk<]]^_ ^l` `3- make the Holding folder if it doesn't exist _ab alc c4. copy the folders we backed up to OLD versionsbde dX:fg fk5hhij irkl k4m  alis mln nbop oo 0 thefolder theFolder pmq q: lo 0 sourcefolder sourceFolderjrs rr"tu tI vw .earsffdralis afdr vm  afdrdocsw x  from xm  fldmfldu uo 0 targetfolder targetFoldersy yO#5z{ zI'4|} .coremoveobj obj |4'+~  cfol ~o)* 0 sourcefolder sourceFolder}  insh 4,0  cfol o./ 0 targetfolder targetFolder {m#$ 0 thefolder theFolder go 0 folderlist folderListe l;;X l i I &0symlinkrecordingssymlinkRecordings o 0 indexlist indexList o 0thedisktheDisk o 0 cleaneddb cleanedDB YH k C r  n  4  cobj o 0 index_item o  0 indexlist indexList o 0 dbselection dbSelection l E? use the indexes to find the POSIX paths to the folder location q "0targetposixpathtargetPOSIXPath "0sourceposixpathsourcePOSIXPath l  in the archive r" I  0 escapespaces escapeSpaces n 4  cobj m n 4  cobj o 0 dbselection dbSelection o 0 cleaneddb cleanedDB o "0targetposixpathtargetPOSIXPath l## XR use the disk name and directory name to create the name of the file on the backup r#7 b#5 b#- b#+ m#$  /Volumes/ I$* 0 escapespaces escapeSpaces o%& 0thedisktheDisk m+, / l-4 n-4 414  cobj m23 n-1 4.1  cobj o/0 0 dbselection dbSelection o-. 0 cleaneddb cleanedDB o "0sourceposixpathsourcePOSIXPath l88 *$ symlink the backup into the archive I8C .sysoexecTEXTTEXT b8? b8= b8; m89  ln -s  o9: "0sourceposixpathsourcePOSIXPath m;<   o=> "0targetposixpathtargetPOSIXPath 0 index_item m l n 1  leng o 0 indexlist indexList l i I 0 escapespaces escapeSpaces o 0 the_string k0 r m  o 0 new_string q 0j Y0 k+ r n 4  cobj o 0j o 0 the_string o 0the_char Z+ = o 0the_char 1  spac r# b! o 0 new_string m  \  o 0 new_string r&+ b&) o&' 0 new_string o'( 0the_char o 0 new_string 0j m l  n  1  leng o 0 the_string l       0 exportdvd exportDVD 0 pickthedisk pickTheDisk 0 copytodisk copyToDisk $0backuprecordingsbackUpRecordings &0symlinkrecordingssymlinkRecordings 0 escapespaces escapeSpaces .aevtoappnull****S 0 exportdvd exportDVD "0selectedindexesselectedIndexes 0programstoburnprogramsToBurn 0 programnames programNames 0 sizeoffiles sizeOfFiles 0 cleaneddb cleanedDB "0selectedindexesselectedIndexes 0programstoburnprogramsToBurn 0 programnames programNames 0 sizeoffiles sizeOfFiles 0 cleaneddb cleanedDB 0thedisktheDiskmz  prmp  empL .gtqpchltTEXT@@TEXT  rslt .sysodlogaskrTEXT 0 pickthedisk pickTheDisk 0 copytodisk copyToDisk  min 0okSe WXhOf j OfY**j+ EO*+ O nel oOael Oe  0 pickthedisk pickTheDisk 0disklistdiskList 0thedisktheDisk~}|{zyxw  cdis  pnam ~.miscactvnullnull } prmp |.gtqpchltTEXT@@TEXT { rslt z btns y.sysodlogaskrTEXT x.aevtquitnullobj w cobjG *-,EUO)*j UOl Ofkvl O)*j UYk/EO vuts v0 copytodisk copyToDiskurrqpon q0thedisktheDisk p0 thefolders theFolders o0 theindexes theIndexes n0 cleaneddb cleanedDBtmlkjihgf m0thedisktheDisk l0 thefolders theFolders k0 theindexes theIndexes j0 cleaneddb cleanedDB i0i h0 thefolder theFolder g0 sourcefolder sourceFolder f0 targetfolder targetFolderedcba`'_^]\[ZYXWV e.miscactvnullnull d cdis c.aevtodocnullalis b leng a cobj ` alis_ ^ min ] cfol \ insh [ alrp Z savoyes Y X.coreclon******** W$0backuprecordingsbackUpRecordings V&0symlinkrecordingssymlinkRecordingssp*j O*/j UO@k,Ekh/EO*%/EO*%/EO n*/ oU[OYO-EUO*k+O*m+ UZTSR U$0backuprecordingsbackUpRecordingsTQQP P0 folderlist folderListSONML O0 folderlist folderList N0 thefolder theFolder M0 sourcefolder sourceFolder L0 targetfolder targetFolder KJIHqGFEDCBA K kocl J cobj I.corecnte******** H alis G afdrdocs F from E fldmfldu D.earsffdralis afdr C cfol B insh A.coremoveobj obj R=9[l kh*%/EOl EO*/*/l U[OYOP @?>= @&0symlinkrecordingssymlinkRecordings?<<;:9 ;0 indexlist indexList :0thedisktheDisk 90 cleaneddb cleanedDB>8765432 80 indexlist indexList 70thedisktheDisk 60 cleaneddb cleanedDB 50 index_item 40 dbselection dbSelection 3"0targetposixpathtargetPOSIXPath 2"0sourceposixpathsourcePOSIXPath 10/.- 1 leng 0 cobj/ .0 escapespaces escapeSpaces -.sysoexecTEXTTEXT=IGk,Ekh/EO*//k+EO*k+%%/k/%EO%%%j [OY ,+*) ,0 escapespaces escapeSpaces+((' '0 the_string*&%$# &0 the_string %0 new_string $0j # 0the_char"!  " leng ! cobj  spac)1EO+k,Ekh/EO %EY%E[OY !" .aevtoappnull****  k##$$T%%&&''((8))=**r++v,,{--5!  0 theprograms thePrograms 0 programssize programsSize 0 thenameslist theNamesList "0thedisplaynamestheDisplayNames 0 therepository theRepository 0 searchkey searchKey 0 theitemindex theItemIndex 0 theprogram theProgram 0i 0olddelimoldDelim 0dbitemdbItem 0 indexlist indexList 0thefiletheFile"6!   0 dvd_capacity DVD_CAPACITY  cPrg 0 theprogramdb theProgramDB  Rurl  TEXT  kocl  cobj .corecnte********  Titl 0thetitletheTitle  Epis 0 theepisode theEpisode  Unqu 0 theuniqueid theUniqueID .sysoexecTEXTTEXT 0 thedirname theDirName 0thepaththePath  psxp 0 theposixpath thePOSIXPath 0thedisplaynametheDisplayName .aevtquitnullobj  cfol 0realeyetvitemsrealEyeTVItems .miscactvnullnull  leng  txdl  citm 0 itemparts itemParts 0 cleaneddb cleanedDB 0dbkeydbKey 0 thenicename theNiceName  file  pnam 0filelistfileList 0filesindirsizefilesInDirSize .sysonfo4asfe****  ptsz 0 thefilesize theFileSize 0 exportdvd exportDVD EO*-EOjEOjvEOjvEOjvEO*,&EO[l kh,EO,EO,E`Oa_%a%j E`O_%E`O_a,E`OE`Oaa%%a%E`YhO_____av6F[OYO*j UOa*a/a-E` UO)*j !UOUk_ a",Ekh*a#,EOa$*a#,FO_ /&a%-E`&O_&_&a",k/_ /FO*a#,F[OYOjvE`'OPk_ a",Ekh_ /EO1[l kh k/E`(O_( _'6FOYh[OY[OYOjvEOk_'a",Ekh_'/k/E`O_'/i/E`)O_'/a*/E`Oak*a_/_*a+-a,,E`-WX./hOjE`0O<_-[l kh *a+_a1%%/j 2a3,E`4O_0_4E`0[OYUUO)*j !UO_0/*_'a*+5O_kvEO_)kvEO_0EOkvEY_6FO_)6FO6FO_0E[OYOj*_'a*+5Yhascr ޭ GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. , 1 April 1990 Ty Coon, President of Vice That's all there is to it! {\rtf1\mac\ansicpg10000\cocoartf102 {\fonttbl\f0\fswiss\fcharset77 Helvetica;\f1\fswiss\fcharset77 Helvetica-Oblique;} {\colortbl;\red255\green255\blue255;} \margl1440\margr1440\vieww9000\viewh7500\viewkind0 \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural \f0\fs38 \cf0 EyeTV DVD Offloader \fs28 \ \fs26 \ Works with EyeTV 1.8.4. Has \f1\i not been tested \f0\i0 with EyeTV 2.0. I'm not even sure if they have the same Applescript dictionary. If you run this against a 2.0 library, \f1\i be warned \f0\i0 that it may trash all of your recordings, or it may work fine. I don't really know at the moment.\ \ \fs32 \ul Install/uninstall \fs26 \ul \ \ulnone To install:\ - Drag the "EyeTV DVD Offloader.scpt" file to your Applications folder.\ \ To uninstall:\ - Drag the "EyeTV DVD Offloader.scpt" file to the Trash.\ \ \fs32 \ul How it works\ \fs26 \ulnone The DVD Offloader works by creating a \f1\i symbolic link \f0\i0 from the EyeTV Programs folder to a duplicate copy of the original recording on a DVD or other external storage. When the volume is mounted, EyeTV can see and play the recording and will show it in the Programs window; when the volume is not mounted, the programs are not visible.\ \ EyeTV must be restarted if you want to swap DVDs.\ \ \fs32 \ul Legal mumbo-jumbo \fs26 \ul \ \ulnone The program is copyright 2005-2006 by Joe McMahon. All rights reserved. This program is distributed under the LGPL; see the "LGPL" file supplied on this disk image for details.\ \ Contact me at mcmahon@ibiblio.org for questions and support. Support will be provided on a when-I-happen-to-have-time basis.}Bud1 ob.fwi0blobicnv.fwswlong.icspblob.infoblob('`"`EyeTV DVD Offloader.appIlocblobzEyeTV-DVD-Offload.scptIlocblob_ LGPL.txtIlocblob README.rtfIlocblob_z  @ @ @ @ E DSDB ` @ @ @%$BXpwpc8 CarbonStub@( d?<NV/v/0 CFBundleDevelopmentRegion English CFBundleIconFile 150 CFBundleInfoDictionaryVersion 6.0 CFBundlePackageType APPL CFBundleSignature aplt LSPrefersCarbon cicnscICN#/????@il329 (/iǤ9n n n{ n̛1 nȷa mʳ=Wʴͩ? KvZiɴֲBx}tyȴE#Dw5ۯ);ƒɫN Aε6  .qճΩo. 9uýڹֲu9:˽ڽ:Ÿpuūփ'pʿuy³ؼn'DжpyђB!fȚwuyڵc  ;ζt~ψ: ]߽߯Z 3Ѷҁ2 VT/.SQ '.f7k k kw kƖ/ k²^ jĮ;TįǤ= JsXeïϭ@tyqu¯ڵC"Bt3Ԫ(9æL AȰ6  .qϭϩo. 9uýԴֲu9:˽ٻڽ:Ÿlq⿦փ'pʿqvؼn'DгmyђB!f•tryڵc  ;ζq~ψ: ]߽߯Z 3ѷҁ2 VT/.SQ '.gġ8l l ly lɘ0 lŴ` kǰ<VDZʧ> KtYgƱүAvzrwıݷD#Cv4׬(:ÏŨM A˲6  .qүϩo. |9uý׶ֲu9:˽۽ڽ:Ÿns¨փ'pʿsxؼn'DеoyђB!fėutyڵc  ;ζr~ψ: ]߽߯Z 3Ѷҁ2 VT/.SQl8mk '.sؓ$|{~}})}]}:~: s:'9.7+/+FT"a-)mn) 1zz1 7҆7 QQ  .ހ. NN'vv'EE"ll">=bb 6Ϗ6 8ics#H@??is32e bGl~ lI`˴U A|ҵW dT @ %`>JҾJ>ѳ᫶ɔ=8ŭxח7hvۺf :ɶڎ9 ^`7u5 _Ei{iG]ůR ?y̰ĻU aQ > %]>J˻J>ѳۧɔ=8Ƭtח7hžrۺf :ȳڎ9 ^`7u5 `Fk| kH_ȱS @zβǽV bR ? %^=JμJ>ѳݩɔ8Ŭvחhtۺf :ȴڎ9 ^`7u5s8mko@~~N~_ pZ SKrOO FG SS88__00UUit32MU ʷ ʶ Ϸ ʷ ʵ Ϸ ʷ ɵ ζ ʷ ɵļ ζ Ƽ ͸ ľ ɶ ü ζ ż ͸ Ľ ɶ ü ʵ ż ͷ Ľ ɶ ü ʵ ż Ϸ Ž ʷĽ ɵļ ζŽ ʷĽ ɵļ η Žƀ κĽƀ ̡kcadjļɊkba`abcbcƽ4nkfbbcegiigqľ}wtngddehjkmqprü8}|wqkgghklnqtvu~ż9|{unjikmoquwy{wĽzsonnqtvy{}~ü<ytqruxz|~ż=~xvvxz}ƽ|Ľƀ? 2 ƀB–C̢ܺšƀӻ0ʬBճŬAƷƿϽ6ǿ?׿º>û=³ý<Ķž:Ƹƾ9Ƚ7û6¼ƀļ8ƾ9#=»ƾ;ļ€Ȁ̀ľ˫π6žπЁ˸Ѐ' φҀ7º́ЅҀǪҀ>»Ё҃ӁȦӂ(ĽӂԃΡӄ*žҁӄΟԅHƿӀԆишG½~рԉÔъsru»ԋǐ׌2uxpnuûՍ̌ӌÿ1y|qqrpxĽԊ͉Ӌ%}trrsspx"žԉѳ xׇ¿1{vttsstpuƿՈ ӿx kׅ|zxvvt'pxՆ ˣk (xֆI}{ywvuttq{üԄ ζx(QՀօG|zxvuutpx¼Ԅ ǛQ oքE}{ywvstpĽԂ ͯo D~ׄC½}{yvtuvs˿}Ղ Ô~D fׄ@ÿ}yvuvvpx~Ձ ͪf 9xׅ¦{x vqpqyz|Ձ Ͼx9 `ׅ;}|{xtokvvz}Հ ̤` -tׄԀC˿|wrmfmrw|Ϲt- X~؄ր.¯ù}wpkefpt{Ҁ˝~X $nׄBȽƹ}vqkgakpyϴn$ Mz}Ӏׁ@Ƕ}vqjjginyƗ}zMPi}ƺ~vpgthpyѮ}iLFv|ʻvon|fpyƐ|vFJb{}îvodp}Ш}{bF9rzȿDzywcrzr9DZyyŲ}`wТyyZ@/oy÷oh}սyo/{xxz{}~~~# 2A)޺CƝպ:̻:ħBήſAȸ6?ϸü>Ϻý=мý<ѽƿ:9¸7ž½6ľĽ7ž̀,) :»=Ľƾ;ľȀ̀6ž˫π6πЁ˸Ѐ' ºφҀ7¼ˁЅҀǪҀ>üЁ҃ӁȦӂ(žӂԃΡӄ*ҁӄΟԅHӀԆишG½{рԉÔъrorüԋǐ׌2sumkqĽՍ̌ӌÿ1wymnomuĿԊ͉Ӌ%||pnoppmt"ƿԉѳ xׇ¿wsq*pplrՈ ӿx kׅJyvtsrqpqmu»Ն ˣk (xֆ|ywutrq&mw½Ԅ ζx(QՀօG{xvusrrqmuĽԄ ǛQ oքE|zxutspqmƿԂ ͯo D~ׄC½}zxusqrspź|Ղ Ô~D fׄ@ÿ}yusrssmw~Ձ ͪf 9xׅ=¢{wuttrmlpyz|Ձ Ͼx9 `ׅ;}zxwtqlhvvz}Հ ̤` -tׄԀC˿~|xsojcmrw|Ϲt- X~؄ր.ªýzsmhbfpt{Ҁ˝~X $nׄBȹzsmhdakpyϴn$ Mz}Ӏׁ@ƿzrngffinyƗ}zMPi}zrmd~shpyѮ}iLFv|Ķ{skjxfpyƐ|vFJb{}ν}sl|dp}Ш}{bF9rzȿvtbrzr9DZyyοy_wТyyZ@/oy÷ǻmh}սyo/}zz{}? 2ABCɠٺBл0ǪBҰAó¼˺ˀ ü?һſ>ҽӿˀ#<»:µûźˀ%Ľ7ſ6ǿ78û Ҁ ý:Ľ=ƿƾ;Ȁ̀6˫π6»πЁ˸Ѐ8ĽφҀ7ſ́ЅҀǪҀ>ſЁ҃ӁȦӂ(ӂԃΡӄ*»ҁӄΟԅH¼ӀԆишG½|ýрԉÔъspsƾԋǐ׌2tvomsՍ̌ӌÿ1xzooqnvԊ͉Ӌ%|~rppqrnv"»ԉѳ xׇ¿xtr*qrnsüՈ ӿx kׅJ{wvutsrrnvľՆ ˣk (xֆ~{ywuts&oxԄ ζx(QՀօG}zxvutssowǿԄ ǛQ oքE}{ywutsroԂ ͯo D~ׄC½~{ywtsstrǼ}Ղ Ô~D fׄ@ÿ~zwtstunw~Ձ ͪf 9xׅ£}yv tonqyz|Ձ Ͼx9 `ׅ;{zxvsmivvz}Հ ̤` -tׄԀC˿~zvpkdmrw|Ϲt- X~؄ր.¬|tojcfpt{Ҁ˝~X $nׄBȻö|tojeakpyϴn$ Mz}Ӏׁ@ó{tohhginyƗ}zMPi}÷{tnethpyѮ}iLFv|Ƹ|tmkzfpyƐ|vFJb{}um}dp}Ш}{bF9rzȿïwvcrzr9DZyy{`wТyyZ@/oy÷ɽnh}սyo/KK>. %5DeeD5% ,LK>/  %5FfeE5% -=JJ=- $4C__C4$ +;II;+ "2AXXA2" )9G~~G9)  1@RR@1   (8FppF8(  />OO>/  &6EiiE6& -:@:-  &    apltFREFICN#APPL3CFasdUAS 1.101.10 k l B< Back up recordings from an EyeTV archive to DVD, preserving l  60 the data exactly as it was recorded originally.  l   l KE The size of a DVD, in bytes. We leave some slack for disk management l MG (PC and Mac disc structures, EyeTV management data, directories, etc.) l 5/ Estimated from an empty DVD-sized disk image.  l  r  ] ] ] m!!@\(\ m m m o 0 dvd_capacity DVD_CAPACITY"# "l#$% $l& &E? Main program. Scan through the EyeYTV Archive and pull out all%'( 'l) )?9 of the recordings, saving the funny name EyeTV saves the(*+ *l, ,4. program under and the name the user assigned.+-. -l./0 /l1 1B< Parcel out these files a DVD-ful at a time, copying them to023 2l4 4B< the DVD. (You must burn the DVDs when directed to proceed.)356 5l7 793 Make symlinks (or aliases) to the files on the DVD689 8l: : in a new directory.9;< ;l<=> =l? ?<6 After the files have been burnt to DVD and symlinked,>@A @lB B& stop EyeTV and then restart it.ACD ClDEF ElG G+% extract the program data from EyeTV.FHI HlJ JQK The "unique id" is a floating-point number generated by EyeTV to uniquely IKL KlM MNH name each recording. We'll use Perl to convert this to its hexadecimal LNO NlP PYS representation (which is how EyeTV uses it to name the recordings in the archive).OQR QlS Sf` We'll use this to build a list of lists that maps the hex unique id to the program information.RTU Tl V VO WX WkYYZ[ Zq\\] 0 theprograms thePrograms]^ 0 programssize programsSize^_ 0 thenameslist theNamesList_` "0thedisplaynamestheDisplayNames`a 0 therepository theRepositoryab 0 searchkey searchKeyb 0 theitemindex theItemIndex[cd cref e2  cPrg fo 0 theprograms theProgramsdgh grij im jo 0 programssize programsSizehkl krmn mJ no 0 thenameslist theNamesListlop or!qr qJ ro "0thedisplaynamestheDisplayNamespst sr"&uv uJ"$ vo 0 theprogramdb theProgramDBtwx wr'.yz yc',{| {1'*  Rurl |m*+  TEXT zo 0 therepository theRepositoryx}~ }X/ k? r?D n?B 1@B  Titl o?@ 0 theprogram theProgram o 0thetitletheTitle rEJ nEH 1FH  Epis oEF 0 theprogram theProgram o 0 theepisode theEpisode rKR nKN 1LN  Unqu oKL 0 theprogram theProgram o 0 theuniqueid theUniqueID rSf lSb ISb .sysoexecTEXTTEXT bS^ bSZ mSV perl -e 'printf "%016x", oVY 0 theuniqueid theUniqueID mZ] ' o 0 thedirname theDirName rgp bgl ogh 0 therepository theRepository ohk 0 thedirname theDirName o 0thepaththePath rq| lqx nqx 1tx  psxp oqt 0thepaththePath o 0 theposixpath thePOSIXPath r} o}~ 0thetitletheTitle o 0thedisplaynametheDisplayName Z > o 0 theepisode theEpisode m  r b b b o 0thetitletheTitle m  ( o 0 theepisode theEpisode m ) o 0thedisplaynametheDisplayName l 82 first item is the key, rest are associated values r J o 0 thedirname theDirName o 0thetitletheTitle o 0 theepisode theEpisode o 0 theuniqueid theUniqueID o 0thepaththePath o 0 theposixpath thePOSIXPath o 0thedisplaynametheDisplayName l n ; o 0 theprogramdb theProgramDB 0 theprogram theProgram o23 0 theprograms thePrograms~ I .aevtquitnullobj  Xm null߀ EyeTV.app(B,8@pԿ! alis4EyTValis8flatbox H+ EyeTV.app5J Applications{B|flatbox:Applications:EyeTV.app EyeTV.appflatboxApplications/EyeTV.app/U l l _Y Now we need to look at the actual contents of the archive on disk and pick out only the  l UO programs that are associated with directories, as we might have exported some  l  in a previous run.  l O r l n 2  cfol 4  cfol o 0 therepository theRepository o 0realeyetvitemsrealEyeTVItems mnull߀ j Finder.app(BD,b@pԿ!MACSalisbflatbox H+ j Finder.app25W CoreServices{B5 j b a.flatbox:System:Library:CoreServices:Finder.app Finder.appflatbox&System/Library/CoreServices/Finder.app/ l O I .miscactvnullnull f l l ?9 strip out the hex directory names from the folder names. l; Y; k6 q 0olddelimoldDelim r 1  txdl  o 0olddelimoldDelim   r   m :  1~ ~ txdl  r n 2} } citm l| c n 4 { { cobj o  z z0i o y y 0realeyetvitemsrealEyeTVItems mx x TEXT| ow w0 itemparts itemParts r. n' 4'v! v cobj !l&"u "\&#$ #l$%t %n$&' &1 $s s leng 'o r r0 itemparts itemPartst $m$%qqu  op p0 itemparts itemParts n() (4*-o* o cobj *o+,n n0i )o'*m m 0realeyetvitemsrealEyeTVItems+l +r/6,- ,o/0k k0olddelimoldDelim -105j j txdll 0i mii n./ .1h h leng /og g 0realeyetvitemsrealEyeTVItems01 0lfefe123 2ld4d 4PJ extract the items in the DB that correspond to the folders we just found.356 5lc7c 7% these are eligible for export.689 8l<B:b :r<B;< ;J<>aa <o` `0 cleaneddb cleanedDBb9=> =lC?_ ?YC@^AB] @kTCCDE DrT\FG FnTZHI H4WZ\J \ cobj JoXY[ [0i IoTWZ Z 0realeyetvitemsrealEyeTVItems GoY Y0 searchkey searchKeyEKX KX]LWM LkmNNOP OrmuQR QnmqST S4nqVU V cobj UmopUU TomnT T0dbitemdbItem RoS S0dbkeydbKeyPVR VZvWXQP W=v{YZ YovyO O0dbkeydbKey ZoyzN N0 searchkey searchKey Xk~[[\] \r~^_ ^o~M M0dbitemdbItem _n`a `; aoL L0 cleaneddb cleanedDB]bK bSKQPR W0dbitemdbItem Mo`aJ J0 theprogramdb theProgramDBX ^0i AmFGII BnGOcd c1JNH H leng doGJG G 0realeyetvitemsrealEyeTVItems]_>ef elFEFEfgh glDiD iLF we could sort the items by display name here; left out to shorten thehjk jlClC l script for claritykmn mlBABAnop ol@q@ q3- build a DVD-ful of programs, sorted by name.prs rlt? tquu>= >0 indexlist indexList=?svw vlx< xryz yJ;; zo: :0 indexlist indexList<w{| {l}9 }Y~87 ~k l66 :4 extract what we named the program (item 1) and what l55 71 EyeTV named it (item 2) for the current program. r n 44 4 cobj m33 n 42 2 cobj o1 10i o0 00 cleaneddb cleanedDB o/ /0 thedirname theDirName r l. n 4- - cobj m,, n 4+ + cobj o* *0i o) )0 cleaneddb cleanedDB. o( (0 thenicename theNiceName r n 4' ' cobj m&& n 4% % cobj o$ $0i o# #0 cleaneddb cleanedDB o" "0thepaththePath l! !  l QK find all the files in the EyeTV archive directory for the current program. l UO this includes any clips made from this program, plus any EyeTV internal files. OG OF kE Q r l n 1  pnam 2  file o 0filelistfileList R .ascrerr ******** l :4 run through all the files and total up their sizes. r m o  0filesindirsizefilesInDirSize XE k@ r4 n0 1,0  ptsz l, I, .sysonfo4asfe**** 4(   file l' b' b% o! 0thepaththePath m!$ : o%& 0thefiletheFile   o 0 thefilesize theFileSize r5@ [5< o58  0filesindirsizefilesInDirSize o8; 0 thefilesize theFileSize o  0filesindirsizefilesInDirSize 0thefiletheFile o  0filelistfileList 4  cfol o 0thepaththePath m OHR ILQ .miscactvnullnull fHI lSS D> if all this fits on the current DVD, add it to the name list. lSS E? otherwise, copy all these to the current DVD and burn it, then lSS  reset the list. ZS @SZ lSX [SX oST 0 programssize programsSize oTW 0filesindirsizefilesInDirSize oXY 0 dvd_capacity DVD_CAPACITY k] I]k 0 exportdvd exportDVD o^_ 0 indexlist indexList o_` 0 thenameslist theNamesList o`a "0thedisplaynamestheDisplayNames oab 0 programssize programsSize obe 0 cleaneddb cleanedDB rls Jlq olo 0thepaththePath o 0 thenameslist theNamesList rt{   Jty    otw 0 thenicename theNiceName  o "0thedisplaynamestheDisplayNames  r| o| 0filesindirsizefilesInDirSize o 0 programssize programsSize r J o 0i o 0 indexlist indexList k r o 0thepaththePath n ; o 0 thenameslist theNamesList r !  o 0 thenicename theNiceName !n"# "; #o "0thedisplaynamestheDisplayNames$% $r&' &o 0i 'n() (; )o 0 indexlist indexList%* *r+, +[-. -o 0 programssize programsSize .o 0filesindirsizefilesInDirSize ,o 0 programssize programsSize 80i m l/ /n01 01  leng 1o 0 cleaneddb cleanedDB79|23 2l4 4 handle any leftovers356 5l7 7Z89 8>:; :o 0 programssize programsSize ;m 9I< 0 exportdvd exportDVD<=> =o 0 indexlist indexList>?@ ?o 0 thenameslist theNamesList@AB Ao "0thedisplaynamestheDisplayNamesBCD Co 0 programssize programsSizeDE Eo 0 cleaneddb cleanedDB6FG FlGHI HlJ J Handlers --IKL KlLMN MlO O2, Actually burn the programs supplied to DVD.NPQ PiRS RIT 0 exportdvd exportDVDTUV Uo "0selectedindexesselectedIndexesVWX Wo 0programstoburnprogramsToBurnXYZ Yo 0 programnames programNamesZ[\ [o 0 sizeoffiles sizeOfFiles\] ]o 0 cleaneddb cleanedDB SkR^^_` _la aUO hack: shows the list of programs with OK and Cancel. We ignore any selections.`bc bld da[ if "cancel" is selected, we see if we should give up completely or just skip this diskful.cef eQgh gI ij .gtqpchltTEXT@@TEXT io 0 programnames programNamesjkl  prmp kmm m#Burn these recordings to DVD?ln  empL nm  boovtrue hR .ascrerr ********fop oZOqrs q=tu t1  rslt um  boovfals rk$vvwx wI!y .sysodlogaskrTEXT ymz z82"OK" to skip this set, "Cancel" to quit altogetherx{ {L"$| |m"#  boovfals sk'O}}~ ~l'' <6 go ahead and copy the ones that will fit on this disk r'. I', 0 pickthedisk pickTheDisk o 0thedisktheDisk I/8 0 copytodisk copyToDisk o01 0thedisktheDisk o12 0programstoburnprogramsToBurn o23 "0selectedindexesselectedIndexes o34 0 cleaneddb cleanedDB l99 C= at this point the programs are located on the disk as far as l99 E? EyeTV is concerned. We have to burn it to completely make sure l99  everything is OK t9E I=D .sysodlogaskrTEXT m=> "Burn the DVD, then click OK. 0ok m?@  boovtrue l9< ]9< m9: 1:;  min  IFO .sysodlogaskrTEXT mFI [UPut in a new DVD and label it. Click OK when you're ready to archive more recordings. 0ok mJK  boovtruep LPR mPQ  boovtrueQ l l >8 find the online disks so the backup disk can be chosen. l 0* It's up to you to actually pick your DVD! i I 0 pickthedisk pickTheDisk kF O  r  n  1   pnam 2~ ~ cdis o} }0disklistdiskList m O  I|{z |.miscactvnullnull{z f  Iy y.gtqpchltTEXT@@TEXT ox x0disklistdiskListwv w prmp m "Choose the disk for backups:v l utut Z Cs = # 1 !r r rslt m!"q q boovfals k&: I&/p p.sysodlogaskrTEXT m&' Cancelling backup runon o btns J(+m m() OKmnl O0: I49kji k.aevtquitnullobj ji f01ls r=C n=A 4>Ah h cobj m?@gg 1=>f f rslt oe e0thedisktheDisk lDDdcdcb LDF oDEa a0thedisktheDiskb l`_`_ l^^ B< copyToDisk copies the entirety of the listed directories to l]]  the supplied volume. i  I\[ \0 copytodisk copyToDisk oZ Z0thedisktheDisk oY Y0 thefolders theFolders oX X0 theindexes theIndexesW oV V0 cleaneddb cleanedDBW[ ko O k I UTS U.miscactvnullnullTSR I QP Q.aevtodocnullalis 4 O O cdis o N N0thedisktheDiskPR m lMLML   YU K  J  k!P r!' n!% 4"%I I cobj o#$H H0i o!"G G0 thefolders theFolders oF F0 thefolder theFolder r(0 4(.E E alis l*-D b*- o*+C C0 thefolder theFolder m+, :D oB B0 sourcefolder sourceFolder r19!" !417A# A alis #l36$@ $b36%& %o34? ?0thedisktheDisk &m45' ':@ "o> >0 targetfolder targetFolder () (l::=<=<)*; *O:P+, +t>O-. -IBN:/0 :.coreclon******** /4BF91 9 cfol 1oDE8 80 sourcefolder sourceFolder0723 7 insh 2oGH6 60 targetfolder targetFolder3544 5 alrp 4mIJ3 3 savoyes 4 .l>A52 5]>A67 6m>?11 71?@0 0 min 2 ,m:;; K0i  m//  n89 81. . leng 9o- -0 thefolders theFoldersJ :; :lVV,<, < find folders on DVD;=> =OV_?@ ?eZ^A AnZ^BC B2[]+ + cfol CoZ[* *0 targetfolder targetFolder @mVW>DE Dl``)F) F" move folders out of archiveEGH GI`f(I' ($0backuprecordingsbackUpRecordingsIJ& Joab% %0 thefolders theFolders&'HKL Klgg$M$ M82 symlink folders on DVD to archive (same dir name)LN# NIgo"O! "&0symlinkrecordingssymlinkRecordingsOPQ Pohi 0 theindexes theIndexesQRS Roij 0thedisktheDiskST Tojk 0 cleaneddb cleanedDB!#UV UlVWX Wi YZ YI[ $0backuprecordingsbackUpRecordings[\ \o 0 folderlist folderList Zk<]]^_ ^l` `3- make the Holding folder if it doesn't exist _ab alc c4. copy the folders we backed up to OLD versionsbde dX:fg fk5hhij irkl k4m  alis mln nbop oo 0 thefolder theFolder pmq q: lo 0 sourcefolder sourceFolderjrs rr"tu tI vw .earsffdralis afdr vm  afdrdocsw x  from xm  fldmfldu uo 0 targetfolder targetFoldersy yO#5z{ zI'4|} .coremoveobj obj |4'+~  cfol ~o)* 0 sourcefolder sourceFolder}  insh 4,0  cfol o./ 0 targetfolder targetFolder {m#$ 0 thefolder theFolder go 0 folderlist folderListe l;;X l i I &0symlinkrecordingssymlinkRecordings o 0 indexlist indexList o 0thedisktheDisk o 0 cleaneddb cleanedDB YH k C r  n  4  cobj o 0 index_item o  0 indexlist indexList o 0 dbselection dbSelection l E? use the indexes to find the POSIX paths to the folder location q "0targetposixpathtargetPOSIXPath "0sourceposixpathsourcePOSIXPath l  in the archive r" I  0 escapespaces escapeSpaces n 4  cobj m n 4  cobj o 0 dbselection dbSelection o 0 cleaneddb cleanedDB o "0targetposixpathtargetPOSIXPath l## XR use the disk name and directory name to create the name of the file on the backup r#7 b#5 b#- b#+ m#$  /Volumes/ I$* 0 escapespaces escapeSpaces o%& 0thedisktheDisk m+, / l-4 n-4 414  cobj m23 n-1 4.1  cobj o/0 0 dbselection dbSelection o-. 0 cleaneddb cleanedDB o "0sourceposixpathsourcePOSIXPath l88 *$ symlink the backup into the archive I8C .sysoexecTEXTTEXT b8? b8= b8; m89  ln -s  o9: "0sourceposixpathsourcePOSIXPath m;<   o=> "0targetposixpathtargetPOSIXPath 0 index_item m l n 1  leng o 0 indexlist indexList l i I 0 escapespaces escapeSpaces o 0 the_string k0 r m  o 0 new_string q 0j Y0 k+ r n 4  cobj o 0j o 0 the_string o 0the_char Z+ = o 0the_char 1  spac r# b! o 0 new_string m  \  o 0 new_string r&+ b&) o&' 0 new_string o'( 0the_char o 0 new_string 0j m l  n  1  leng o 0 the_string l      0 exportdvd exportDVD 0 pickthedisk pickTheDisk 0 copytodisk copyToDisk $0backuprecordingsbackUpRecordings &0symlinkrecordingssymlinkRecordings 0 escapespaces escapeSpaces .aevtoappnull**** 0 dvd_capacity DVD_CAPACITY 0 theprogramdb theProgramDB 0realeyetvitemsrealEyeTVItems 0 cleaneddb cleanedDBS 0 exportdvd exportDVD "0selectedindexesselectedIndexes 0programstoburnprogramsToBurn 0 programnames programNames 0 sizeoffiles sizeOfFiles 0 cleaneddb cleanedDB "0selectedindexesselectedIndexes 0programstoburnprogramsToBurn 0 programnames programNames 0 sizeoffiles sizeOfFiles 0 cleaneddb cleanedDB 0thedisktheDiskmz~}  prmp  empL .gtqpchltTEXT@@TEXT  rslt .sysodlogaskrTEXT 0 pickthedisk pickTheDisk 0 copytodisk copyToDisk ~ min }0okSe WXhOf j OfY**j+ EO*+ O nel oOael Oe |{zy |0 pickthedisk pickTheDisk{zxw x0disklistdiskList w0thedisktheDiskvutsrqponm v cdis u pnam t.miscactvnullnull s prmp r.gtqpchltTEXT@@TEXT q rslt p btns o.sysodlogaskrTEXT n.aevtquitnullobj m cobjyG *-,EUO)*j UOl Ofkvl O)*j UYk/EO lkji l0 copytodisk copyToDiskkhhgfed g0thedisktheDisk f0 thefolders theFolders e0 theindexes theIndexes d0 cleaneddb cleanedDBjcba`_^]\ c0thedisktheDisk b0 thefolders theFolders a0 theindexes theIndexes `0 cleaneddb cleanedDB _0i ^0 thefolder theFolder ]0 sourcefolder sourceFolder \0 targetfolder targetFolder[ZYXWV'UTSRQPONML [.miscactvnullnull Z cdis Y.aevtodocnullalis X leng W cobj V alisU T min S cfol R insh Q alrp P savoyes O N.coreclon******** M$0backuprecordingsbackUpRecordings L&0symlinkrecordingssymlinkRecordingsip*j O*/j UO@k,Ekh/EO*%/EO*%/EO n*/ oU[OYO-EUO*k+O*m+ KZJIH K$0backuprecordingsbackUpRecordingsJGGF F0 folderlist folderListIEDCB E0 folderlist folderList D0 thefolder theFolder C0 sourcefolder sourceFolder B0 targetfolder targetFolder A@?>q=<;:987 A kocl @ cobj ?.corecnte******** > alis = afdrdocs < from ; fldmfldu :.earsffdralis afdr 9 cfol 8 insh 7.coremoveobj obj H=9[l kh*%/EOl EO*/*/l U[OYOP 6543 6&0symlinkrecordingssymlinkRecordings52 2 10/ 10 indexlist indexList 00thedisktheDisk /0 cleaneddb cleanedDB4.-,+*)( .0 indexlist indexList -0thedisktheDisk ,0 cleaneddb cleanedDB +0 index_item *0 dbselection dbSelection )"0targetposixpathtargetPOSIXPath ("0sourceposixpathsourcePOSIXPath '&%$# ' leng & cobj% $0 escapespaces escapeSpaces #.sysoexecTEXTTEXT3IGk,Ekh/EO*//k+EO*k+%%/k/%EO%%%j [OY "! !" "0 escapespaces escapeSpaces!## 0 the_string ! 0 the_string 0 new_string 0j  0the_char"  leng  cobj  spac1EO+k,Ekh/EO %EY%E[OY$%& .aevtoappnull**** $k''((T))**++,,8--=..r//v00{115%   0 theprograms thePrograms 0 programssize programsSize 0 thenameslist theNamesList "0thedisplaynamestheDisplayNames 0 therepository theRepository 0 searchkey searchKey 0 theitemindex theItemIndex 0 theprogram theProgram 0i 0olddelimoldDelim 0dbitemdbItem 0 indexlist indexList 0thefiletheFile&6! 0 dvd_capacity DVD_CAPACITY  cPrg 0 theprogramdb theProgramDB  Rurl  TEXT  kocl  cobj .corecnte********  Titl 0thetitletheTitle  Epis 0 theepisode theEpisode  Unqu 0 theuniqueid theUniqueID .sysoexecTEXTTEXT 0 thedirname theDirName 0thepaththePath  psxp 0 theposixpath thePOSIXPath 0thedisplaynametheDisplayName .aevtquitnullobj  cfol 0realeyetvitemsrealEyeTVItems .miscactvnullnull  leng  txdl  citm 0 itemparts itemParts 0 cleaneddb cleanedDB 0dbkeydbKey 0 thenicename theNiceName  file  pnam 0filelistfileList 0filesindirsizefilesInDirSize .sysonfo4asfe****  ptsz 0 thefilesize theFileSize 0 exportdvd exportDVD EO*-EOjEOjvEOjvEOjvEO*,&EO[l kh,EO,EO,E`Oa_%a%j E`O_%E`O_a,E`OE`Oaa%%a%E`YhO_____av6F[OYO*j UOa*a/a-E` UO)*j !UOUk_ a",Ekh*a#,EOa$*a#,FO_ /&a%-E`&O_&_&a",k/_ /FO*a#,F[OYOjvE`'OPk_ a",Ekh_ /EO1[l kh k/E`(O_( _'6FOYh[OY[OYOjvEOk_'a",Ekh_'/k/E`O_'/i/E`)O_'/a*/E`Oak*a_/_*a+-a,,E`-WX./hOjE`0O<_-[l kh *a+_a1%%/j 2a3,E`4O_0_4E`0[OYUUO)*j !UO_0/*_'a*+5O_kvEO_)kvEO_0EOkvEY_6FO_)6FO6FO_0E[OYOj*_'a*+5YhA\(\22ascr ޭ%$BT$B scptrspsh~CFRgscszCODESIZEhfdrplsticnsBNDLFREFapltWPosDPos(@bbps  8__PAGEZERO__TEXT __text__TEXT(xx__cstring__TEXT-__picsymbol_stub__TEXT.,,$__DATA0 __data__DATA0 __la_symbol_ptr__DATA0 4  __nl_symbol_ptr__DATA0T T__dyld__DATA0d d__common__DATA0<8__LINKEDIT@0 /usr/lib/dyld d<*/System/Library/Frameworks/CoreServices.framework/Versions/A/CoreServices 4| P,@,A 8H=? Lx,A,@xxx8HH|!B<8c\8@H}@| x|N!h8!`|N =`k0d,AN 8N8`-8`8D8`;8D= 0d| =aN =`k0h}iN |!|> x~x|8`8(H|`x@>@x >@| >@8( @8`-H)}8`-@H!|N |!|> x~x|8H8`-Hِ~@8@D>D ,@Hx>D))x| @L>D))|| @4>D H~D>H  >H ,(AH>D)8 DK|8`-@HH,A4>H ,A>H ~H| x|N!~HH!|N |!|> xBH9=?) @@,A>@ T>(@H=?ixH=?itH!|N |9 8!aD8a@B!A!@Hh8!`|N <`apEyeTV DVD Offloader.appf;T${\rtf1\mac\ansicpg10000\cocoartf102 {\fonttbl\f0\fswiss\fcharset77 Helvetica;\f1\fswiss\fcharset77 Helvetica-Oblique;\f2\fnil\fcharset77 LucidaGrande; } {\colortbl;\red255\green255\blue255;} \margl1440\margr1440\vieww9000\viewh7500\viewkind0 \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural \f0\fs38 \cf0 EyeTV DVD Offloader \fs28 \ \fs26 \ Works with EyeTV 1.8.4. Has \f1\i not been tested \f0\i0 with EyeTV 2.0. I'm not even sure if they have the same Applescript dictionary. If you run this against a 2.0 library, \f1\i be warned \f0\i0 that it may trash all of your recordings, or it may work fine. I don't really know at the moment.\ \ \fs32 \ul Install/uninstall \fs26 \ul \ \ulnone To install:\ - Drag the "EyeTV DVD Offloader" file to your Applications folder.\ \ To uninstall:\ - Drag the "EyeTV DVD Offloader" file to the Trash.\ \ \fs32 \ul How it works\ \fs26 \ulnone The DVD Offloader works by creating a \f1\i symbolic link \f0\i0 from the EyeTV Programs folder to a duplicate copy of the original recording on a DVD or other external storage. When the volume is mounted, EyeTV can see and play the recording and will show it in the Programs window; when the volume is not mounted, the programs are not visible.\ \ EyeTV must be restarted if you want to swap DVDs.\ \ \fs34 \ul Further hacking\ \fs26 \ulnone The original script is available in the " \f2\fs24 EyeTV-DVD-Offload.scpt". Have fun. If you do anything interesting with it, please let me know, and I'll try to integrate it back into the original package.\ \f0\fs26 \ \fs32 \ul Legal mumbo-jumbo \fs26 \ul \ \ulnone The program is copyright 2005-2006 by Joe McMahon. All rights reserved. This program is distributed under the LGPL; see the "LGPL" file supplied on this disk image for details.\ \ Contact me at mcmahon@ibiblio.org for questions and support. Support will be provided on a when-I-happen-to-have-time basis.}FasdUAS 1.101.10 k l B< Back up recordings from an EyeTV archive to DVD, preserving l  60 the data exactly as it was recorded originally.  l  ?9 Copyright 2005-2006 by Joe McMahon (mcmahon@ibiblio.org)  l l KE The size of a DVD, in bytes. We leave some slack for disk management l MG (PC and Mac disc structures, EyeTV management data, directories, etc.) l 5/ Estimated from an empty DVD-sized disk image.  l  r  ] ] ! ]"# "m$$@\(\ #m !m m o 0 dvd_capacity DVD_CAPACITY%& %l&'( 'l) )E? Main program. Scan through the EyeYTV Archive and pull out all(*+ *l, ,?9 of the recordings, saving the funny name EyeTV saves the+-. -l/ /4. program under and the name the user assigned..01 0l123 2l4 4B< Parcel out these files a DVD-ful at a time, copying them to356 5l7 7B< the DVD. (You must burn the DVDs when directed to proceed.)689 8l: :93 Make symlinks (or aliases) to the files on the DVD9;< ;l= = in a new directory.<>? >l?@A @lB B<6 After the files have been burnt to DVD and symlinked,ACD ClE E& stop EyeTV and then restart it.DFG FlGHI HlJ J+% extract the program data from EyeTV.IKL KlM MQK The "unique id" is a floating-point number generated by EyeTV to uniquely LNO NlP PNH name each recording. We'll use Perl to convert this to its hexadecimal OQR QlS SYS representation (which is how EyeTV uses it to name the recordings in the archive).RTU TlV Vf` We'll use this to build a list of lists that maps the hex unique id to the program information.UWX Wl Y YO Z[ Zk\\]^ ]q__` 0 theprograms thePrograms`a 0 programssize programsSizeab 0 thenameslist theNamesListbc "0thedisplaynamestheDisplayNamescd 0 therepository theRepositoryde 0 searchkey searchKeye 0 theitemindex theItemIndex^fg frhi h2  cPrg io 0 theprograms theProgramsgjk jrlm lm mo 0 programssize programsSizekno nrpq pJ qo 0 thenameslist theNamesListors rr!tu tJ uo "0thedisplaynamestheDisplayNamessvw vr"&xy xJ"$ yo 0 theprogramdb theProgramDBwz{ zr'.|} |c',~ ~1'*  Rurl m*+  TEXT }o 0 therepository theRepository{ X/ k? r?D n?B 1@B  Titl o?@ 0 theprogram theProgram o 0thetitletheTitle rEJ nEH 1FH  Epis oEF 0 theprogram theProgram o 0 theepisode theEpisode rKR nKN 1LN  Unqu oKL 0 theprogram theProgram o 0 theuniqueid theUniqueID rSf lSb ISb .sysoexecTEXTTEXT bS^ bSZ mSV perl -e 'printf "%016x", oVY 0 theuniqueid theUniqueID mZ] ' o 0 thedirname theDirName rgp bgl ogh 0 therepository theRepository ohk 0 thedirname theDirName o 0thepaththePath rq| lqx nqx 1tx  psxp oqt 0thepaththePath o 0 theposixpath thePOSIXPath r} o}~ 0thetitletheTitle o 0thedisplaynametheDisplayName Z > o 0 theepisode theEpisode m  r b b b o 0thetitletheTitle m  ( o 0 theepisode theEpisode m ) o 0thedisplaynametheDisplayName l 82 first item is the key, rest are associated values r J o 0 thedirname theDirName o 0thetitletheTitle o 0 theepisode theEpisode o 0 theuniqueid theUniqueID o 0thepaththePath o 0 theposixpath thePOSIXPath o 0thedisplaynametheDisplayName l n ; o 0 theprogramdb theProgramDB 0 theprogram theProgram o23 0 theprograms thePrograms I .aevtquitnullobj  [m null߀ EyeTV.app@聿ȿpO)( zEyTValis8flatbox H+ EyeTV.app5J Applications{B|flatbox:Applications:EyeTV.app EyeTV.appflatboxApplications/EyeTV.app/X l l _Y Now we need to look at the actual contents of the archive on disk and pick out only the  l UO programs that are associated with directories, as we might have exported some  l  in a previous run.  l O r l n 2  cfol 4  cfol o 0 therepository theRepository o 0realeyetvitemsrealEyeTVItems mnull߀ j Finder.app@聿ȿpO)( zMACSalisbflatbox H+ j Finder.app25W CoreServices{B5 j b a.flatbox:System:Library:CoreServices:Finder.app Finder.appflatbox&System/Library/CoreServices/Finder.app/ l O I .miscactvnullnull f l l ?9 strip out the hex directory names from the folder names. l; Y; k6 q 0olddelimoldDelim   r   1  txdl  o~ ~0olddelimoldDelim    r m : 1} } txdl r n 2| | citm l{ c n 4 z z cobj o  y y0i o x x 0realeyetvitemsrealEyeTVItems mw w TEXT{ ov v0 itemparts itemParts r. !  n'"# "4'u$ u cobj $l&%t %\&&' &l$(s (n$)* )1 $r r leng *o q q0 itemparts itemPartss 'm$%ppt #oo o0 itemparts itemParts !n+, +4*-n- n cobj -o+,m m0i ,o'*l l 0realeyetvitemsrealEyeTVItems.k .r/6/0 /o/0j j0olddelimoldDelim 0105i i txdlk 0i mhh n12 11g g leng 2of f 0realeyetvitemsrealEyeTVItems34 3leded456 5lc7c 7PJ extract the items in the DB that correspond to the folders we just found.689 8lb:b :% these are eligible for export.9;< ;l<B=a =r<B>? >J<>`` ?o_ _0 cleaneddb cleanedDBa<@A @lCB^ BYCC]DE\ CkTFFGH GrT\IJ InTZKL K4WZ[M [ cobj MoXYZ Z0i LoTWY Y 0realeyetvitemsrealEyeTVItems JoX X0 searchkey searchKeyHNW NX]OVP OkmQQRS RrmuTU TnmqVW V4nqUX U cobj XmopTT WomnS S0dbitemdbItem UoR R0dbkeydbKeySYQ YZvZ[PO Z=v{\] \ovyN N0dbkeydbKey ]oyzM M0 searchkey searchKey [k~^^_` _r~ab ao~L L0dbitemdbItem bncd c; doK K0 cleaneddb cleanedDB`eJ eSJPOQ V0dbitemdbItem Po`aI I0 theprogramdb theProgramDBW ]0i DmFGHH EnGOfg f1JNG G leng goGJF F 0realeyetvitemsrealEyeTVItems\^Ahi hlEDEDijk jlClC lLF we could sort the items by display name here; left out to shorten thekmn mlBoB o script for claritynpq plA@A@qrs rl?t? t3- build a DVD-ful of programs, sorted by name.suv ulw> wqxx=< =0 indexlist indexList<>vyz yl{; {r|} |J:: }o9 90 indexlist indexList;z~ ~l8 Y76 k l55 :4 extract what we named the program (item 1) and what l44 71 EyeTV named it (item 2) for the current program. r n 43 3 cobj m22 n 41 1 cobj o0 00i o/ /0 cleaneddb cleanedDB o. .0 thedirname theDirName r l- n 4, , cobj m++ n 4* * cobj o) )0i o( (0 cleaneddb cleanedDB- o' '0 thenicename theNiceName r n 4& & cobj m%% n 4$ $ cobj o# #0i o" "0 cleaneddb cleanedDB o! !0thepaththePath l   l QK find all the files in the EyeTV archive directory for the current program. l UO this includes any clips made from this program, plus any EyeTV internal files. OG OF kE Q r l n 1  pnam 2  file o 0filelistfileList R .ascrerr ******** l :4 run through all the files and total up their sizes. r m o  0filesindirsizefilesInDirSize XE k@ r4 n0 1,0  ptsz l, I,  .sysonfo4asfe**** 4(   file l' b' b% o! 0thepaththePath m!$ : o%& 0thefiletheFile   o 0 thefilesize theFileSize r5@ [5< o58  0filesindirsizefilesInDirSize o8; 0 thefilesize theFileSize o  0filesindirsizefilesInDirSize 0thefiletheFile o  0filelistfileList 4  cfol o 0thepaththePath m OHR ILQ .miscactvnullnull fHI lSS D> if all this fits on the current DVD, add it to the name list. lSS E? otherwise, copy all these to the current DVD and burn it, then lSS  reset the list. ZS @SZ lSX [SX oST 0 programssize programsSize oTW 0filesindirsizefilesInDirSize oXY 0 dvd_capacity DVD_CAPACITY k] I]k 0 exportdvd exportDVD o^_ 0 indexlist indexList o_` 0 thenameslist theNamesList o`a "0thedisplaynamestheDisplayNames oab 0 programssize programsSize obe 0 cleaneddb cleanedDB rls Jlq    olo 0thepaththePath o 0 thenameslist theNamesList   rt{   Jty otw 0 thenicename theNiceName o "0thedisplaynamestheDisplayNames  r| o| 0filesindirsizefilesInDirSize o 0 programssize programsSize r J o 0i o 0 indexlist indexList k r o 0thepaththePath n ;  o 0 thenameslist theNamesList!" !r#$ #o 0 thenicename theNiceName $n%& %; &o "0thedisplaynamestheDisplayNames"'( 'r)* )o 0i *n+, +; ,o 0 indexlist indexList(- -r./ .[01 0o 0 programssize programsSize 1o 0filesindirsizefilesInDirSize /o 0 programssize programsSize 70i m l2 2n34 31  leng 4o 0 cleaneddb cleanedDB6856 5l7 7 handle any leftovers689 8l: :Z;< ;>=> =o 0 programssize programsSize >m <I? 0 exportdvd exportDVD?@A @o 0 indexlist indexListABC Bo 0 thenameslist theNamesListCDE Do "0thedisplaynamestheDisplayNamesEFG Fo 0 programssize programsSizeGH Ho 0 cleaneddb cleanedDB9IJ IlJKL KlM M Handlers --LNO NlOPQ PlR R2, Actually burn the programs supplied to DVD.QST SiUV UIW 0 exportdvd exportDVDWXY Xo "0selectedindexesselectedIndexesYZ[ Zo 0programstoburnprogramsToBurn[\] \o 0 programnames programNames]^_ ^o 0 sizeoffiles sizeOfFiles_` `o 0 cleaneddb cleanedDB VkRaabc bld dUO hack: shows the list of programs with OK and Cancel. We ignore any selections.cef elg ga[ if "cancel" is selected, we see if we should give up completely or just skip this diskful.fhi hQjk jI lm .gtqpchltTEXT@@TEXT lo 0 programnames programNamesmno  prmp nmp p#Burn these recordings to DVD?oq  empL qm  boovtrue kR .ascrerr ********irs rZOtuv t=wx w1  rslt xm  boovfals uk$yyz{ zI!| .sysodlogaskrTEXT |m} }82"OK" to skip this set, "Cancel" to quit altogether{~ ~L"$ m"#  boovfals vk'O l'' <6 go ahead and copy the ones that will fit on this disk r'. I', 0 pickthedisk pickTheDisk o 0thedisktheDisk I/8 0 copytodisk copyToDisk o01 0thedisktheDisk o12 0programstoburnprogramsToBurn o23 "0selectedindexesselectedIndexes o34 0 cleaneddb cleanedDB l99 C= at this point the programs are located on the disk as far as l99 E? EyeTV is concerned. We have to burn it to completely make sure l99  everything is OK t9E I=D .sysodlogaskrTEXT m=> "Burn the DVD, then click OK. 0ok m?@  boovtrue l9< ]9< m9: 1:;  min  IFO .sysodlogaskrTEXT mFI [UPut in a new DVD and label it. Click OK when you're ready to archive more recordings. 0ok mJK  boovtrues LPR mPQ  boovtrueT l l >8 find the online disks so the backup disk can be chosen. l 0* It's up to you to actually pick your DVD! i I 0 pickthedisk pickTheDisk kF O  r  n  1 ~ ~ pnam 2} } cdis o| |0disklistdiskList m O  I{zy {.miscactvnullnullzy f  Ix x.gtqpchltTEXT@@TEXT ow w0disklistdiskListvu v prmp m "Choose the disk for backups:u l tsts Z Cr = # 1 !q q rslt m!"p p boovfals k&: I&/o o.sysodlogaskrTEXT m&' Cancelling backup runnm n btns J(+l m() OKlmk O0: I49jih j.aevtquitnullobj ih f01kr r=C n=A 4>Ag g cobj m?@ff 1=>e e rslt od d0thedisktheDisk lDDcbcba LDF oDE` `0thedisktheDiska l_^_^ l]] B< copyToDisk copies the entirety of the listed directories to l\\  the supplied volume. i  I[Z [0 copytodisk copyToDisk oY Y0thedisktheDisk oX X0 thefolders theFolders oW W0 theindexes theIndexesV oU U0 cleaneddb cleanedDBVZ ko O k I TSR T.miscactvnullnullSRQ I PO P.aevtodocnullalis 4 N N cdis  o M M0thedisktheDiskOQ m   lLKLK    YUJI k!P r!' n!% 4"%H H cobj o#$G G0i o!"F F0 thefolders theFolders oE E0 thefolder theFolder r(0 4(.D D alis l*-C b*- o*+B B0 thefolder theFolder  m+,! !:C oA A0 sourcefolder sourceFolder"# "r19$% $417@& @ alis &l36'? 'b36() (o34> >0thedisktheDisk )m45* *:? %o= =0 targetfolder targetFolder#+, +l::<;<;,-: -O:P./ .t>O01 0IBN923 9.coreclon******** 24BF84 8 cfol 4oDE7 70 sourcefolder sourceFolder3656 6 insh 5oGH5 50 targetfolder targetFolder6473 4 alrp 7mIJ2 2 savoyes 3 1l>A81 8]>A9: 9m>?00 :1?@/ / min 1 /m:;: J0i m.. n;< ;1- - leng <o, ,0 thefolders theFoldersI => =lVV+?+ ? find folders on DVD>@A @OV_BC BeZ^D DnZ^EF E2[]* * cfol FoZ[) )0 targetfolder targetFolder CmVWAGH Gl``(I( I" move folders out of archiveHJK JI`f'L& '$0backuprecordingsbackUpRecordingsLM% Moab$ $0 thefolders theFolders%&KNO Nlgg#P# P82 symlink folders on DVD to archive (same dir name)OQ" QIgo!R !&0symlinkrecordingssymlinkRecordingsRST Sohi 0 theindexes theIndexesTUV Uoij 0thedisktheDiskVW Wojk 0 cleaneddb cleanedDB "XY XlYZ[ Zi \] \I^ $0backuprecordingsbackUpRecordings^_ _o 0 folderlist folderList ]k<``ab alc c3- make the Holding folder if it doesn't exist bde dlf f4. copy the folders we backed up to OLD versionsegh gX:ij ik5kklm lrno n4p  alis plq qbrs ro 0 thefolder theFolder smt t: oo 0 sourcefolder sourceFoldermuv ur"wx wI yz .earsffdralis afdr ym  afdrdocsz {  from {m  fldmfldu xo 0 targetfolder targetFolderv| |O#5}~ }I'4 .coremoveobj obj 4'+  cfol o)* 0 sourcefolder sourceFolder  insh 4,0  cfol o./ 0 targetfolder targetFolder ~m#$ 0 thefolder theFolder jo 0 folderlist folderListh l;;[ l i I &0symlinkrecordingssymlinkRecordings o 0 indexlist indexList o 0thedisktheDisk o 0 cleaneddb cleanedDB YH k C r  n  4  cobj o 0 index_item o  0 indexlist indexList o 0 dbselection dbSelection l E? use the indexes to find the POSIX paths to the folder location q "0targetposixpathtargetPOSIXPath "0sourceposixpathsourcePOSIXPath l  in the archive r" I  0 escapespaces escapeSpaces n 4  cobj m n 4  cobj o 0 dbselection dbSelection o 0 cleaneddb cleanedDB o "0targetposixpathtargetPOSIXPath l## XR use the disk name and directory name to create the name of the file on the backup r#7 b#5 b#- b#+ m#$  /Volumes/ I$* 0 escapespaces escapeSpaces o%& 0thedisktheDisk m+, / l-4 n-4 414  cobj m23 n-1 4.1  cobj o/0 0 dbselection dbSelection o-. 0 cleaneddb cleanedDB o "0sourceposixpathsourcePOSIXPath l88 *$ symlink the backup into the archive I8C .sysoexecTEXTTEXT b8? b8= b8; m89  ln -s  o9: "0sourceposixpathsourcePOSIXPath m;<   o=> "0targetposixpathtargetPOSIXPath 0 index_item m l n 1  leng o 0 indexlist indexList l i I 0 escapespaces escapeSpaces o 0 the_string k0 r m  o 0 new_string q 0j Y0 k+ r n 4  cobj o 0j o 0 the_string o 0the_char Z+ = o 0the_char 1  spac r# b! o 0 new_string m  \  o 0 new_string r&+ b&) o&' 0 new_string o'( 0the_char o 0 new_string 0j m l  n  1  leng o 0 the_string  l       0 exportdvd exportDVD 0 pickthedisk pickTheDisk 0 copytodisk copyToDisk $0backuprecordingsbackUpRecordings &0symlinkrecordingssymlinkRecordings 0 escapespaces escapeSpaces .aevtoappnull**** V 0 exportdvd exportDVD "0selectedindexesselectedIndexes 0programstoburnprogramsToBurn 0 programnames programNames 0 sizeoffiles sizeOfFiles 0 cleaneddb cleanedDB "0selectedindexesselectedIndexes 0programstoburnprogramsToBurn 0 programnames programNames 0 sizeoffiles sizeOfFiles 0 cleaneddb cleanedDB 0thedisktheDiskp}  prmp  empL .gtqpchltTEXT@@TEXT  rslt .sysodlogaskrTEXT 0 pickthedisk pickTheDisk 0 copytodisk copyToDisk  min 0okSe WXhOf j OfY**j+ EO*+ O nel oOael Oe  0 pickthedisk pickTheDisk 0disklistdiskList 0thedisktheDisk~}|{zyxwv  cdis ~ pnam }.miscactvnullnull | prmp {.gtqpchltTEXT@@TEXT z rslt y btns x.sysodlogaskrTEXT w.aevtquitnullobj v cobjG *-,EUO)*j UOl Ofkvl O)*j UYk/EO utsr u0 copytodisk copyToDisktqqponm p0thedisktheDisk o0 thefolders theFolders n0 theindexes theIndexes m0 cleaneddb cleanedDBslkjihgfe l0thedisktheDisk k0 thefolders theFolders j0 theindexes theIndexes i0 cleaneddb cleanedDB h0i g0 thefolder theFolder f0 sourcefolder sourceFolder e0 targetfolder targetFolderdcba`_!*^]\[ZYXWVU d.miscactvnullnull c cdis b.aevtodocnullalis a leng ` cobj _ alis^ ] min \ cfol [ insh Z alrp Y savoyes X W.coreclon******** V$0backuprecordingsbackUpRecordings U&0symlinkrecordingssymlinkRecordingsrp*j O*/j UO@k,Ekh/EO*%/EO*%/EO n*/ oU[OYO-EUO*k+O*m+T]SRQ T$0backuprecordingsbackUpRecordingsSPPO O0 folderlist folderListRNMLK N0 folderlist folderList M0 thefolder theFolder L0 sourcefolder sourceFolder K0 targetfolder targetFolder JIHGtFEDCBA@ J kocl I cobj H.corecnte******** G alis F afdrdocs E from D fldmfldu C.earsffdralis afdr B cfol A insh @.coremoveobj obj Q=9[l kh*%/EOl EO*/*/l U[OYOP?>=< ?&0symlinkrecordingssymlinkRecordings>;;:98 :0 indexlist indexList 90thedisktheDisk 80 cleaneddb cleanedDB=7654321 70 indexlist indexList 60thedisktheDisk 50 cleaneddb cleanedDB 40 index_item 30 dbselection dbSelection 2"0targetposixpathtargetPOSIXPath 1"0sourceposixpathsourcePOSIXPath 0/.-, 0 leng / cobj. -0 escapespaces escapeSpaces ,.sysoexecTEXTTEXT<IGk,Ekh/EO*//k+EO*k+%%/k/%EO%%%j [OY+*) !( +0 escapespaces escapeSpaces*'"'"& &0 the_string) %$#" %0 the_string $0 new_string #0j " 0the_char!!  ! leng  cobj  spac(1EO+k,Ekh/EO %EY%E[OY#$% .aevtoappnull**** #k&&''W(())**++;,,@--u..y//~008$  0 theprograms thePrograms 0 programssize programsSize 0 thenameslist theNamesList "0thedisplaynamestheDisplayNames 0 therepository theRepository 0 searchkey searchKey 0 theitemindex theItemIndex 0 theprogram theProgram 0i 0olddelimoldDelim 0dbitemdbItem 0 indexlist indexList 0thefiletheFile%6$   0 dvd_capacity DVD_CAPACITY  cPrg 0 theprogramdb theProgramDB  Rurl  TEXT  kocl  cobj .corecnte********  Titl 0thetitletheTitle  Epis 0 theepisode theEpisode  Unqu 0 theuniqueid theUniqueID .sysoexecTEXTTEXT 0 thedirname theDirName 0thepaththePath  psxp 0 theposixpath thePOSIXPath 0thedisplaynametheDisplayName .aevtquitnullobj  cfol 0realeyetvitemsrealEyeTVItems .miscactvnullnull  leng  txdl  citm 0 itemparts itemParts 0 cleaneddb cleanedDB 0dbkeydbKey 0 thenicename theNiceName  file  pnam 0filelistfileList 0filesindirsizefilesInDirSize .sysonfo4asfe****  ptsz 0 thefilesize theFileSize 0 exportdvd exportDVD EO*-EOjEOjvEOjvEOjvEO*,&EO[l kh,EO,EO,E`Oa_%a%j E`O_%E`O_a,E`OE`Oaa%%a%E`YhO_____av6F[OYO*j UOa*a/a-E` UO)*j !UOUk_ a",Ekh*a#,EOa$*a#,FO_ /&a%-E`&O_&_&a",k/_ /FO*a#,F[OYOjvE`'OPk_ a",Ekh_ /EO1[l kh k/E`(O_( _'6FOYh[OY[OYOjvEOk_'a",Ekh_'/k/E`O_'/i/E`)O_'/a*/E`Oak*a_/_*a+-a,,E`-WX./hOjE`0O<_-[l kh *a+_a1%%/j 2a3,E`4O_0_4E`0[OYUUO)*j !UO_0/*_'a*+5O_kvEO_)kvEO_0EOkvEY_6FO_)6FO6FO_0E[OYOj*_'a*+5Yhascr ޭFJ5CFeFWPosDPosLL 8__PAGEZERO__TEXT __text__TEXT(xx__cstring__TEXT-__picsymbol_stub__TEXT.,,$__DATA0 __data__DATA0 __la_symbol_ptr__DATA0 4  __nl_symbol_ptr__DATA0T T__dyld__DATA0d d__common__DATA0<8__LINKEDIT@0 /usr/lib/dyld d<*/System/Library/Frameworks/CoreServices.framework/Versions/A/CoreServices 4| P,@,A 8H=? Lx,A,@xxx8HH|!B<8c\8@H}@| x|N!h8!`|N =`k0d,AN 8N8`-8`8D8`;8D= 0d| =aN =`k0h}iN |!|> x~x|8`8(H|`x@>@x >@| >@8( @8`-H)}8`-@H!|N |!|> x~x|8H8`-Hِ~@8@D>D ,@Hx>D))x| @L>D))|| @4>D H~D>H  >H ,(AH>D)8 DK|8`-@HH,A4>H ,A>H ~H| x|N!~HH!|N |!|> xBH9=?) @@,A>@ T>(@H=?ixH=?itH!|N |9 8!aD8a@B!A!@Hh8!`|N <`ap? >l?@A @lB B<6 After the files have been burnt to DVD and symlinked,ACD ClE E& stop EyeTV and then restart it.DFG FlGHI HlJ J+% extract the program data from EyeTV.IKL KlM MQK The "unique id" is a floating-point number generated by EyeTV to uniquely LNO NlP PNH name each recording. We'll use Perl to convert this to its hexadecimal OQR QlS SYS representation (which is how EyeTV uses it to name the recordings in the archive).RTU TlV Vf` We'll use this to build a list of lists that maps the hex unique id to the program information.UWX Wl Y YO Z[ Zk\\]^ ]q__` 0 theprograms thePrograms`a 0 programssize programsSizeab 0 thenameslist theNamesListbc "0thedisplaynamestheDisplayNamescd 0 therepository theRepositoryde 0 searchkey searchKeye 0 theitemindex theItemIndex^fg frhi h2  cPrg io 0 theprograms theProgramsgjk jrlm lm mo 0 programssize programsSizekno nrpq pJ qo 0 thenameslist theNamesListors rr!tu tJ uo "0thedisplaynamestheDisplayNamessvw vr"&xy xJ"$ yo 0 theprogramdb theProgramDBwz{ zr'.|} |c',~ ~1'*  Rurl m*+  TEXT }o 0 therepository theRepository{ X/ k? r?D n?B 1@B  Titl o?@ 0 theprogram theProgram o 0thetitletheTitle rEJ nEH 1FH  Epis oEF 0 theprogram theProgram o 0 theepisode theEpisode rKR nKN 1LN  Unqu oKL 0 theprogram theProgram o 0 theuniqueid theUniqueID rSf lSb ISb .sysoexecTEXTTEXT bS^ bSZ mSV perl -e 'printf "%016x", oVY 0 theuniqueid theUniqueID mZ] ' o 0 thedirname theDirName rgp bgl ogh 0 therepository theRepository ohk 0 thedirname theDirName o 0thepaththePath rq| lqx nqx 1tx  psxp oqt 0thepaththePath o 0 theposixpath thePOSIXPath r} o}~ 0thetitletheTitle o 0thedisplaynametheDisplayName Z > o 0 theepisode theEpisode m  r b b b o 0thetitletheTitle m  ( o 0 theepisode theEpisode m ) o 0thedisplaynametheDisplayName l 82 first item is the key, rest are associated values r J o 0 thedirname theDirName o 0thetitletheTitle o 0 theepisode theEpisode o 0 theuniqueid theUniqueID o 0thepaththePath o 0 theposixpath thePOSIXPath o 0thedisplaynametheDisplayName l n ; o 0 theprogramdb theProgramDB 0 theprogram theProgram o23 0 theprograms thePrograms I .aevtquitnullobj  [m null߀ EyeTV.app@聿ȿpO)( zEyTValis8flatbox H+ EyeTV.app5J Applications{B|flatbox:Applications:EyeTV.app EyeTV.appflatboxApplications/EyeTV.app/X l l _Y Now we need to look at the actual contents of the archive on disk and pick out only the  l UO programs that are associated with directories, as we might have exported some  l  in a previous run.  l O r l n 2  cfol 4  cfol o 0 therepository theRepository o 0realeyetvitemsrealEyeTVItems mnull߀ j Finder.app@聿ȿpO)( zMACSalisbflatbox H+ j Finder.app25W CoreServices{B5 j b a.flatbox:System:Library:CoreServices:Finder.app Finder.appflatbox&System/Library/CoreServices/Finder.app/ l O I .miscactvnullnull f l l ?9 strip out the hex directory names from the folder names. l; Y; k6 q 0olddelimoldDelim   r   1  txdl  o~ ~0olddelimoldDelim    r m : 1} } txdl r n 2| | citm l{ c n 4 z z cobj o  y y0i o x x 0realeyetvitemsrealEyeTVItems mw w TEXT{ ov v0 itemparts itemParts r. !  n'"# "4'u$ u cobj $l&%t %\&&' &l$(s (n$)* )1 $r r leng *o q q0 itemparts itemPartss 'm$%ppt #oo o0 itemparts itemParts !n+, +4*-n- n cobj -o+,m m0i ,o'*l l 0realeyetvitemsrealEyeTVItems.k .r/6/0 /o/0j j0olddelimoldDelim 0105i i txdlk 0i mhh n12 11g g leng 2of f 0realeyetvitemsrealEyeTVItems34 3leded456 5lc7c 7PJ extract the items in the DB that correspond to the folders we just found.689 8lb:b :% these are eligible for export.9;< ;l<B=a =r<B>? >J<>`` ?o_ _0 cleaneddb cleanedDBa<@A @lCB^ BYCC]DE\ CkTFFGH GrT\IJ InTZKL K4WZ[M [ cobj MoXYZ Z0i LoTWY Y 0realeyetvitemsrealEyeTVItems JoX X0 searchkey searchKeyHNW NX]OVP OkmQQRS RrmuTU TnmqVW V4nqUX U cobj XmopTT WomnS S0dbitemdbItem UoR R0dbkeydbKeySYQ YZvZ[PO Z=v{\] \ovyN N0dbkeydbKey ]oyzM M0 searchkey searchKey [k~^^_` _r~ab ao~L L0dbitemdbItem bncd c; doK K0 cleaneddb cleanedDB`eJ eSJPOQ V0dbitemdbItem Po`aI I0 theprogramdb theProgramDBW ]0i DmFGHH EnGOfg f1JNG G leng goGJF F 0realeyetvitemsrealEyeTVItems\^Ahi hlEDEDijk jlClC lLF we could sort the items by display name here; left out to shorten thekmn mlBoB o script for claritynpq plA@A@qrs rl?t? t3- build a DVD-ful of programs, sorted by name.suv ulw> wqxx=< =0 indexlist indexList<>vyz yl{; {r|} |J:: }o9 90 indexlist indexList;z~ ~l8 Y76 k l55 :4 extract what we named the program (item 1) and what l44 71 EyeTV named it (item 2) for the current program. r n 43 3 cobj m22 n 41 1 cobj o0 00i o/ /0 cleaneddb cleanedDB o. .0 thedirname theDirName r l- n 4, , cobj m++ n 4* * cobj o) )0i o( (0 cleaneddb cleanedDB- o' '0 thenicename theNiceName r n 4& & cobj m%% n 4$ $ cobj o# #0i o" "0 cleaneddb cleanedDB o! !0thepaththePath l   l QK find all the files in the EyeTV archive directory for the current program. l UO this includes any clips made from this program, plus any EyeTV internal files. OG OF kE Q r l n 1  pnam 2  file o 0filelistfileList R .ascrerr ******** l :4 run through all the files and total up their sizes. r m o  0filesindirsizefilesInDirSize XE k@ r4 n0 1,0  ptsz l, I,  .sysonfo4asfe**** 4(   file l' b' b% o! 0thepaththePath m!$ : o%& 0thefiletheFile   o 0 thefilesize theFileSize r5@ [5< o58  0filesindirsizefilesInDirSize o8; 0 thefilesize theFileSize o  0filesindirsizefilesInDirSize 0thefiletheFile o  0filelistfileList 4  cfol o 0thepaththePath m OHR ILQ .miscactvnullnull fHI lSS D> if all this fits on the current DVD, add it to the name list. lSS E? otherwise, copy all these to the current DVD and burn it, then lSS  reset the list. ZS @SZ lSX [SX oST 0 programssize programsSize oTW 0filesindirsizefilesInDirSize oXY 0 dvd_capacity DVD_CAPACITY k] I]k 0 exportdvd exportDVD o^_ 0 indexlist indexList o_` 0 thenameslist theNamesList o`a "0thedisplaynamestheDisplayNames oab 0 programssize programsSize obe 0 cleaneddb cleanedDB rls Jlq    olo 0thepaththePath o 0 thenameslist theNamesList   rt{   Jty otw 0 thenicename theNiceName o "0thedisplaynamestheDisplayNames  r| o| 0filesindirsizefilesInDirSize o 0 programssize programsSize r J o 0i o 0 indexlist indexList k r o 0thepaththePath n ;  o 0 thenameslist theNamesList!" !r#$ #o 0 thenicename theNiceName $n%& %; &o "0thedisplaynamestheDisplayNames"'( 'r)* )o 0i *n+, +; ,o 0 indexlist indexList(- -r./ .[01 0o 0 programssize programsSize 1o 0filesindirsizefilesInDirSize /o 0 programssize programsSize 70i m l2 2n34 31  leng 4o 0 cleaneddb cleanedDB6856 5l7 7 handle any leftovers689 8l: :Z;< ;>=> =o 0 programssize programsSize >m <I? 0 exportdvd exportDVD?@A @o 0 indexlist indexListABC Bo 0 thenameslist theNamesListCDE Do "0thedisplaynamestheDisplayNamesEFG Fo 0 programssize programsSizeGH Ho 0 cleaneddb cleanedDB9IJ IlJKL KlM M Handlers --LNO NlOPQ PlR R2, Actually burn the programs supplied to DVD.QST SiUV UIW 0 exportdvd exportDVDWXY Xo "0selectedindexesselectedIndexesYZ[ Zo 0programstoburnprogramsToBurn[\] \o 0 programnames programNames]^_ ^o 0 sizeoffiles sizeOfFiles_` `o 0 cleaneddb cleanedDB VkRaabc bld dUO hack: shows the list of programs with OK and Cancel. We ignore any selections.cef elg ga[ if "cancel" is selected, we see if we should give up completely or just skip this diskful.fhi hQjk jI lm .gtqpchltTEXT@@TEXT lo 0 programnames programNamesmno  prmp nmp p#Burn these recordings to DVD?oq  empL qm  boovtrue kR .ascrerr ********irs rZOtuv t=wx w1  rslt xm  boovfals uk$yyz{ zI!| .sysodlogaskrTEXT |m} }82"OK" to skip this set, "Cancel" to quit altogether{~ ~L"$ m"#  boovfals vk'O l'' <6 go ahead and copy the ones that will fit on this disk r'. I', 0 pickthedisk pickTheDisk o 0thedisktheDisk I/8 0 copytodisk copyToDisk o01 0thedisktheDisk o12 0programstoburnprogramsToBurn o23 "0selectedindexesselectedIndexes o34 0 cleaneddb cleanedDB l99 C= at this point the programs are located on the disk as far as l99 E? EyeTV is concerned. We have to burn it to completely make sure l99  everything is OK t9E I=D .sysodlogaskrTEXT m=> "Burn the DVD, then click OK. 0ok m?@  boovtrue l9< ]9< m9: 1:;  min  IFO .sysodlogaskrTEXT mFI [UPut in a new DVD and label it. Click OK when you're ready to archive more recordings. 0ok mJK  boovtrues LPR mPQ  boovtrueT l l >8 find the online disks so the backup disk can be chosen. l 0* It's up to you to actually pick your DVD! i I 0 pickthedisk pickTheDisk kF O  r  n  1 ~ ~ pnam 2} } cdis o| |0disklistdiskList m O  I{zy {.miscactvnullnullzy f  Ix x.gtqpchltTEXT@@TEXT ow w0disklistdiskListvu v prmp m "Choose the disk for backups:u l tsts Z Cr = # 1 !q q rslt m!"p p boovfals k&: I&/o o.sysodlogaskrTEXT m&' Cancelling backup runnm n btns J(+l m() OKlmk O0: I49jih j.aevtquitnullobj ih f01kr r=C n=A 4>Ag g cobj m?@ff 1=>e e rslt od d0thedisktheDisk lDDcbcba LDF oDE` `0thedisktheDiska l_^_^ l]] B< copyToDisk copies the entirety of the listed directories to l\\  the supplied volume. i  I[Z [0 copytodisk copyToDisk oY Y0thedisktheDisk oX X0 thefolders theFolders oW W0 theindexes theIndexesV oU U0 cleaneddb cleanedDBVZ ko O k I TSR T.miscactvnullnullSRQ I PO P.aevtodocnullalis 4 N N cdis  o M M0thedisktheDiskOQ m   lLKLK    YUJI k!P r!' n!% 4"%H H cobj o#$G G0i o!"F F0 thefolders theFolders oE E0 thefolder theFolder r(0 4(.D D alis l*-C b*- o*+B B0 thefolder theFolder  m+,! !:C oA A0 sourcefolder sourceFolder"# "r19$% $417@& @ alis &l36'? 'b36() (o34> >0thedisktheDisk )m45* *:? %o= =0 targetfolder targetFolder#+, +l::<;<;,-: -O:P./ .t>O01 0IBN923 9.coreclon******** 24BF84 8 cfol 4oDE7 70 sourcefolder sourceFolder3656 6 insh 5oGH5 50 targetfolder targetFolder6473 4 alrp 7mIJ2 2 savoyes 3 1l>A81 8]>A9: 9m>?00 :1?@/ / min 1 /m:;: J0i m.. n;< ;1- - leng <o, ,0 thefolders theFoldersI => =lVV+?+ ? find folders on DVD>@A @OV_BC BeZ^D DnZ^EF E2[]* * cfol FoZ[) )0 targetfolder targetFolder CmVWAGH Gl``(I( I" move folders out of archiveHJK JI`f'L& '$0backuprecordingsbackUpRecordingsLM% Moab$ $0 thefolders theFolders%&KNO Nlgg#P# P82 symlink folders on DVD to archive (same dir name)OQ" QIgo!R !&0symlinkrecordingssymlinkRecordingsRST Sohi 0 theindexes theIndexesTUV Uoij 0thedisktheDiskVW Wojk 0 cleaneddb cleanedDB "XY XlYZ[ Zi \] \I^ $0backuprecordingsbackUpRecordings^_ _o 0 folderlist folderList ]k<``ab alc c3- make the Holding folder if it doesn't exist bde dlf f4. copy the folders we backed up to OLD versionsegh gX:ij ik5kklm lrno n4p  alis plq qbrs ro 0 thefolder theFolder smt t: oo 0 sourcefolder sourceFoldermuv ur"wx wI yz .earsffdralis afdr ym  afdrdocsz {  from {m  fldmfldu xo 0 targetfolder targetFolderv| |O#5}~ }I'4 .coremoveobj obj 4'+  cfol o)* 0 sourcefolder sourceFolder  insh 4,0  cfol o./ 0 targetfolder targetFolder ~m#$ 0 thefolder theFolder jo 0 folderlist folderListh l;;[ l i I &0symlinkrecordingssymlinkRecordings o 0 indexlist indexList o 0thedisktheDisk o 0 cleaneddb cleanedDB YH k C r  n  4  cobj o 0 index_item o  0 indexlist indexList o 0 dbselection dbSelection l E? use the indexes to find the POSIX paths to the folder location q "0targetposixpathtargetPOSIXPath "0sourceposixpathsourcePOSIXPath l  in the archive r" I  0 escapespaces escapeSpaces n 4  cobj m n 4  cobj o 0 dbselection dbSelection o 0 cleaneddb cleanedDB o "0targetposixpathtargetPOSIXPath l## XR use the disk name and directory name to create the name of the file on the backup r#7 b#5 b#- b#+ m#$  /Volumes/ I$* 0 escapespaces escapeSpaces o%& 0thedisktheDisk m+, / l-4 n-4 414  cobj m23 n-1 4.1  cobj o/0 0 dbselection dbSelection o-. 0 cleaneddb cleanedDB o "0sourceposixpathsourcePOSIXPath l88 *$ symlink the backup into the archive I8C .sysoexecTEXTTEXT b8? b8= b8; m89  ln -s  o9: "0sourceposixpathsourcePOSIXPath m;<   o=> "0targetposixpathtargetPOSIXPath 0 index_item m l n 1  leng o 0 indexlist indexList l i I 0 escapespaces escapeSpaces o 0 the_string k0 r m  o 0 new_string q 0j Y0 k+ r n 4  cobj o 0j o 0 the_string o 0the_char Z+ = o 0the_char 1  spac r# b! o 0 new_string m  \  o 0 new_string r&+ b&) o&' 0 new_string o'( 0the_char o 0 new_string 0j m l  n  1  leng o 0 the_string  l       0 exportdvd exportDVD 0 pickthedisk pickTheDisk 0 copytodisk copyToDisk $0backuprecordingsbackUpRecordings &0symlinkrecordingssymlinkRecordings 0 escapespaces escapeSpaces .aevtoappnull**** V 0 exportdvd exportDVD "0selectedindexesselectedIndexes 0programstoburnprogramsToBurn 0 programnames programNames 0 sizeoffiles sizeOfFiles 0 cleaneddb cleanedDB "0selectedindexesselectedIndexes 0programstoburnprogramsToBurn 0 programnames programNames 0 sizeoffiles sizeOfFiles 0 cleaneddb cleanedDB 0thedisktheDiskp}  prmp  empL .gtqpchltTEXT@@TEXT  rslt .sysodlogaskrTEXT 0 pickthedisk pickTheDisk 0 copytodisk copyToDisk  min 0okSe WXhOf j OfY**j+ EO*+ O nel oOael Oe  0 pickthedisk pickTheDisk 0disklistdiskList 0thedisktheDisk~}|{zyxwv  cdis ~ pnam }.miscactvnullnull | prmp {.gtqpchltTEXT@@TEXT z rslt y btns x.sysodlogaskrTEXT w.aevtquitnullobj v cobjG *-,EUO)*j UOl Ofkvl O)*j UYk/EO utsr u0 copytodisk copyToDisktqqponm p0thedisktheDisk o0 thefolders theFolders n0 theindexes theIndexes m0 cleaneddb cleanedDBslkjihgfe l0thedisktheDisk k0 thefolders theFolders j0 theindexes theIndexes i0 cleaneddb cleanedDB h0i g0 thefolder theFolder f0 sourcefolder sourceFolder e0 targetfolder targetFolderdcba`_!*^]\[ZYXWVU d.miscactvnullnull c cdis b.aevtodocnullalis a leng ` cobj _ alis^ ] min \ cfol [ insh Z alrp Y savoyes X W.coreclon******** V$0backuprecordingsbackUpRecordings U&0symlinkrecordingssymlinkRecordingsrp*j O*/j UO@k,Ekh/EO*%/EO*%/EO n*/ oU[OYO-EUO*k+O*m+T]SRQ T$0backuprecordingsbackUpRecordingsSPPO O0 folderlist folderListRNMLK N0 folderlist folderList M0 thefolder theFolder L0 sourcefolder sourceFolder K0 targetfolder targetFolder JIHGtFEDCBA@ J kocl I cobj H.corecnte******** G alis F afdrdocs E from D fldmfldu C.earsffdralis afdr B cfol A insh @.coremoveobj obj Q=9[l kh*%/EOl EO*/*/l U[OYOP?>=< ?&0symlinkrecordingssymlinkRecordings>;;:98 :0 indexlist indexList 90thedisktheDisk 80 cleaneddb cleanedDB=7654321 70 indexlist indexList 60thedisktheDisk 50 cleaneddb cleanedDB 40 index_item 30 dbselection dbSelection 2"0targetposixpathtargetPOSIXPath 1"0sourceposixpathsourcePOSIXPath 0/.-, 0 leng / cobj. -0 escapespaces escapeSpaces ,.sysoexecTEXTTEXT<IGk,Ekh/EO*//k+EO*k+%%/k/%EO%%%j [OY+*) !( +0 escapespaces escapeSpaces*'"'"& &0 the_string) %$#" %0 the_string $0 new_string #0j " 0the_char!!  ! leng  cobj  spac(1EO+k,Ekh/EO %EY%E[OY#$% .aevtoappnull**** #k&&''W(())**++;,,@--u..y//~008$  0 theprograms thePrograms 0 programssize programsSize 0 thenameslist theNamesList "0thedisplaynamestheDisplayNames 0 therepository theRepository 0 searchkey searchKey 0 theitemindex theItemIndex 0 theprogram theProgram 0i 0olddelimoldDelim 0dbitemdbItem 0 indexlist indexList 0thefiletheFile%6$   0 dvd_capacity DVD_CAPACITY  cPrg 0 theprogramdb theProgramDB  Rurl  TEXT  kocl  cobj .corecnte********  Titl 0thetitletheTitle  Epis 0 theepisode theEpisode  Unqu 0 theuniqueid theUniqueID .sysoexecTEXTTEXT 0 thedirname theDirName 0thepaththePath  psxp 0 theposixpath thePOSIXPath 0thedisplaynametheDisplayName .aevtquitnullobj  cfol 0realeyetvitemsrealEyeTVItems .miscactvnullnull  leng  txdl  citm 0 itemparts itemParts 0 cleaneddb cleanedDB 0dbkeydbKey 0 thenicename theNiceName  file  pnam 0filelistfileList 0filesindirsizefilesInDirSize .sysonfo4asfe****  ptsz 0 thefilesize theFileSize 0 exportdvd exportDVD EO*-EOjEOjvEOjvEOjvEO*,&EO[l kh,EO,EO,E`Oa_%a%j E`O_%E`O_a,E`OE`Oaa%%a%E`YhO_____av6F[OYO*j UOa*a/a-E` UO)*j !UOUk_ a",Ekh*a#,EOa$*a#,FO_ /&a%-E`&O_&_&a",k/_ /FO*a#,F[OYOjvE`'OPk_ a",Ekh_ /EO1[l kh k/E`(O_( _'6FOYh[OY[OYOjvEOk_'a",Ekh_'/k/E`O_'/i/E`)O_'/a*/E`Oak*a_/_*a+-a,,E`-WX./hOjE`0O<_-[l kh *a+_a1%%/j 2a3,E`4O_0_4E`0[OYUUO)*j !UO_0/*_'a*+5O_kvEO_)kvEO_0EOkvEY_6FO_)6FO6FO_0E[OYOj*_'a*+5Yhascr ޭXpwpc8 CarbonStub@( d?<NV/v/0 CFBundleDevelopmentRegion English CFBundleIconFile 150 CFBundleInfoDictionaryVersion 6.0 CFBundlePackageType APPL CFBundleSignature aplt LSPrefersCarbon cicnscICN#/????@il329 (/iǤ9n n n{ n̛1 nȷa mʳ=Wʴͩ? KvZiɴֲBx}tyȴE#Dw5ۯ);ƒɫN Aε6  .qճΩo. 9uýڹֲu9:˽ڽ:Ÿpuūփ'pʿuy³ؼn'DжpyђB!fȚwuyڵc  ;ζt~ψ: ]߽߯Z 3Ѷҁ2 VT/.SQ '.f7k k kw kƖ/ k²^ jĮ;TįǤ= JsXeïϭ@tyqu¯ڵC"Bt3Ԫ(9æL AȰ6  .qϭϩo. 9uýԴֲu9:˽ٻڽ:Ÿlq⿦փ'pʿqvؼn'DгmyђB!f•tryڵc  ;ζq~ψ: ]߽߯Z 3ѷҁ2 VT/.SQ '.gġ8l l ly lɘ0 lŴ` kǰ<VDZʧ> KtYgƱүAvzrwıݷD#Cv4׬(:ÏŨM A˲6  .qүϩo. |9uý׶ֲu9:˽۽ڽ:Ÿns¨փ'pʿsxؼn'DеoyђB!fėutyڵc  ;ζr~ψ: ]߽߯Z 3Ѷҁ2 VT/.SQl8mk '.sؓ$|{~}})}]}:~: s:'9.7+/+FT"a-)mn) 1zz1 7҆7 QQ  .ހ. NN'vv'EE"ll">=bb 6Ϗ6 8ics#H@??is32e bGl~ lI`˴U A|ҵW dT @ %`>JҾJ>ѳ᫶ɔ=8ŭxח7hvۺf :ɶڎ9 ^`7u5 _Ei{iG]ůR ?y̰ĻU aQ > %]>J˻J>ѳۧɔ=8Ƭtח7hžrۺf :ȳڎ9 ^`7u5 `Fk| kH_ȱS @zβǽV bR ? %^=JμJ>ѳݩɔ8Ŭvחhtۺf :ȴڎ9 ^`7u5s8mko@~~N~_ pZ SKrOO FG SS88__00UUit32MU ʷ ʶ Ϸ ʷ ʵ Ϸ ʷ ɵ ζ ʷ ɵļ ζ Ƽ ͸ ľ ɶ ü ζ ż ͸ Ľ ɶ ü ʵ ż ͷ Ľ ɶ ü ʵ ż Ϸ Ž ʷĽ ɵļ ζŽ ʷĽ ɵļ η Žƀ κĽƀ ̡kcadjļɊkba`abcbcƽ4nkfbbcegiigqľ}wtngddehjkmqprü8}|wqkgghklnqtvu~ż9|{unjikmoquwy{wĽzsonnqtvy{}~ü<ytqruxz|~ż=~xvvxz}ƽ|Ľƀ? 2 ƀB–C̢ܺšƀӻ0ʬBճŬAƷƿϽ6ǿ?׿º>û=³ý<Ķž:Ƹƾ9Ƚ7û6¼ƀļ8ƾ9#=»ƾ;ļ€Ȁ̀ľ˫π6žπЁ˸Ѐ' φҀ7º́ЅҀǪҀ>»Ё҃ӁȦӂ(ĽӂԃΡӄ*žҁӄΟԅHƿӀԆишG½~рԉÔъsru»ԋǐ׌2uxpnuûՍ̌ӌÿ1y|qqrpxĽԊ͉Ӌ%}trrsspx"žԉѳ xׇ¿1{vttsstpuƿՈ ӿx kׅ|zxvvt'pxՆ ˣk (xֆI}{ywvuttq{üԄ ζx(QՀօG|zxvuutpx¼Ԅ ǛQ oքE}{ywvstpĽԂ ͯo D~ׄC½}{yvtuvs˿}Ղ Ô~D fׄ@ÿ}yvuvvpx~Ձ ͪf 9xׅ¦{x vqpqyz|Ձ Ͼx9 `ׅ;}|{xtokvvz}Հ ̤` -tׄԀC˿|wrmfmrw|Ϲt- X~؄ր.¯ù}wpkefpt{Ҁ˝~X $nׄBȽƹ}vqkgakpyϴn$ Mz}Ӏׁ@Ƕ}vqjjginyƗ}zMPi}ƺ~vpgthpyѮ}iLFv|ʻvon|fpyƐ|vFJb{}îvodp}Ш}{bF9rzȿDzywcrzr9DZyyŲ}`wТyyZ@/oy÷oh}սyo/{xxz{}~~~# 2A)޺CƝպ:̻:ħBήſAȸ6?ϸü>Ϻý=мý<ѽƿ:9¸7ž½6ľĽ7ž̀,) :»=Ľƾ;ľȀ̀6ž˫π6πЁ˸Ѐ' ºφҀ7¼ˁЅҀǪҀ>üЁ҃ӁȦӂ(žӂԃΡӄ*ҁӄΟԅHӀԆишG½{рԉÔъrorüԋǐ׌2sumkqĽՍ̌ӌÿ1wymnomuĿԊ͉Ӌ%||pnoppmt"ƿԉѳ xׇ¿wsq*pplrՈ ӿx kׅJyvtsrqpqmu»Ն ˣk (xֆ|ywutrq&mw½Ԅ ζx(QՀօG{xvusrrqmuĽԄ ǛQ oքE|zxutspqmƿԂ ͯo D~ׄC½}zxusqrspź|Ղ Ô~D fׄ@ÿ}yusrssmw~Ձ ͪf 9xׅ=¢{wuttrmlpyz|Ձ Ͼx9 `ׅ;}zxwtqlhvvz}Հ ̤` -tׄԀC˿~|xsojcmrw|Ϲt- X~؄ր.ªýzsmhbfpt{Ҁ˝~X $nׄBȹzsmhdakpyϴn$ Mz}Ӏׁ@ƿzrngffinyƗ}zMPi}zrmd~shpyѮ}iLFv|Ķ{skjxfpyƐ|vFJb{}ν}sl|dp}Ш}{bF9rzȿvtbrzr9DZyyοy_wТyyZ@/oy÷ǻmh}սyo/}zz{}? 2ABCɠٺBл0ǪBҰAó¼˺ˀ ü?һſ>ҽӿˀ#<»:µûźˀ%Ľ7ſ6ǿ78û Ҁ ý:Ľ=ƿƾ;Ȁ̀6˫π6»πЁ˸Ѐ8ĽφҀ7ſ́ЅҀǪҀ>ſЁ҃ӁȦӂ(ӂԃΡӄ*»ҁӄΟԅH¼ӀԆишG½|ýрԉÔъspsƾԋǐ׌2tvomsՍ̌ӌÿ1xzooqnvԊ͉Ӌ%|~rppqrnv"»ԉѳ xׇ¿xtr*qrnsüՈ ӿx kׅJ{wvutsrrnvľՆ ˣk (xֆ~{ywuts&oxԄ ζx(QՀօG}zxvutssowǿԄ ǛQ oքE}{ywutsroԂ ͯo D~ׄC½~{ywtsstrǼ}Ղ Ô~D fׄ@ÿ~zwtstunw~Ձ ͪf 9xׅ£}yv tonqyz|Ձ Ͼx9 `ׅ;{zxvsmivvz}Հ ̤` -tׄԀC˿~zvpkdmrw|Ϲt- X~؄ր.¬|tojcfpt{Ҁ˝~X $nׄBȻö|tojeakpyϴn$ Mz}Ӏׁ@ó{tohhginyƗ}zMPi}÷{tnethpyѮ}iLFv|Ƹ|tmkzfpyƐ|vFJb{}um}dp}Ш}{bF9rzȿïwvcrzr9DZyy{`wТyyZ@/oy÷ɽnh}սyo/KK>. %5DeeD5% ,LK>/  %5FfeE5% -=JJ=- $4C__C4$ +;II;+ "2AXXA2" )9G~~G9)  1@RR@1   (8FppF8(  />OO>/  &6EiiE6& -:@:-  &    apltFREFICN#APPLJ5C$h#h.l. scptjCFRgvscszCODESIZEhfdrplsticnsBNDLFREFapltWPosDPosF##:#E#JL #`L$Bud1%  @ @ @ @ E%DSDB` @ @ @