diff --git a/HBC/META.XML b/HBC/META.XML deleted file mode 100644 index 4f222f6d..00000000 --- a/HBC/META.XML +++ /dev/null @@ -1,10 +0,0 @@ - - - USB Loader GX - USB Loader GX Team - 1.0 - 20090118030000 - Loads games from USB-devices - USB Loader GX is a libwiigui based USB iso loader with a wii-like GUI. You can install games to your HDDs and boot them with shorter loading times. The interactive GUI is completely controllable with WiiMote, Classic Controller or GC Controller. Features are automatic widescreen detection, coverdownload, parental control, theme support and many more. -Coders: dimok/nIxx/cyrex/giantpune/Hungyip84/NeoRame/WiiShizzza/ardi. - \ No newline at end of file diff --git a/HBC/icon.png b/HBC/icon.png deleted file mode 100644 index 951057cb..00000000 Binary files a/HBC/icon.png and /dev/null differ diff --git a/Languages/danish b/Languages/danish deleted file mode 100644 index cbc0ba58..00000000 --- a/Languages/danish +++ /dev/null @@ -1,173 +0,0 @@ -Specialthanksto = Special tak til -Favorite = Favorit -t3Coverst = 3D Covers -AppLanguage = Program Sprog -Areyousure = Er du sikker? -AutoPatch = AutoPatch -Keyboard = Tastatur -Back = Tilbage -Backgroundmusic = Baggrunds musik -BacktoHBCorWiiMenu = Tilbage til HBC eller Wii Menu -BacktoLoader = Tilbage til Loaderen -BacktoWiiMenu = Tilbage til HBC -BootStandard = Boot/Standard -BothBoth = Begge -Cantcreatedirectory = Kan ikke lave ny mappe -Cancel = Annullere -Cantbeformated = Kan ikke formatteres -Cantdelete = Kan ikke slettes: -ClicktoDownloadCovers = Klik for at Downloade Covers -Clock = Klokke -Continueinstallgame = Vil du blive ved med at installere spillet? -ConsoleDefault = Konsol Standard -Consoleshouldbeunlockedtomodifyit = Konsol skal vre lst op for ndre dette. -ConsoleLocked = Konsol lst -CorrectPassword = Korrekt Password -Couldnotinitializenetwork = Kunne ikke initialisere netvrk! -CouldnotopenDisc = Kunne ikke bne dvd -CouldnotinitializeDIPmodule = Kunne ikke initialisere DIP module! -CoverDownload = Cover Download -CoverPath = Cover Sti -CoverpathChanged = CoverSti ndret -Coverpathchange = CoverSti ndringer -Credits = Lavet af: -DiscImages = Dvdbilleder -DiscimagePath = Dvdbilleder sti -DiscpathChanged = DvdSti ndret -Discpathchange = DvdSti ndringer -DiscDefault = Spillets standard -Display = Skrm -Doyouwanttoformat = Vil du formattere?: -Doyoureallywanttodelete = Vil du virkelig slette: -Doyouwanttoretryfor30secs = Vil du prve igen? -Downloadingfile = Downloader fil: -DownloadBoxartimage = Downloade Boxart billede? -Downloadfinished = Download frdig -Error = Fejl! -BOOTERROR = BOOT FEJL -ErrorreadingDisc = Disken kunne ikke lses -ExitUSBISOLoader = Afslut USB Loader GX? -InitializingNetwork = Initialiserer Netvrk -InsertDisk = Indst en disk -InsertaWiiDisc = Indst en wii disk! -InsertaSDCardtodownloadimages = Indst et sd kort for at downloade billeder. -InsertaSDCardtosave = Indst et sd kort for at gemme. -InstallRenameandDeleteareunlocked = Alle USB Loader GX's funktioner er lst op. -Installerror = Installations fejl! -Installagame = Installer et spil? -Installinggame = Installerer spillet: -Failedtoboot = Kunne ikke start op: -FailedtomountfrontSDcard = Kunne ikke montere sd kort -FailedtosetUSB = Kunne ikke stte usb: -Failedformating = Formatteringen mislykkedes -filesnotfoundontheserver = Filerne blev ikke fundet p serveren! -filesleft = Fil(er) tilbage -FlipX = Flip-X -Force = Tving -Youneedtoformatapartition = Du m formattere en partition -Format = Format -Formattingpleasewait = Formatterer, vent venligst... -formated = Formatteret! -free = ledig -FreeSpace = Ledig plads -FullShutdown = Fuld shutdown -GameID = Spil ID -Games = Spil -Gameisalreadyinstalled = Dette spil er allerede installeret: -GameRegion = Region -GameSize = Spil strrelse -GoBack = G tilbage -//GotoPage = G til side -HowtoShutdown = Hvordan skal den slukkes? -Language = Sprog -Langchange = Sprog skift -Left = Venstre -LikeSysMenu = Ligesom wii menu -LoadingincIOS = Loader i cIOS249 -Lock = Ls -LockConsole = Ls Konsol -MP3Menu = MP3 Menu -Missingfiles = Manglende filer -Networkiniterror = Netvrket kunne ikke intialiseres -Next = Nste -No = Nej -Nofilemissing = Ingen filer mangler! -NoHDDfound = Ingen HDD fundet! -NoSDcardinserted = Intet SD-kort fundet! -Nopartitionsfound = Ingen partitioner fundet -NoUSBDevice = Intet USB apparat tilsluttet -NoWBFSpartitionfound = Ingen WBFS partition fundet -NormalCovers = Normale Covers -Normal = Normal -NotaWiiDisc = Ikke en Wii Disk -NoUSBDevicefound = Intet USB apparat fundet. -Notenoughfreespace = Ikke nok ledig plads! -notset = Ikke sat -of = af -OFF = Fra -OfficialSite = Officielle Side -ok = OK -ON = Til -Parentalcontrol = Forlder kontrol -Partition = Partition -Password = Password -PasswordChanged = Password ndret -Passwordhasbeenchanged = Passwordet er blevet ndret -Passwordchange = Password skift -PowerofftheWii = Sluk wii'en -Prev = Forrig -PromptsButtons = Prompts Buttons -ReloadSD = Genindls SD -RenameGameonWBFS = Omdb spil p WBFS -Restart = Genstart -Return = Tilbage -ReturntoWii = Vend tilbage til menuen -Right = Hjre -Rumble = Vibration -QuickBoot = Hurtig opstart -Save = Gem -SaveFailed = Gemningen mislykkedes -Specialthanksto = Speciel tak til -For = for -theUSBLoaderandreleasingthesourcecodethe = og for at gre deres source code tilgngelig -secondsleft = Sekunder tilbage -SelectthePartition = Vlg Partitionen -youwanttoformat = du vil formatter -settings = Indstillinger -ShutdowntoIdle = Almindeligt -ShutdownSystem = Sluk Totalt(Rdt lys) -Success = Succes: -Successfullyinstalled = Installationen lykkedes: -Successfullydeleted = Sletningen lykkedes: -SuccessfullySaved = Successfully Saved: -SystemDefault = System standard -ThemePath = TemaSti -ThemepathChanged = TemaSti ndret -Themepathchange = TemaSti mdringer -Try = Prv -Tooltips = Vrktjtips -Timeleft = Tid tilbage: -Unlock = Ls op -Uninstall = Afinstaller -USBLoaderisprotected = USB Loader GX er beskyttet -USBapparatnotfound = USB apparat ikke fundet -VideoMode = Video Mode -VIDTVPatch = VIDTV Patch -Volume = Lydstyrke -Waiting = Venter..... -WaitingforUSBapparat = Venter p USB apparat -WidescreenFix = Widescreen Fix -WiiMenu = Wii Menu -WrongPassword = Forkert Password -Yes = Ja -YoudonthavecIOS = Du har ikke cIOS222 -Japanese = Japansk -German = Tysk -English = Engelsk -French = Fransk -Spanish = Spansk -Italian = Italiensk -Dutch = Nederlandsk -SChinese = Simpelt Kinesisk -TChinese = Tradionelt Kinesisk -Korean = Koreansk \ No newline at end of file diff --git a/Languages/dutch b/Languages/dutch deleted file mode 100644 index 4b0eaf60..00000000 --- a/Languages/dutch +++ /dev/null @@ -1,171 +0,0 @@ -Specialthanksto = Speciale dank aan -t3Covers = 3D hoesjes -AppLanguage = Applicatietaal -Areyousure = Zeker weten? -AutoPatch = Automatisch patchen -Back = Terug -BacktoHBCorWiiMenu = Naar HBC of Wiimenu -BacktoLoader = Naar Loader -BacktoWiiMenu = Terug naar Wiimenu -BootStandard = Boot/Standaard -BothBoth = Beide -Cantcreatedirectory = Kan map niet maken -Cancel = Annuleren -Cantbeformated = Kan niet formatteren -Cantdelete = Kan niet verwijderen: -ClicktoDownloadCovers = Klik om hoesjes te downloaden -Clock = Klok -Continueinstallgame = Installatie van spel voortzetten? -ConsoleDefault = Consolestandaard -Consoleshouldbeunlockedtomodifyit = Aanpassen vereist vrijgeven console -ConsoleLocked = Console op slot -CorrectPassword = Correct wachtwoord -Couldnotinitializenetwork = Netwerk kan niet worden ingesteld -CouldnotopenDisc = Schijf kan niet worden geopend -CouldnotinitializeDIPmodule = DIP module kan niet worden ingesteld -CoverDownload = Hoesjes downloaden -CoverPath = Hoesjesmap -CoverpathChanged = Hoesjesmap gewijzigd -Coverpathchange = Hoesjesmap wijzigen -Credits = Credits -DiscImages = Discplaatjes -DiscimagePath = Discplaatjesmap -DiscpathChanged = Discplaatjesmap gewijzigd -Discpathchange = Discplaatjesmap wijzigen -DiscDefault = Discstandaard -Display = Weergeven -Doyouwanttoformat = Wil je dit formatteren: -Doyoureallywanttodelete = Wil je dit echt verwijderen: -Doyouwanttoretryfor30secs = 30 seconden lang opnieuw proberen? -Downloadingfile = Bezig met downloaden: -DownloadBoxartimage = Hoesjes downloaden? -Downloadfinished = Downloaden voltooid -Error = Fout! -BOOTERROR = BOOT FOUT -ErrorreadingDisc = Fout tijdens lezen van disc -ExitUSBISOLoader = USB Loader GX afsluiten? -InitializingNetwork = Netwerk instellen -InsertDisk = Voer een schijf in -InsertaWiiDisc = Voer een Wiischijf in -InsertaSDCardtodownloadimages = Voer een SD-kaart in voor de plaatjes -InsertaSDCardtosave = Voor een SD-kaart in voor het opslaan -InstallRenameandDeleteareunlocked = Alle functies van de USB-loader zijn vrijgegeven -Installerror = Installatiefout -Installagame = Spel installeren -Installinggame = Bezig met installeren: -Failedtoboot = Fout tijdens laden van: -FailedtomountfrontSDcard = Kan SD-kaart niet koppelen -FailedtosetUSB = Kan USB niet instellen: -Failedformating = Formatteren mislukt -filesnotfoundontheserver = Bestanden niet gevonden op de server -filesleft = bestanden resterend: -FlipX = X wisselen -Force = Afdwingen -Youneedtoformatapartition = Je moet een partitie formatteren -Format = Formatteren -Formattingpleasewait = Bezig met formatteren, even geduld -formated = geformatteerd! -free = beschikbaar -FreeSpace = Beschikbare ruimte -FullShutdown = Volledig -GameID = Spel ID -Games = Spellen -Gameisalreadyinstalled = Spel is reeds genstalleerd! -GameRegion = Regio -GameSize = Spelgrootte -GoBack = Ga terug -//GotoPage = Ga naar pagina -HowtoShutdown = Op welke manier uitschakelen? -Language = Taal -Langchange = Taal wijzigen -Left = Links -LikeSysMenu = Zoals systeemmenu -LoadingincIOS = Laden in Cios249 -Lock = Vergrendelen -LockConsole = Console vergrendelen -MP3Menu = MP3 Menu -Missingfiles = Ontbrekende bestanden -Networkiniterror = Network initialisatiefout -Neither = Geen -Next = Volgende -No = Nee -Nofilemissing = Alle bestanden compleet! -NoHDDfound = Geen harde schijf gevonden! -NoSDcardinserted = Geen SD-kaart gevonden! -Nopartitionsfound = Geen partities gevonden -NoUSBDevice = Geen USB-apparaat -NoWBFSpartitionfound = Geen WBFS partities gevonden -NormalCovers = Standaard hoesjes -Normal = Standaard -NotaWiiDisc = Geen Wiidisc -NoUSBDevicefound = Geen USB-apparaat gevonden -Notenoughfreespace = Onvoldoende vrije ruimte -notset = niet ingesteld -of = of -OFF = UIT -OfficialSite = Officile site -ok = ok -ON = AAN -Parentalcontrol = Ouderlijk toezicht -Partition = Partitie -Password = Wachtwoord -PasswordChanged = Wachtwoord gewijzigsd -Passwordhasbeenchanged = Het wachtwoord is gewijzigd -Passwordchange = Wachtwoord wijzigen -PowerofftheWii = Wii uitschakelen -Prev = Vorige -PromptsButtons = Weergave knoppen -ReloadSD = SD herladen -RenameGameonWBFS = Spel hernoemen op WBFS -Restart = Herstarten -Return = Terug -ReturntoWii = Terug naar Wiimenu -Right = Rechts -Rumble = Trillen -QuickBoot = Snelstarten -Save = Opslaan -SaveFailed = Opslaan mislukt -Specialthanksto = Met speciale dank aan -For = voor -theUSBLoaderandreleasingthesourcecodethe = De USB-Loader en het vrijgeven van de broncode -secondsleft = seconden resterend -SelectthePartition = Selecteer de partitie -youwanttoformat = wil je formatteren -settings = Instellingen -ShutdowntoIdle = Slaapstand -ShutdownSystem = Systeem uitschakelen -Success = Voltooid: -Successfullyinstalled = Installatie voltooid: -Successfullydeleted = Verwijdering voltooid: -SuccessfullySaved = Opslaan voltooid: -SystemDefault = Systeemstandaard -ThemePath = Themamap -ThemepathChanged = Themamap gewijzigd -Themepathchange = Themamap gewijzigd -Try = Proberen -Tooltips = Tekstballonen -Timeleft = Tijd resterend: -Unlock = Vrijgeven -Uninstall = Denstalleren -USBLoaderisprotected = USB Loader GX is op slot -USBDevicenotfound = USB apparaat niet gevonden -VideoMode = Video Modus -VIDTVPatch = VIDTV Patch -Volume = Volume -Waiting = Wachten... -WaitingforUSBDevice = Wachten op USB-apparaat -WidescreenFix = Breedbeeld -WiiMenu = Wiimenu -WrongPassword = Onjuist wachtwoord -Yes = Ja -YoudonthavecIOS = cIOS222 niet genstalleerd -Japanese = Japans -German = Duits -English = Engels -French = Frans -Spanish = Spaans -Italian = Italiaans -Dutch = Nederlands -SChinese = SChinees -TChinese = TChinees -Korean = Koreaans \ No newline at end of file diff --git a/Languages/finnish b/Languages/finnish deleted file mode 100644 index c45ce238..00000000 --- a/Languages/finnish +++ /dev/null @@ -1,171 +0,0 @@ -Specialthanksto = Erikoiskiitokset: -t3Coverst = 3D kannet -AppLanguage = Ohjelman kieli -Areyousure = Oletko varma? -AutoPatch = AutoPatch -Back = Takaisin -BacktoHBCorWiiMenu = Takaisin HBC:hen tai Wii Menuun -BacktoLoader = HBC -BacktoWiiMenu = Takaisin Wii Menuun -BootStandard = K%ynnistys/Standardi -BothBoth = Molemmat -Cantcreatedirectory = Ei voi luoda kansiota -Cancel = Peruuta -Cantbeformated = Ei voida formatoida -Cantdelete = Ei voida poistaa: -ClicktoDownloadCovers = Klikkaa ladataksesi kansia -Clock = Kello -Continueinstallgame = Jatka pelin asennusta? -ConsoleDefault = Konsolin oletus -Consoleshouldbeunlockedtomodifyit = Avaa konsolin lukitus muokataksesi asetuksia. -ConsoleLocked = Konsoli lukittu -CorrectPassword = Oikea salasana -Couldnotinitializenetwork = Verkkoon ei voitu yhdist! -CouldnotopenDisc = Levy ei voitu lukea -CouldnotinitializeDIPmodule = DIP Moduulia ei voitu alustaa! -CoverDownload = kansien lataus -CoverPath = kansien sijainti -CoverpathChanged = kansien sijainti muutettu -Coverpathchange = kansien sijainti -Credits = Tekij%t -DiscImages = Levykuvat -DiscimagePath = Levykuvien sijainti -DiscpathChanged = Levykuvien sijainti muutettu -Discpathchange = Levykuvien sijainti -DiscDefault = Levy oletus -Display = N%ytt% -Doyouwanttoformat = Haluatko formatoida: -Doyoureallywanttodelete = Haluatko varmasti formatoida: -Doyouwanttoretryfor30secs = Haluatko odottaa 30 sekuntia? -Downloadingfile = Lataa tiedostoa: -DownloadBoxartimage = Lataa kansikuva? -Downloadfinished = Lataus valmistunut -Error = Virhe ! -BOOTERROR = BOOTTAUS VIRHE -ErrorreadingDisc = Virhe luettaessa levy -ExitUSBISOLoader = Poistu USB Loader GX:st? -InitializingNetwork = Yhdist verkkoon -InsertDisk = Aseta levy Wiihin -InsertaWiiDisc = Aseta Wii-levy! -InsertaSDCardtodownloadimages = Aseta SD-kortti ladataksesi kansia. -InsertaSDCardtosave = Aseta SD-kortti tallentaaksesi asetuksia. -InstallRenameandDeleteareunlocked = Kaikki asetukset on nyt kytettviss. -Installerror = Asennusvirhe! -Installagame = Asenna peli -Installinggame = Asentaa peli: -Failedtoboot = Kynnistys ei onnistunut: -FailedtomountfrontSDcard = Ei voinut asentaa SD-korttia -FailedtosetUSB = USB:ta ei voitu asentaa: -Failedformating = Formatointi ei onnistunut -filesnotfoundontheserver = tiedostoja ei lytynyt serverilt! -filesleft = tiedosto(j)a jljell -FlipX = k%%nn%-X -Force = Pakota -Youneedtoformatapartition = Sinun tytyy formatoida osio -Format = Formatoi -Formattingpleasewait = Formatoi, odota... -formated = formatoitu! -free = vapaa -FreeSpace = Vapaata tilaa -FullShutdown = Tysi sammutus -GameID = Peli ID -Games = Pelej -Gameisalreadyinstalled = Peli on jo asennettu: -GameRegion = Alue -GameSize = Pelin koko -GoBack = Mene takaisin -//GotoPage = Mene sivulle -HowtoShutdown = Miten sammutetaan? -Language = Kieli -Langchange = Kielen muuttaminen -Left = Vasen -LikeSysMenu = Kuin wii-menu -LoadingincIOS = Lataa cIOS249 -Lock = Lukitse -LockConsole = Lukitse konsoli -MP3Menu = MP3 valikko -Missingfiles = tiedostoa puuttuu -Networkiniterror = Verkon alustusvirhe -Neither = Ei kumpikaan -Next = Seuraava -No = Ei -Nofilemissing = Ei tiedostoja kadoksissa! -NoHDDfound = Kovalevy ei lytynyt! -NoSDcardinserted = SD-korttia ei ole asetettu wiihin! -Nopartitionsfound = Osioita ei lytynyt -NoUSBDevice = Ei USB-laitetta -NoWBFSpartitionfound = Ei WBFS-osioita lytynyt -NormalCovers = Normaalit kannet -Normal = Normaali -NotaWiiDisc = Ei Wii-levy -NoUSBDevicefound = USB-laitetta ei lytynyt. -Notenoughfreespace = Ei tarpeeksi tilaa! -notset = ei asetettu -of = josta -OFF = OFF -OfficialSite = Virallinen sivusto -ok = OK -ON = ON -Parentalcontrol = Valvonta -Partition = Osio -Password = Salasana -PasswordChanged = Salasana muutettu -Passwordhasbeenchanged = Salasana on muutettu -Passwordchange = Salasanan vaihto -PowerofftheWii = Sammuta Wii -Prev = Edellinen -PromptsButtons = Napit -ReloadSD = Uudelleenlataa SD -RenameGameonWBFS = Uudelleennime peli -Restart = Kynnist uudelleen -Return = Palaa -ReturntoWii = Palaa Wii-menuun -Right = Oikea -Rumble = V%rin% -QuickBoot = Pikak%ynnistys -Save = Tallenna -SaveFailed = Tallennus ei onnistunut -Specialthanksto = Erikoiskiitokset -For = -theUSBLoaderandreleasingthesourcecodethe = ja l%hdekoodin julkaisemisesta -secondsleft = sekuntia jljell -SelectthePartition = Valitse osio -youwanttoformat = jonka haluat formatoida -settings = Asetukset -ShutdowntoIdle = Valmiustila -ShutdownSystem = Sammuta jrjestelm -Success = Onnistui: -Successfullyinstalled = Asennettu onnistuneesti: -Successfullydeleted = Poistettu onnistuneesti: -SuccessfullySaved = Tallennettu onnistuneesti -SystemDefault = Wiin oletus -ThemePath = Teeman sijainti -ThemepathChanged = Teeman sijainti muutettu -Themepathchange = Teeman sijainti -Try = Yrit% -Tooltips = vinkit -Timeleft = Aikaa jljell: -Unlock = Avaa -Uninstall = Poista -USBLoaderisprotected = USB Loader GX on suojattu. -USBDevicenotfound = USB-laitetta ei lytynyt -VideoMode = Video tila -VIDTVPatch = VIDTV korjaus -Volume = Voimakkuus -Waiting = Odottaa... -WaitingforUSBDevice = Odottaa USB-laitetta... -WidescreenFix = Laajakuva korjaus -WiiMenu = Wii Menu -WrongPassword = Vr salasana -Yes = Kyll -YoudonthavecIOS = Sinulla ei ole cIOS222:sta -Japanese = Japani -German = Saksa -English = Englanti -French = Ranska -Spanish = Espanja -Italian = Italia -Dutch = Hollanti -SChinese = SKiina -TChinese = TKiina -Korean = Korea \ No newline at end of file diff --git a/Languages/french b/Languages/french deleted file mode 100644 index 01784c56..00000000 --- a/Languages/french +++ /dev/null @@ -1,210 +0,0 @@ -t3Covers = Jaquettes 3D -addToFavorite = Ajouter aux favoris -all = Alphabtique -AppLanguage = Langue d'interface -Areyousure = tes-vous sr? -available = disponible -AutoPatch = AutoPatch -Back = Retour -Backgroundmusic = Fond sonore -Backgroundmusicpath = Dossier fond sonore modifi -BacktoHBCorWiiMenu = Retour HBC / Menu Wii -BacktoLoader = Wii HomeBrews -BacktoWiiMenu = Retour Menu Wii -BootStandard = Boot/Standard -Both = Tous -Cantcreatedirectory = Cration du rpertoire impossible -Cancel = Annuler -Cantbeformated = Formatage impossible -CheckingforUpdates = Recherche de Mise Jour -Cantdelete = Impossible de supprimer : -ClicktoDownloadCovers = Tlchargement des jaquettes -Clock = Horloge -Close = Fermer -Continueinstallgame = Continuer l'installation ? -ConsoleDefault = Console par dfaut -Consoleshouldbeunlockedtomodifyit = La console doit tre dverrouille. -ConsoleLocked = Console verrouille -CorrectPassword = Mot de passe correct -Couldnotinitializenetwork = Initialisation rseau impossible ! -CouldnotopenDisc = Initialisation disque impossible -CouldnotinitializeDIPmodule = Initialisation DIP impossible ! -CoverDownload = Tlchargement Jaquettes -CoverPath = Dossier Jaquettes -CoverpathChanged = Dossier des jaquettes modifi -Coverpathchange = Dossier des jaquettes -count = Utilisation -Credits = Crdits -DiscImages = Labels DVD -DiscimagePath = Dossier Labels DVD -DiscpathChanged = Dossier des labels DVD chang -Discpathchange = Dossier des labels DVD -DiscDefault = Disque par dfaut -Display = Affichage -Doyouwanttoformat = Voulez-vous formater ? -Doyoureallywanttodelete = Voulez-vous vraiment supprimer ? -Doyouwanttoretryfor30secs = Ressayer pendant 30 sec. ? -Doyouwanttoupdate = Comment faire la Mise Jour ? -Downloadingfile = Tlchargement du fichier -DownloadBoxartimage = Tlcharger les jaquettes ? -Downloadfinished = Tlchargement termin -//Defaultgamesettings = Rtablir les paramtres du jeu par dfaut -//Defaultsettings = Rtablir les paramtres par dfaut -Defaultgamesettings = Reset Paramtres Jeu -Defaultsettings = Reset Paramtres -Error = Erreur ! -hour = Heures -Homemenu = Menu HOME -BOOTERROR = ERREUR DE DMARRAGE -ErrorreadingDisc = Erreur la lecture du disque -ExitUSBISOLoader = Quitter USB Loader GX ? -InitializingNetwork = Initialisation du rseau -InsertDisk = Insrez un disque -InsertaWiiDisc = Insrez un disque Wii ! -InsertaSDCardtodownloadimages = Insrez une carte SD pour tlcharger les jaquettes. -InsertaSDCardtosave = Insrez une carte SD pour enregistrer. -InsertaSDCardtousethatoption = Insrez une carte SD pour utiliser cette option. -InstallRenameandDeleteareunlocked = Toutes les fonctionnalits sont dverrouilles. -Installerror = Erreur l'installation ! -Installagame = Installer un jeu -Installinggame = Installation du jeu : -Failedtoboot = chec au dmarrage de : -FailedtomountfrontSDcard = chec l'initialisation de la SD -FailedtosetUSB = chec d'initialisation USB : -Failedformating = chec du formatage -fave = Favoris -Filenotfound = Fichier introuvable. -filesnotfoundontheserver = fichiers introuvables sur le serveur ! -filesleft = fichier(s) restant(s) -FlipX = Inversion-X -Force = Forcer -Youneedtoformatapartition = Vous devez formater une partition -Format = Formater -Formattingpleasewait = Formatage en cours, veuillez patienter... -formated = format ! -free = libre -FreeSpace = Espace restant -FullShutdown = teindre -GameID = ID du jeu -Games = Jeux -Gameisalreadyinstalled = Le jeu est dj install : -GameRegion = Rgion -GameSize = Taille du jeu -GoBack = Retour -HowtoShutdown = Arrt de la Wii ? -keyboard = Clavier -Language = Langue du jeu -Langchange = Changer la langue -Left = Gauche -LikeSysMenu = Menu systme -LoadingincIOS = Charger avec cIOS249 -ListSort = Tri des Jeux -Loadingstandardlanguage = Chargement de la langue par dfaut. -Loadingstandardmusic = Chargement musique standard. -Lock = Verrouiller -LockConsole = Verrouiller la console -MP3Menu = Menu MP3 -Missingfiles = Fichier(s) manquant(s) -Networkiniterror = Erreur d'initialisation rseau -Neither = Aucun -Next = Suivant -Nonewupdates = Pas de nouvelle Mise Jour. -No = Non -Nofilemissing = Aucun fichier manquant ! -NoHDDfound = Aucun HDD trouv ! -NoSDcardinserted = Aucune carte SD insre ! -Nopartitionsfound = Aucune partition trouve -NoUSBDevice = Aucun priphrique USB -NoWBFSpartitionfound = Aucune partition WBFS trouve -NormalCovers = Normales -Normal = 4:3 -NotaWiiDisc = Ce n'est pas un jeu Wii -NoUSBDevicefound = Aucun priphrique USB trouv. -Notenoughfreespace = Espace libre insuffisant ! -Notasupportedformat = Format non support ! -notset = non dfini -of = sur -OFF = Dsactiv -OfficialSite = Site Officiel -ok = OK -ON = Activ -OnlyInstall = Jeu install seulement -Parentalcontrol = Contrle parental -Partition = Partition -Password = Mot de passe -PasswordChanged = Mot de passe modifi -Passwordhasbeenchanged = Le mot de passe a t modifi -Passwordchange = Modification du mot de passe -Plays = Utilisation -PowerofftheWii = teindre la Wii -Prev = Prcdent -PromptsButtons = Interface -ReloadSD = Recharger la SD -RenameGameonWBFS = Renommer un jeu -Restart = Redmarrer -Restarting = Redmarrage... -Return = Retour -ReturntoWii = Retourner au menu Wii -Right = Droite -Rumble = Vibrations -QuickBoot = Dmarrage rapide -Save = Enregistrer -SaveFailed = chec de sauvegarde -Specialthanksto = Remerciements -For = pour -theUSBLoaderandreleasingthesourcecodethe = et pour avoir partag le code source -secondsleft = secondes restantes -Setasbackgroundmusic = Utiliser comme fond sonore ? -SelectthePartition = Choisissez la partition -youwanttoformat = Vous voulez formater -Standard = Standard -settings = Paramtres -ShutdowntoIdle = Veille -ShutdownSystem = Arrt -Success = Succs : -Successfullyinstalled = Install avec succs : -Successfullyupdated = Mise Jour russie -Successfullydeleted = Supprim avec succs : -SuccessfullySaved = Enregistr avec succs -SystemDefault = Systme par dfaut -ThemePath = Dossier Thme -ThemepathChanged = Dossier du thme modifi -Themepathchange = Dossier du thme -Titlestxtpath = Localisation titles.txt -TitlestxtpathChanged = Localisation de titles.txt modifi -Titlestxtpathchange = Localisation de titles.txt -Try = Essayer -Tooltips = Info-bulles -Timeleft = Temps restant : -updating = Mise Jour -Unlock = Dverrouiller -Unicodefix = Unicode -Uninstall = Dsinstaller -Updatepath= Dossier Mise Jour -Updatepathchanged = Dossier de Mise Jour chang. -Updatefailed = Mise Jour choue -Updatedol = DOL seul -Updateall = Totale -USBLoaderisprotected = USB Loader GX est verrouill -USBDevicenotfound = Priphrique USB introuvable -VideoMode = Mode vido -VIDTVPatch = Patch VIDTV -Volume = Volume -Waiting = En attente... -WaitingforUSBDevice = Attente d'un priphrique USB -WidescreenFix = 16:9 -WiiMenu = Menu Wii -Wiilight = Illumination Wii -WrongPassword = Mot de passe incorrect -Yes = Oui -YoudonthavecIOS = cIOS222 non install -Japanese = Japonais -German = Allemand -English = Anglais -French = Franais -Spanish = Espagnol -Italian = Italien -Dutch = Nerlandais -SChinese = Chinois simplifi -TChinese = Chinois traditionnel -Korean = Coren \ No newline at end of file diff --git a/Languages/german b/Languages/german deleted file mode 100644 index 98212282..00000000 --- a/Languages/german +++ /dev/null @@ -1,178 +0,0 @@ -Specialthanksto = Besonderer dank an - t3Covers = 3D Cover - AppLanguage = Sprache - Areyousure = Bist du sicher? - AutoPatch = AutoPatch - Back = Zurck - BacktoHBCorWiiMenu = Zurck zum HBC oder Wii Men - BacktoLoader = Zurck zum Loader - BacktoWiiMenu = Zurck ins Wii Men - BootStandard = Boot/Standard - Both = Beides - Cantcreatedirectory = Verzeichnis kann nicht erstellt werden - Cancel = Abbrechen - Cantbeformated = Konnte nicht formatiert werden - Cantdelete = Lschen fehlgeschlagen: - ClicktoDownloadCovers = Klick um Cover runterzuladen - Clock = Uhr - Continueinstallgame = Spiel installieren? - ConsoleDefault = Konsolenstandard - Consoleshouldbeunlockedtomodifyit = Konsole zum ndern bitte entsperren. - ConsoleLocked = Konsole gesperrt - CorrectPassword = Passwort korrekt - Couldnotinitializenetwork = Netzwerk konnte nicht initialisiert werden! - CouldnotopenDisc = Konnte Disc nicht ffnen - CouldnotinitializeDIPmodule = DIP Modul konnte nict initialisiert werden! - CoverDownload = Cover Download - CoverPath = Cover Pfad - CoverpathChanged = Cover Pfad gendert - Coverpathchange = Cover Pfad ndern - Credits = Credits - DiscImages = Disc Images - DiscimagePath = Discimage Pfad - DiscpathChanged = Disc Pfad gendert - Discpathchange = Disc Pfad ndern - DiscDefault = Disc Standard - Display = Anzeige - Doyouwanttoformat = Wollen sie formatieren: - Doyoureallywanttodelete = Wirklich lschen: - Doyouwanttoretryfor30secs = 30 sek lang erneut versuchen? - Downloadingfile = Downloade Datei: - DownloadBoxartimage = Download Boxart Grafik? - Downloadfinished = Download abgeschlossen - Error = Fehler ! - BOOTERROR = BOOT FEHLER - ErrorreadingDisc = Disclesefehler - ExitUSBISOLoader = USB Loader GX beenden? - InitializingNetwork = Initialisiere Netzwerk - InsertDisk = Disc einlegen - InsertaWiiDisc = Wii Disc einlegen! - InsertaSDCardtodownloadimages = SD Card fr Grafik-Download einlegen. - InsertaSDCardtosave = SD-Card zum speichern einlegen. - InstallRenameandDeleteareunlocked = Alle Funktionen des USB Loader GX freigeschaltet. - Installerror = Installationsfehler! - Installagame = Spiel installieren - Installinggame = Installiere Spiel: - Failedtoboot = Bootfehler: - FailedtomountfrontSDcard = SD-Card Mount-Fehler - FailedtosetUSB = USB-Fehler: - Failedformating = Formatieren fehlgeschlagen - Filenotfound = Datei nicht gefunden. - filesnotfoundontheserver = Datei(en) konnte(n) auf dem Server nicht gefunden werden! - filesleft = Datei(en) verbleiben - FlipX = Flip-X - Force = Erzwinge - Youneedtoformatapartition = Partition muss formatiert werden - Format = Formatieren - Formattingpleasewait = Formatiere, bitte warten... - formated = formatiert! - free = frei - FreeSpace = Freier Speicher - FullShutdown = Ausschalten - GameID = Spiel ID - Games = Spiele - Gameisalreadyinstalled = Spiel bereits vorhanden: - GameRegion = Region - GameSize = Grsse - GoBack = Zurck - //GotoPage = Gehe zu Seite - HowtoShutdown = Wie beenden? - keyboard = Tastatur - Language = Sprache - Langchange = Sprache ndern - Left = Links - LikeSysMenu = Wie SysMen - LoadingincIOS = Lade in cIOS249 - Loadingstandardlanguage = Lade Standardsprache. - Lock = Sperren - LockConsole = Konsole sperren - MP3Menu = MP3 Men - Missingfiles = Fehlende Datei(en) - Networkiniterror = Netzwerk init Fehler - Neither = Nichts - Next = Nchste - No = Nein - Nofilemissing = Alle Dateien vorhanden! - NoHDDfound = Keine HDD gefunden! - NoSDcardinserted = Keine SD-Card eingelegt! - Nopartitionsfound = Keine Partitionen gefunden - NoUSBDevice = Kein USB Gert - NoWBFSpartitionfound = Keine WBFS Partition gefunden - NormalCovers = Normale Cover - Normal = Normal - NotaWiiDisc = Keine Wii Disc - NoUSBDevicefound = Kein USB Gert gefunden. - Notenoughfreespace = Nicht genug freier Speicher! - notset = nicht gesetzt - of = von - OFF = AUS - OfficialSite = Offizielle Seite - ok = OK - ON = AN - Parentalcontrol = Jugenschutz - Partition = Partition - Password = Passwort - PasswordChanged = Passwort gendert - Passwordhasbeenchanged = Passwort gendert - Passwordchange = Passwort ndern - PowerofftheWii = Wii ausschalten - Prev = Vorherige - PromptsButtons = Button Anzeige - ReloadSD = SD aktualisieren - RenameGameonWBFS = Spiel umbenennen - Restart = Neustart - Return = Zurck - ReturntoWii = Zurck ins Wii Men - Right = Rechts - Rumble = Rumble - QuickBoot = Quick Boot - Save = Speichern - SaveFailed = Speichern fehlgeschlagen - Specialthanksto = Besonderer Dank an - Titlestxtpath = Titles.txt Pfad - TitlestxtpathChanged = Pfad zu titles.txt gendert. - Titlestxtpathchange = Pfad von titles.txt ndern - For = fr - theUSBLoaderandreleasingthesourcecodethe = und die verffentlichung des Quellcodes - secondsleft = sekunden verbleiben - SelectthePartition = Partition auswhlen - youwanttoformat = sie wollen formatieren - settings = Einstellungen - ShutdowntoIdle = StandBy - ShutdownSystem = System abschalten - Success = Erfolg: - Successfullyinstalled = Erfolgreich installiert: - Successfullydeleted = Erfolgreich gelscht: - SuccessfullySaved = Erfolgreich gespeichert - SystemDefault = Systemstandard - ThemePath = Theme Pfad - ThemepathChanged = Theme Pfad gendert - Themepathchange = Theme Pfad ndern - Try = Versuche - Tooltips = ToolTips - Timeleft = Dauer: - Unlock = Entsperren - Unicodefix = Unicode Fix - Uninstall = Deinstallieren - USBLoaderisprotected = USB Loader GX ist geschtzt - USBDevicenotfound = USB Gert nicht gefunden - VideoMode = Video Modus - VIDTVPatch = VIDTV Patch - Volume = Lautstrke - Waiting = Warte... - WaitingforUSBDevice = Warte auf USB Gert - WidescreenFix = Widescreen Fix - WiiMenu = Wii Men - WrongPassword = Passwort falsch - Yes = Ja - YoudonthavecIOS = cIOS222 nicht vorhanden - Japanese = Japanisch - German = Deutsch - English = Englisch - French = Franzsisch - Spanish = Spanisch - Italian = Italienisch - Dutch = Niederlndisch - SChinese = Simpl.Chinesisch - TChinese = Trad.Chinesisch - Korean = Koreanisch \ No newline at end of file diff --git a/Languages/italian b/Languages/italian deleted file mode 100644 index 4db37b34..00000000 --- a/Languages/italian +++ /dev/null @@ -1,192 +0,0 @@ -Specialthanksto = Un Ringraziamento Speciale a -t3Covers = 3D -AppLanguage = Percorso Lingua -Areyousure = Sei sicuro? -AutoPatch = Automatico -Back = Indietro -BacktoHBCorWiiMenu = Torna a HBC/Men Wii -BacktoLoader = Torna al Loader -BacktoWiiMenu = Torna al Men Wii -BootStandard = Riavvio/Standard -Both = Entrambi -Cantcreatedirectory = Non posso creare la cartella -Cancel = Cancella -Cantbeformated = Non pu essere Formattato -Cantdelete = Non Posso Eliminare: -ClicktoDownloadCovers = Premi per scaricare le Copertine -Clock = Orologio -Continueinstallgame = Continua ad Installare il gioco? -ConsoleDefault = Predefinito Console -Consoleshouldbeunlockedtomodifyit = Console deve essere Sbloccata per Modificarla. -ConsoleLocked = Console Bloccata -CorrectPassword = Password Corretta -Couldnotinitializenetwork = Non posso Inizializzare la rete! -CouldnotopenDisc = Non posso caricare il Disco! -CouldnotinitializeDIPmodule = Non posso inizializzare il modulo DIP! -CoverDownload = Scaricamento Copertina -CoverPath = Percorso Copertina -CoverpathChanged = Percorso Copertina Modificato -Coverpathchange = Modifico Percorso Copertina -Credits = Credits -DiscImages = Immagine Disco -DiscimagePath = Percorso Imm. Disco -DiscpathChanged = Percorso Immagine Disco Modificato -Discpathchange = Modifica Percorso Immagine Disco -DiscDefault = Predefinito Disco -Display = Display -Doyouwanttoformat = Vuoi Formattare: -Doyoureallywanttodelete = Vuoi realmente Eliminare: -Doyouwanttoretryfor30secs = Vuoi Riprovare per 30 sec? -Downloadingfile = Scaricamento file: -DownloadBoxartimage = Scaricamento Immagine Boxart? -Downloadfinished = Scaricamento Completato -Error = Errore ! -BOOTERROR = Errore Avvio -ErrorreadingDisc = Errore Lettura Disco -ExitUSBISOLoader = Esci da USB Loader GX? -InitializingNetwork = Inizializzazione rete -InsertDisk = Inserisci Disco -InsertaWiiDisc = Inserisci un Disco nella Wii! -InsertaSDCardtodownloadimages = Inserisci una scheda SD per scaricare le immagini. -InsertaSDCardtosave = Inserisci una scheda SD per Salvare. -InstallRenameandDeleteareunlocked = Tutte le funzioni di USB Loader GX sono sbloccate. -Installerror = Errore Installazione! -Installagame = Installa un gioco -Installinggame = Sto Installando il gioco: -Failedtoboot = Erroe Avvio: -FailedtomountfrontSDcard = Errore lettura scheda SD -FailedtosetUSB = Errore a Settare porta USB: -Failedformating = Errore Formattazione -Filenotfound = File non trovato. -filesnotfoundontheserver = file non trovato/i sul server! -filesleft = file mancante/i -FlipX = Flip-X -Force = Forza -Youneedtoformatapartition = Devi Formattare una Partizione -Format = Formatta -Formattingpleasewait = Sto Formattando, prego attendere... -formated = formattato! -free = liberi -FreeSpace = Spazio libero -FullShutdown = Completo -GameID = ID Gioco -Games = Giochi -Gameisalreadyinstalled = Gioco gi installato: -GameRegion = Regione -GameSize = Dimensione Gioco -GoBack = Indietro -//GotoPage = Vai alla Pagina -HowtoShutdown = Spegnimento Wii? -keyboard = tastiera -Language = Lingua -Langchange = Cambio Lingua -Left = Sinistra -LikeSysMenu = Come SysMenu -LoadingincIOS = Caricamento in cIOS249 -Loadingstandardlanguage = Caricamento Lingua Standard. -Lock = Blocco -LockConsole = Blocco Console -MP3Menu = Men MP3 -Missingfiles = File Mancante/i -Networkiniterror = Errore inizializzazione rete -Neither = Nessuno -Next = Avanti -No = No -Nofilemissing = Nessun file mancante! -NoHDDfound = Nessun HDD trovato! -NoSDcardinserted = Nessuna scheda SD inserita! -Nopartitionsfound = Nessuna partizione trovata -NoUSBDevice = Nessun Dispositivo USB -NoWBFSpartitionfound = Nessuna partizione WBFS trovata -NormalCovers = Normali -Normal = Normale -NotaWiiDisc = Non un Disco Wii -NoUSBDevicefound = Nessun Dispositivo USB trovato. -Notenoughfreespace = Spazio Insufficiente! -notset = non inserita -of = di -OFF = OFF -OfficialSite = Sito Ufficiale -ok = OK -ON = ON -Parentalcontrol = Controllo Genitori -Partition = Partizione -Password = Password -PasswordChanged = Password Modificata -Passwordhasbeenchanged = Password stata modificata -Passwordchange = Modifica Password -PowerofftheWii = Spegnimento Wii -Prev = Indietro -PromptsButtons = Pulsanti -ReloadSD = Ricarica SD -RenameGameonWBFS = Rinomina Gioco su WBFS -Restart = RiAvvia -Return = Ritorna -ReturntoWii = Ritorna al Men Wii -Right = Destra -Rumble = Vibrazione -QuickBoot = Avvio Veloce -Save = Salva -SaveFailed = Salvataggio Fallito -Specialthanksto = Ringraziamenti Speciali a -Titlestxtpath = Percorso Titles.txt -TitlestxtpathChanged = Percorso of titles.txt modificato. -Titlestxtpathchange = Modifica percorso titles.txt -For = per -theUSBLoaderandreleasingthesourcecodethe = e rilascio codice sorgente -secondsleft = secondi mancanti -SelectthePartition = Seleziona la Partizione -youwanttoformat = vuoi formattare -settings = Strumenti -ShutdowntoIdle = StandBy -ShutdownSystem = Spegnimento -Success = Successo: -Successfullyinstalled = Installato con successo: -Successfullydeleted = Eliminato con successo: -SuccessfullySaved = Salvato con successo -SystemDefault = Predefinito Sistema -ThemePath = Percorso Tema -ThemepathChanged = Percorso Tema modificato -Themepathchange = Modifica Percorso Tema -Try = Prova -Tooltips = Suggerimenti -Timeleft = Restante: -Unlock = Sblocca -Unicodefix = Caratteri Speciali -Uninstall = Disinstalla -USBLoaderisprotected = USB Loader GX Protetto -USBDevicenotfound = Dispositivo USB non Trovato -VideoMode = Modalit Video -VIDTVPatch = Forza Video -Volume = Volume -Waiting = Caricamento... -WaitingforUSBDevice = Caricamento Dispositivo USB -WidescreenFix = Widescreen -WiiMenu = Men Wii -WrongPassword = Password Errata -Yes = S -YoudonthavecIOS = Non Possiedi cIOS222 -Japanese = Giapponese -German = Tedesco -English = Inglese -French = Francese -Spanish = Spagnolo -Italian = Italiano -Dutch = Olandese -SChinese = Cinese Moderno -TChinese = Cinese Tradizionale -Korean = Coreano -addToFavorite = Favoriti -Backgroundmusic = Musica di Fondo -Backgroundmusicpath = Percorso Musica -hour = ore -Loadingstandardmusic = Caricamento Musica std. -Notasupportedformat = Formato non supportato. -Setasbackgroundmusic = Imposta come Musica fondo -Standard = Standard -Plays = Giocati -all = Alfabetico -count = pi giocati -fave = Favoriti -ListSort = Ordine Giochi -InsertaSDCardtousethatoption = Inserire scheda SD per questa opzione \ No newline at end of file diff --git a/Languages/japanese b/Languages/japanese deleted file mode 100644 index 0fa66d64..00000000 --- a/Languages/japanese +++ /dev/null @@ -1,193 +0,0 @@ - t3Covers = 3D カバー - addToFavorite = お気に入り - all = 全て - AppLanguage = Appの表示言語 - Areyousure = 実行しますか? - AutoPatch = 自動パッチ - Back = 戻る - BacktoHBCorWiiMenu = HBC/Wiiメニューへ戻る - Backgroundmusic = サウンド - Backgroundmusicpath = サウンドのPath - BacktoLoader = HBCへ戻る - BacktoWiiMenu = Wiiメニューへ戻る - BootStandard = ブート/標準 - BothBoth = 両方 - Cantcreatedirectory = ディレクトリ作成に失敗しました。 - Cancel = キャンセル - Cantbeformated = フォーマットに失敗しました。 - Cantdelete = 削除に失敗しました: - ClicktoDownloadCovers = カバーをダウンロードするのにクリックして下さい。 - Clock = Clock - Close = 閉じる - Continueinstallgame = ゲームのインストールを続けますか? - ConsoleDefault = デフォルトコンソール - Consoleshouldbeunlockedtomodifyit = 変更にはコンソールのロック解除が必要です。 - ConsoleLocked = コンソールがロックされています。 - CorrectPassword = 正しいパスワード - Couldnotinitializenetwork = ネットワークの初期化ができません! - CouldnotopenDisc = ディスクオープンに失敗しました。 - CouldnotinitializeDIPmodule = DIPモジュールの初期化ができません! - CoverDownload = カバー ダウンロード - CoverPath = カバーパス - CoverpathChanged = カバーパスを変更しました。 - Coverpathchange = カバーパスの変更 - count = プレイ時間 - Credits = 協力者 - DiscImages = ディスクイメージ - DiscimagePath = ディスクイメージパス - DiscpathChanged = ディスクパスを変更しました。 - Discpathchange = ディスクパスの変更 - DiscDefault = デフォルトディスク - Display = ディスプレイ - Doyouwanttoformat = フォーマットしますか: - Doyoureallywanttodelete = 削除しますか: - Doyouwanttoretryfor30secs = 再実行しますか?(30秒) - Downloadingfile = ファイルのダウンロード中: - DownloadBoxartimage = Boxart imageをダウンロードしますか? - Downloadfinished = ダウンロードを終了しました。 - Error = Error ! - BOOTERROR = BOOT ERROR - ErrorreadingDisc = ディスク読込み失敗(Error reading Disc) - ExitUSBISOLoader = USB Loader GXを終了しますか? - Homemenu = ホームメニュー - InitializingNetwork = ネットワークの初期化中... - InsertDisk = ディスク挿入 - InsertaWiiDisc = Wiiディスクを挿入して下さい! - InsertaSDCardtodownloadimages = イメージをダウンロードするSDカードを挿入して下さい。 - InsertaSDCardtosave = 保存するSDカードを挿入して下さい。 - InsertaSDCardtousethatoption = このオプションを使用するのにSDカードを挿入して下さい。 - InstallRenameandDeleteareunlocked = 全ての機能がアンロックされてました。 - Installerror = Install Error! - Installagame = ゲームインストール - Installinggame = ゲームをインストール中: - Failedtoboot = 起動に失敗: - FailedtomountfrontSDCard = SDカードの認識に失敗しました。 - FailedtosetUSB = USB接続に失敗: - Failedformating = フォーマットに失敗しました。 - fave = お気に入り - Filenotfound = ファイルを検出できませんでした。 - filesnotfoundontheserver = サーバーにファイルがありません! - filesleft = file(s) left(残りのファイル数) - FlipX = Flip-X - Force = Force - Youneedtoformatapartition = パーティションをフォーマットして下さい。 - Format = フォーマット - Formattingpleasewait = フォーマット中です、暫くお待ち下さい... - formated = フォーマット完了! - free = 空き - FreeSpace = 空容量 - FullShutdown = 完全シャットダウン - GameID = ゲームID - Games = ゲーム - Gameisalreadyinstalled = ゲームは既にインストール済みです: - GameRegion = ゲームの地域情報 - GameSize = ゲームサイズ - GoBack = 戻る - //GotoPage = Go to Page - HowtoShutdown = シャットダウンの方法は? - hour = 時間 - keyboard = キーボード - Language = 言語 - Langchange = 言語の変更 - Left = 左 - LikeSysMenu = Like SysMenu - LoadingincIOS = cIOS249でロード中... - Loadingstandardlanguage = 標準の言語をロード中... - LikeSysMenu = Like SysMenu Loading - IOS = cIOS249ロード - Lock = ロック - LockConsole = コンソールをロックする - MP3Menu = MP3メニュー - Missingfiles = 検出できなかったファイル - Networkiniterror = Network initialization error - Neither = どちらでもない - Next = 次へ - No = いいえ - Nofilemissing = ファイルを検出できませんでした! - NoHDDfound = HDDを検出できませんでした! - NoSDCardinserted = SDカードを検出できませんでした! - Nopartitionsfound = パーティションを検出できませんでした。 - NoUSBDevice = USBデバイスを検出できませんでした。 - NoWBFSpartitionfound = WBFSパーティションを検出できませんでした。 - NormalCovers = ノ-マルカバー - Normal = Normal(4:3) - NotaWiiDisc = Wiiディスクではありません。 - NoUSBDevicefound = USBデバイズが検出されていません。 - Notenoughfreespace = 空容量が不足しています! - Notasupportedformat = ディスク形式はサポートされていません。 - notset = セットされませんでした。 - of = of - OFF = オフ - OfficialSite = オフィシャルサイト - ok = OK - ON = オン - Parentalcontrol = 保護者による制限 - Partition = パーティション - Password = パスワード - PasswordChanged = パスワード変更 - Passwordhasbeenchanged = パスワードを変更しました - Passwordchange = パスワード変更 - PowerofftheWii = Wiiを電源OFFする - Plays = プレイ時間 - Prev = 前へ - PromptsButtons = ボタンを押して~ - ReloadSDカード = SDカードのリロード - RenameGameonWBFS = WBFS上のゲーム名変更 - Restart = リスタート - Return = 戻る - ReturntoWii = Wiiメニューへ戻る - Right = 右 - Rumble = 振動 - QuickBoot = クイック起動 - Save = セーブ - SaveFailed = セーブに失敗しました。 - Specialthanksto = この場を借りて感謝です☆ - For = for - theUSBLoaderandreleasingthesourcecodethe = 及びリリースされているソースコード - secondsleft = 完了までの秒数 - SelectthePartition = パーティション選択 - youwanttoformat = フォーマットを実行する。 - settings = 設定 - Setasbackgroundmusic = サウンドとして設定する - Standard = 標準 - ShutdowntoIdle = システムをアイドル状態にする - ShutdownSystem = システムを終了する - Success = 成功: - Successfullyinstalled = インストールに成功: - Successfullydeleted = 削除に成功: - SuccessfullySaved = セーブに成功: - SystemDefault = デフォルトシステム - ThemePath = テーマパス - ThemepathChanged = テーマパスを変更しました。 - Themepathchange = テーマパスの変更 - Titlestxtpath = Titles.txt Path - TitlestxtpathChanged = titles.txtのPathを変更しました。 - Titlestxtpathchange = titles.txtのPathを変更 - Try = 試みる - Tooltips = ツールヒント - Timeleft = 残り時間: - Unlock = アンロック - Unicodefix = Unicode Fix - Uninstall = アンインストール - USBLoaderisprotected = USB Loaderは保護されています。 - USBDevicenotfound = USBデバイスを検出できませんでした。 - VideoMode = ビデオモード - VIDTVPatch = VIDTVパッチ - Volume = ボリューム - Waiting = 暫くお待ちください... - WaitingforUSBDevice = USBデバイスの応答待ち。 - WidescreenFix = Widescreen(16:9) - WiiMenu = Wiiメニュー - WrongPassword = パスワードが違います。 - Yes = はい - YoudonthavecIOS = cIOS222が検出できませんでした。 - Japanese = 日本語 - German = ドイツ語 - English = 英語 - French = フランス語 - Spanish = スペイン語 - Italian = イタリア語 - Dutch = オランダ語 - SChinese = 中国語(簡体字) - TChinese = 中国語(繁体字) - Korean = 韓国語 \ No newline at end of file diff --git a/Languages/korean b/Languages/korean deleted file mode 100644 index 827732f1..00000000 --- a/Languages/korean +++ /dev/null @@ -1,171 +0,0 @@ -Specialthanksto = Special thanks to -t3Covers = 3D ǥ -AppLanguage = USB δ -Areyousure = Ȯմϱ? -AutoPatch = ڵ ġ -Back = ڷ -BacktoHBCorWiiMenu = Ȩ ޴ Ǵ Wii ޴ -BacktoLoader = δ ư -BacktoWiiMenu = Wii ޴ ư -BootStandard = ⺻ ü -BothBoth = ǥ -Cantcreatedirectory = 丮 ϴ -Cancel = -Cantbeformated = ϴ. -Cantdelete = ϴ: -ClicktoDownloadCovers = ǥ ٿϷ Ŭϼ -Clock = ð -Continueinstallgame = ġϰڽϱ? -ConsoleDefault = ܼ ⺻ -Consoleshouldbeunlockedtomodifyit = Ϸ ܼ ϼ. -ConsoleLocked = ܼ -CorrectPassword = ùٸ йȣ -Couldnotinitializenetwork = Ʈũ ʱȭ ! -CouldnotopenDisc = ũ ϴ. -CouldnotinitializeDIPmodule = DIP ʱȭ ! -CoverDownload = ǥ ٿε -CoverPath = ǥ -CoverpathChanged = ǥ -Coverpathchange = ǥ -Credits = Credits -DiscImages = ũ ̹ -DiscimagePath = ũ ̹ -DiscpathChanged = ũ -Discpathchange = ũ -DiscDefault = ũ ⺻ -Display = ȭ ǥ -Doyouwanttoformat = ϰڽϱ: -Doyoureallywanttodelete = ϰڽϱ: -Doyouwanttoretryfor30secs = 30ʰ õ ұ? -Downloadingfile = ٿε : -DownloadBoxartimage = ڽ ̹ ٿε ұ? -Downloadfinished = ٿε Ϸ -Error = ! -BOOTERROR = -ErrorreadingDisc = ũ б -ExitUSBISOLoader = USBδ GX ұ? -InitializingNetwork = Ʈũ ʱȭ -InsertDisk = ũ ־ּ -InsertaWiiDisc = Wii ũ ! -InsertaSDCardtodownloadimages = ٿ ̹ SDī带 . -InsertaSDCardtosave = SDī带 . -InstallRenameandDeleteareunlocked = USBδ GX . -Installerror = ġ ! -Installagame = ġұ -Installinggame = ġ : -Failedtoboot = : -FailedtomountfrontSDcard = SDī ν -FailedtosetUSB = USB : -Failedformating = -filesnotfoundontheserver = ϴ! -filesleft = -FlipX = / -Force = -Youneedtoformatapartition = Ƽ ؾ մϴ -Format = -Formattingpleasewait = . ٷ ּ... -formated = Ϸ! -free = -FreeSpace = -FullShutdown = -GameID = ID -Games = -Gameisalreadyinstalled = ̹ ġǾ ֽϴ. -GameRegion = -GameSize = 뷮 -GoBack = ڷ -//GotoPage = -HowtoShutdown =  ұ? -Language = -Langchange = -Left = -LikeSysMenu = ý ޴ó -LoadingincIOS = cIOS249 ε -Lock = -LockConsole = ܼ -MP3Menu = MP3 ޴ -Missingfiles = -Networkiniterror = Ʈũ ʱȭ -Neither = ǥ -Next = -No = ƴϿ -Nofilemissing = ! -NoHDDfound = ϵ ũ ϴ! -NoSDcardinserted = SDī尡 ϴ! -Nopartitionsfound = Ƽ ϴ. -NoUSBDevice = USB ġ ϴ. -NoWBFSpartitionfound = WBFS Ƽ ϴ. -NormalCovers = Ϲ ǥ -Normal = Ϲ -NotaWiiDisc = Wii ũ ƴմϴ -NoUSBDevicefound = USB ġ ϴ. -Notenoughfreespace = մϴ! -notset = -of = -OFF = -OfficialSite = Ʈ -ok = Ȯ -ON = -Parentalcontrol = ڳຸȣ -Partition = Ƽ -Password = йȣ -PasswordChanged = йȣ -Passwordhasbeenchanged = йȣ Ǿϴ -Passwordchange = йȣ -PowerofftheWii = Wii -Prev = -PromptsButtons = Ʈ/ư -ReloadSD = SDī б -RenameGameonWBFS = WBFS ̸ -Restart = ٽ -Return = ư -ReturntoWii = Wii ư -Right = -Rumble = -QuickBoot = ٷν -Save = -SaveFailed = -Specialthanksto = Special thanks to -For = for -theUSBLoaderandreleasingthesourcecodethe = and releasing the source code -secondsleft = ҽϴ -SelectthePartition = Ϸ -youwanttoformat = Ƽ ϼ -settings = -ShutdowntoIdle = · -ShutdownSystem = ý -Success = : -Successfullyinstalled = ġ : -Successfullydeleted = : -SuccessfullySaved = -SystemDefault = ý ⺻ -ThemePath = ׸ -ThemepathChanged = ׸ -Themepathchange = ׸ -Try = õ -Tooltips = Tooltips -Timeleft = ð: -Unlock = -Uninstall = -USBLoaderisprotected = USB δ GX -USBDevicenotfound = USB ġ ϴ. -VideoMode = -VIDTVPatch = VIDTV ġ -Volume = -Waiting = ٸ ... -WaitingforUSBDevice = USB ġ ٸ -WidescreenFix = ̵ ũ -WiiMenu = Wii ޴ -WrongPassword = ߸ йȣ -Yes = -YoudonthavecIOS = cIOS222 ϴ. -Japanese = Ϻ -German = Ͼ -English = -French = Ҿ -Spanish = ξ -Italian = ¸ -Dutch = ״ -SChinese = ߱(ü) -TChinese = ߱(ü) -Korean = ѱ \ No newline at end of file diff --git a/Languages/norwegian b/Languages/norwegian deleted file mode 100644 index 66141c07..00000000 --- a/Languages/norwegian +++ /dev/null @@ -1,192 +0,0 @@ -//r380, Norwegian v2, 21.05.2009 -ok = OK -addToFavorite = Favoritt -all = Alfabetisk -AppLanguage = Program sprk -t3Covers = 3D cover -Areyousure = Er du sikker? -AutoPatch = AutoPatch -Back = Tilbake -Backgroundmusic = Bakgrunnsmusikk -Backgroundmusicpath = Bakgrunnsmusikk sti endret -BacktoHBCorWiiMenu = Tilbake til HBC eller Wii meny -BacktoLoader = HBC/Loader -BacktoWiiMenu = Wii meny -BootStandard = Boot/Standard -Both = Begge -Cantcreatedirectory = Kan ikke opprette mappestruktur -Cancel = Avbryt -Cantbeformated = Kan ikke formateres -Cantdelete = Kan ikke slette: -ClicktoDownloadCovers = Klikk for laste ned cover -Clock = Klokke -Close = Lukk -Continueinstallgame = Fortsett installere spill? -ConsoleDefault = Konsoll Standard -Consoleshouldbeunlockedtomodifyit = Konsoll m vre opplst for modifisere. -ConsoleLocked = Konsoll lst -CorrectPassword = Riktig passord -Couldnotinitializenetwork = Kan ikke initialisere nettverk! -CouldnotopenDisc = Kan ikke pne plate -CouldnotinitializeDIPmodule = Kan ikke initialisere DIP modul! -CoverDownload = Cover nedlasting -CoverPath = Cover sti -CoverpathChanged = Cover sti endret -Coverpathchange = Endre cover sti -count = Ganger spilt -Credits = Medvirkende -DiscImages = Plate bilder -DiscimagePath = Plate sti -DiscpathChanged = Plate sti endret -Discpathchange = Endre plate sti -DiscDefault = Plate Standard -Display = Vis -Doyouwanttoformat = Vil du formatere: -Doyoureallywanttodelete = Er du sikker p at du vil slette: -Doyouwanttoretryfor30secs = Vil du fortsette prve i 30 sekunder? -Downloadingfile = Laster ned fil: -DownloadBoxartimage = Last ned cover bilde? -Downloadfinished = Nedlasting ferdig -Error = Feil ! -hour = Timer -Homemenu = HOME Meny -BOOTERROR = BOOT FEIL -ErrorreadingDisc = Feil ved lesing av plate -ExitUSBISOLoader = Avslutt USB Loader GX? -InitializingNetwork = Initialiserer nettverk -InsertDisk = Sett inn plate -InsertaWiiDisc = Sett inn en Wii plate! -InsertaSDCardtodownloadimages = Sett inn et SD-kort for laste ned bilder. -InsertaSDCardtosave = Sett inn et SD-kort for lagre. -InsertaSDCardtousethatoption = Sett inn et SD-kort for bruke innstillingen. -InstallRenameandDeleteareunlocked = Alle funksjonene til USB Loader GX er opplst. -Installerror = Installasjonsfeil! -Installagame = Installer et spill -Installinggame = Installerer spill: -Failedtoboot = Feil ved start: -FailedtomountfrontSDcard = Feil ved montering av SD-kort i front -FailedtosetUSB = Feil ved valgt USB: -Failedformating = Feil ved formatering -fave = Favoritter -filesnotfoundontheserver = filer ikke funnet p serveren! -Filenotfound = Fil ikke funnet. -filesleft = fil(er) gjenstr -FlipX = Flip-X -Force = Tving -Youneedtoformatapartition = Du m formatere en partisjon -Format = Formater -keyboard = Tastatur -Formattingpleasewait = Formaterer, vennligst vent... -formated = formatert! -free = ledig -FreeSpace = Ledig plass -FullShutdown = Skru helt av -GameID = Spill ID -Games = Spill -Gameisalreadyinstalled = Spillet er allerede installert: -GameRegion = Region -GameSize = Spill strrelse -GoBack = G tilbake -HowtoShutdown = Hvordan skru av? -Language = Sprk -Left = Venstre -LikeSysMenu = Lik Systemmeny -LoadingincIOS = Laster i cIOS249 -ListSort = Sorter spill liste -Loadingstandardlanguage = Laster standard sprk. -Loadingstandardmusic = Laster standard musikk. -Lock = Ls -LockConsole = Ls konsoll -MP3Menu = MP3 meny -Missingfiles = Manglende filer -Networkiniterror = Nettverk init feil -Neither = Ingen -Next = Neste -No = Nei -Nofilemissing = Ingen filer mangler! -NoHDDfound = Ingen HDD funnet! -NoSDcardinserted = Intet SD-kort satt i! -Nopartitionsfound = Ingen partisjoner funnet -NoUSBDevice = Ingen USB enhet -NoWBFSpartitionfound = Ingen WBFS partisjon funnet -NormalCovers = Normale cover -Normal = Normal -NotaWiiDisc = Ikke en Wii plate -NoUSBDevicefound = Ingen USB enhet funnet. -Notenoughfreespace = Ikke nok ledig plass! -Notasupportedformat = Ikke et stttet format! -notset = ikke satt -of = av -OFF = AV -OfficialSite = Offisiell nettside -ON = P -Parentalcontrol = Foreldre kontroll -Partition = Partisjon -Password = Passord -PasswordChanged = Passord endret -Passwordhasbeenchanged = Passord har blitt endret -Passwordchange = Endre passord -Plays = Ganger spilt -PowerofftheWii = Skru av Wii -Prev = Forrige -PromptsButtons = Dialog knapper -ReloadSD = Les SD p nytt -RenameGameonWBFS = Gi nytt navn til spill p WBFS -Restart = Start p nytt -Return = G tilbake -ReturntoWii = Tilbake til Wii meny -Right = Hyre -Rumble = Vibrasjon -QuickBoot = Hurtig start -Save = Lagre -SaveFailed = Lagre feilet -Specialthanksto = Spesiell takk til -For = for -theUSBLoaderandreleasingthesourcecodethe = og utgivelse av kildekoden -secondsleft = sekunder gjenstr -Setasbackgroundmusic = Bruk som bakgrunnsmusikk? -SelectthePartition = Velg partisjonen -youwanttoformat = du vil formatere -Standard = Standard -settings = Innstillinger -ShutdowntoIdle = Skru av -ShutdownSystem = Skru helt av -Success = Suksess: -Successfullyinstalled = Vellykket installering: -Successfullydeleted = Vellykket sletting: -SuccessfullySaved = Vellykket lagring -SystemDefault = System Standard -ThemePath = Tema sti -ThemepathChanged = Tema sti endret -Themepathchange = Endre tema sti -Titlestxtpath = Titles.txt sti -TitlestxtpathChanged = Titles.txt sti endret. -Titlestxtpathchange = Endre titles.txt sti -Try = Prv -Tooltips = Verktystips -Timeleft = Tid igjen: -Unlock = Ls opp -Unicodefix = Unicode fiks -Uninstall = Avinstaller -USBLoaderisprotected = USB Loader GX er beskyttet -USBDevicenotfound = USB enhet ikke funnet -VideoMode = Video modus -VIDTVPatch = VIDTV Patch -Volume = Volum -Waiting = Venter... -WaitingforUSBDevice = Venter p USB enhet -WidescreenFix = Fiks for 16/9 -WiiMenu = Wii meny -WrongPassword = Feil passord -Yes = Ja -YoudonthavecIOS = Du har ikke cIOS222 -Japanese = Japansk -German = Tysk -English = Engelsk -French = Fransk -Spanish = Spansk -Italian = Italiensk -Dutch = Nederlandsk -SChinese = S.Kinesisk -TChinese = T.Kinesisk -Korean = Koreansk \ No newline at end of file diff --git a/Languages/portuguesept b/Languages/portuguesept deleted file mode 100644 index 1880f883..00000000 --- a/Languages/portuguesept +++ /dev/null @@ -1,194 +0,0 @@ - t3Covers = Capas 3D - addToFavorite = Adicionar aos favoritos - all = Alfabtica - AppLanguage = Idioma - Areyousure = Tem a certeza? - AutoPatch = Patch automtico - Back = Voltar - Backgroundmusic = Msica de fundo - Backgroundmusicpath = Pasta Msica Fundo - BacktoHBCorWiiMenu = Voltar ao Loader/Menu da Wii - BacktoLoader = Loader - BacktoWiiMenu = Menu da Wii - BootStandard = Arranque/Standard - Both = Ambos - Cantcreatedirectory = No foi possvel criar a pasta - Cancel = Cancelar - Cantbeformated = No pode pode ser formatado - Cantdelete = No foi possvel apagar: - ClicktoDownloadCovers = Carregue para descarregar capas - Clock = Relgio - Close = Fechar - Continueinstallgame = Continuar instalao do jogo? - ConsoleDefault = Predefinio Consola - Consoleshouldbeunlockedtomodifyit = necessrio desbloquear a configurao para poder modificar o parmetro. - ConsoleLocked = Configurao Bloqueada - CorrectPassword = Password Correcta - Couldnotinitializenetwork = No foi possvel incializar a Ligao de Rede! - CouldnotopenDisc = No foi possvel abrir o Disco - CouldnotinitializeDIPmodule = No foi possvel inicializar o mdulo DIP! - CoverDownload = Download de Capas - CoverPath = Pasta Capas - CoverpathChanged = Pasta das Capas alterado - Coverpathchange = Alterar Pasta das Capas - count = Vezes jogadas - Credits = Crditos - DiscImages = Imagens de Disco - DiscimagePath = Pasta Imagens Disco - DiscpathChanged = Pasta das Imagens Disco alterada - Discpathchange = Alterar da Pasta das Imagens de Disco - DiscDefault = Predefinio Disco - Display = Mostrar - Doyouwanttoformat = Deseja FORMATAR: - Doyoureallywanttodelete = Quer mesmo REMOVER o jogo: - Doyouwanttoretryfor30secs = Deseja tentar novamente dentro de 30 segs? - Downloadingfile = Descarregando ficheiro: - DownloadBoxartimage = Descarregar imagem da Caixa? - Downloadfinished = Download Terminado - Error = Erro ! - hour = Horas - BOOTERROR = ERRO DE ARRANQUE - ErrorreadingDisc = Erro ao ler o Disco - ExitUSBISOLoader = Pretende sair do USB Loader GX? - InitializingNetwork = Inicializando Ligao de Rede - InsertDisk = Insira o Disco - InsertaWiiDisc = Insira um Disco da Wii! - InsertaSDCardtodownloadimages = Insira um carto SD para descarregar as imagens. - InsertaSDCardtosave = Insira um carto SD para guardar. - InsertaSDCardtousethatoption = Insira um carto SD para usar esta funcionalidade. - InstallRenameandDeleteareunlocked = As configuraes esto desbloqueadas. - Installerror = Erro de Instalao! - Installagame = Instalar um jogo - Installinggame = Instalando jogo: - Failedtoboot = Falha ao arrancar: - FailedtomountfrontSDcard = Falha ao montar carto SD - FailedtosetUSB = Falha ao iniciar USB: - Failedformating = Falha ao formatar - fave = Favoritos - Filenotfound = Ficheiro no encontrado. - filesnotfoundontheserver = ficheiros no encontrados no servidor! - filesleft = ficheiros(s) restante(s) - FlipX = Paginao Horizontal - Force = Forar - Youneedtoformatapartition = necessrio FORMATAR a partio - Format = Formatar - Formattingpleasewait = Formatando, por favor aguarde... - formated = formatado! - free = livres - FreeSpace = Espao Livre - FullShutdown = Desligar - GameID = ID do Jogo - Games = Jogos - Gameisalreadyinstalled = Este jogo j est instalado: - GameRegion = Regio - GameSize = Tamanho do Jogo - GoBack = Voltar - //GotoPage = Ir para a Pgina - HowtoShutdown = Como desligar a consola? - Homemenu = Men Inicial - Keyboard = Teclado - Language = Idioma - Langchange = Alterar Idioma - Left = Esquerda - LikeSysMenu = Igual ao Menu da Wii - ListSort = Ordenao Jogos - LoadingincIOS = Carregando com o cIOS249 - Loadingstandardlanguage = Carregado idioma padro. - Loadingstandardmusic = Carregando msica padro. - Lock = Bloquear - LockConsole = Bloquear Configuraes - MP3Menu = Menu MP3 - Missingfiles = Ficheiros em falta - Networkiniterror = Erro ao inicializar ligao de rede - Neither = Nenhum - Next = Prximo - No = No - Nofilemissing = No h ficheiros em falta! - NoHDDfound = No foi encontrado nenhum Disco Rgido! - NoSDcardinserted = Carto SD no inserido! - Nopartitionsfound = No foram encontradas parties - NoUSBDevice = Nenhum dispositivo USB encontrado - NoWBFSpartitionfound = No foi encontrada nenhuma partio WBFS - NormalCovers = Capas Normais - Normal = Normal - NotaWiiDisc = No um Disco da Wii - NoUSBDevicefound = Nenhum dispositivo USB encontrado. - Notenoughfreespace = No h espao livre suficiente! - notset = no definido - of = de - OFF = Desligado - OfficialSite = Site Oficial - ok = OK - ON = Ligado - Parentalcontrol = Controlo Parental - Partition = Partio - Password = Password - PasswordChanged = Password Alterada - Passwordhasbeenchanged = A Password foi alterada - Passwordchange = Alterar Password - Plays = Vezes jogadas - PowerofftheWii = Desligar a Wii - Prev = Anterior - PromptsButtons = Mensagens/Botes - ReloadSD = Actualizar do carto SD - RenameGameonWBFS = Alterar nome do jogo na partio WBFS - Restart = Reiniciar - Return = Voltar - ReturntoWii = Menu da Wii - Right = Direita - Rumble = Vibrao - QuickBoot = Arranque Rpido - Save = Gravar - SaveFailed = Falha ao Gravar - Specialthanksto = Agradecimentos - Titlestxtpath = Pasta Titles.txt - TitlestxtpathChanged = Pasta do ficheiro titles.txt alterada. - Titlestxtpathchange = Alterar pasta do titles.txt - For = pelo - theUSBLoaderandreleasingthesourcecodethe = e ter disponibilizado o cdigo fonte - secondsleft = segundos restantes - SelectthePartition = Seleccione a Partio - youwanttoformat = Deseja formatar? - Standard = Standard - settings = Configuraes - ShutdowntoIdle = Standby - ShutdownSystem = Desligar - Success = Sucesso: - Successfullyinstalled = Instalado com Sucesso: - Successfullydeleted = Removido com Sucesso: - SuccessfullySaved = Gravado com Sucesso - SystemDefault = Predefinio Sistema - ThemePath = Pasta Temas - ThemepathChanged = Pasta dos Temas alterada - Themepathchange = Alterar pasta dos Temas - Try = Tentar - Tooltips = Dicas - Timeleft = Tempo restante: - Unlock = Desbloquear - Unicodefix = Corrigir Unicode - Uninstall = Remover - USBLoaderisprotected = O USB Loader GX est bloqueado - USBDevicenotfound = Dispositivo USB no encontrado - VideoMode = Modo de Vdeo - VIDTVPatch = Patch VIDTV - Volume = Volume - Waiting = Aguardando... - WaitingforUSBDevice = Aguardando pelo Dispositivo USB - WidescreenFix = Correco Widescreen - WiiMenu = Menu da Wii - WrongPassword = Password Incorrecta - Yes = Sim - YoudonthavecIOS = cIOS222 no instalado - Japanese = Japons - German = Alemo - English = Ingls - French = Francs - Spanish = Espanhol - Italian = Italiano - Dutch = Holands - SChinese = Chins Simplificado - TChinese = Chins Tradicional - Korean = Coreano - // Portuguese(pt-pt) Language File rev4.4 (22-05-2009 9:54) for GUI USB Loader GX 1 - // Tested with Loader rev385 - // Translated by Sky8000 \ No newline at end of file diff --git a/Languages/russian b/Languages/russian deleted file mode 100644 index e33338e2..00000000 --- a/Languages/russian +++ /dev/null @@ -1,186 +0,0 @@ -Specialthanksto = Отдельное спасибо : -addToFavorite = Добавить в избранное -t3Covers = 3D Обложки -AppLanguage = Язык приложения -Areyousure = Вы уверены ? -AutoPatch = Авто Патч -Back = Назад -Backgroundmusic = Фоновая музыка -Backgroundmusicpath = Путь к фоновой музыке -BacktoHBCorWiiMenu = Вернуться в HBC или меню Wii -BacktoLoader = Вернуться в загрузчик -BacktoWiiMenu = Вернуться в меню Wii -BootStandard = Загрузка/Стандарт -Both = Оба -Cantcreatedirectory = Не могу создать папку -Cancel = Отмена -Cantbeformated = Невозможно отформатировать -Cantdelete = Невозможно удалить: -ClicktoDownloadCovers = Нажми, чтобы скачать обложки -Clock = Часы -Close = Закрыть -Continueinstallgame = Продолжить установку игры ? -ConsoleDefault = По умолчанию (консоль) -Consoleshouldbeunlockedtomodifyit = Для изменения консоль должна быть разблокирована. -ConsoleLocked = Консоль заблокирована -CorrectPassword = Правильный пароль -Couldnotinitializenetwork = Не могу инициализировать сеть! -CouldnotopenDisc = Не могу прочесть диск -CouldnotinitializeDIPmodule = Не могу запустить модуль DIP! -CoverDownload = Скачать обложку -CoverPath = Путь к обложкам -CoverpathChanged = Путь к обложкам был изменен. -Coverpathchange = Сменить путь к обложкам -Credits = Об авторах -DiscImages = Изображения дисков -DiscimagePath = путь к изображениям дисков -DiscpathChanged = путь к изображениям дисков изменен -Discpathchange = изменить путь к изображениям дисков -DiscDefault = По умолчанию (диск) -Display = Отображать -Doyouwanttoformat = Вы хотите отформатировать: -Doyoureallywanttodelete = Вы хотите удалить: -Doyouwanttoretryfor30secs = Хотите попробовать еще раз на 30 секунд? -Downloadingfile = Скачиваю файл: -DownloadBoxartimage = Скачать обложку диска? -Downloadfinished =Скачивание завершено -Error = Ошибка ! -BOOTERROR = ОШИБКА ЗАГРУЗКИ -ErrorreadingDisc = Ошибка чтения диска -ExitUSBISOLoader = Выйти из USB Loader GX? -InitializingNetwork = Инициализирую сеть -InsertDisk = Вставьте диск -InsertaWiiDisc = Вставьте диск от Wii! -InsertaSDCardtodownloadimages = Для скачивания изображений вставьте SD карту. -InsertaSDCardtosave = Для сохранения вставьте SD карту. -InsertaSDCardtousethatoption = Для использования этой функции нужна SD карта -InstallRenameandDeleteareunlocked = Все функции USB Loader GX разблокированы. -Installerror = Ошибка установки! -Installagame = Установить игру -Installinggame = Устанавливаю игру: -Failedtoboot = Ошибка загрузки: -FailedtomountfrontSDcard = Ошибка при монтировании SD карты -FailedtosetUSB = Ошибка инициализации USB: -Failedformating = Форматирование не удалось -Filenotfound = Файл не найден -filesnotfoundontheserver = файлы не найдены на сервере! -filesleft = осталось файлов: -FlipX = Flip-X -Force = Принудительно -Youneedtoformatapartition = Требуется форматирование раздела -Format = Форматировать -Formattingpleasewait = Форматирую, пожалуйста подождите... -formated = форматирование завершено! -free = свободно -FreeSpace = Свободное пространство -FullShutdown = Полное отключение -GameID = ID игры -Games = Игры -Gameisalreadyinstalled = Игра уже установлена: -GameRegion = Регион -GameSize = Размер игры -GoBack = Назад -GotoPage = На страницу -HowtoShutdown = Способ отключения? -Homemenu = Домашнее Меню -Language = Язык -Langchange = Сменить язык -Left = Налево -LikeSysMenu = как SysMenu -LoadingincIOS = загружаю с cIOS249 -Lock = Заблокировать -LockConsole = Заблокировать консоль -MP3Menu = Меню MP3 -Missingfiles = Отсутствующие файлы -Networkiniterror = Ошибка инициализации сети -Neither = Ни то, ни другое -Next = Следующий -No = Нет -Nofilemissing = Файл не найден! -NoHDDfound = HDD не найден! -NoSDcardinserted = SD карта не вставлена! -Nopartitionsfound = Разделы не найдены -NoUSBDevice = Нет USB устройств -NoWBFSpartitionfound = Не найден раздел WBFS -NormalCovers = Обычные обложки -Normal = Обычный -NotaWiiDisc = Это не диск Wii -NoUSBDevicefound =USB устройств не обнаружено -Notenoughfreespace = Не хватает свободного места! -Notasupportedformat = Формат не поддерживается -notset = не установлено -of = из -OFF = ВЫКЛ -OfficialSite = Официальный сайт -ok = OK -ON = ВКЛ -Parentalcontrol = Родительский контроль -Partition = Раздел -Password = Пароль -PasswordChanged = Пароль изменен -Passwordhasbeenchanged = Пароль был изменен -Passwordchange = Сменить пароль -PowerofftheWii = Выключить Wii -Plays = Воспроизводится -Prev = Предыдущий -PromptsButtons = Кнопки приглашения -ReloadSD = Перечитать SD карту -RenameGameonWBFS = Переименовать игры в WBFS -Restart = Перезапустить -Return = Вернуться -ReturntoWii = Вернуться в меню Wii -Right = Направо -Rumble = Вибрация -QuickBoot = Быстрая загрузка -Save = Сохранить -SaveFailed = Сохранение не удалось -Specialthanksto = Отдельные благодарности -For = за -theUSBLoaderandreleasingthesourcecodethe = и публикацию исходного кода -secondsleft = секунд осталось -SelectthePartition = Выберите раздел, -youwanttoformat = который вы хотите отформатировать -settings = Установки -Standard = Стандартный -ShutdowntoIdle = Перевести в режим сна -ShutdownSystem = Выключить систему -Success = Успех: -Successfullyinstalled = Успешно установлено: -Successfullydeleted = Успешно удалено: -SuccessfullySaved = Успешно сохранено -SystemDefault = По умолчанию -ThemePath = Путь к темам -ThemepathChanged = путь к темам изменён -Themepathchange = изменить путь к темам -Titlestxtpath = путь к titles.txt -Titlestxtpathchange = изменить путь к titles.txt -TitlestxtpathChanged = путь к titles.txt изменён -Try = Попытка -Tooltips = Подсказки -Timeleft = Осталось времени: -Unlock = Разблокировать -Unicodefix = фикс Unicode -Uninstall = Деинсталлировать -USBLoaderisprotected = USB Loader GX заблокирован -USBDevicenotfound = USB устройство не найдено -VideoMode = Видео режим -VIDTVPatch = патч VIDTV -Volume = Громкость -Waiting = Ожидание... -WaitingforUSBDevice = Ожидание USB устройства -WidescreenFix = Широкоформатный фикс -WiiMenu = Меню Wii -WrongPassword = Неверный пароль -Yes = Да -YoudonthavecIOS = У вас не установлен cIOS222 -Japanese = Японский -German = Немецкий -English = Английский -French = Французский -Spanish = Испанский -Italian = Итальянский -Dutch = Голландский -SChinese = Упрощенный китайский -TChinese = Традиционный китайский -Korean = Корейский -Russian = Русский diff --git a/Languages/schinese b/Languages/schinese deleted file mode 100644 index 5bd60ce1..00000000 --- a/Languages/schinese +++ /dev/null @@ -1,178 +0,0 @@ -Specialthanksto = رл -t3Coverst = 3D -AppLanguage = 趨 -Areyousure = ȷ? -AutoPatch = Զѡ -Back = -BacktoHBCorWiiMenu = HBC Wii ϵͳ˵ -BacktoLoader = Loader -BacktoWiiMenu = Wii ϵͳ˵ -BootStandard = /׼ -BothBoth = ȫ -Cantcreatedirectory = ޷Ŀ¼ -Cancel = ȡ -Cantbeformated = ޷ʽ -Cantdelete = ޷ɾ: -ClicktoDownloadCovers = ط -Clock = ʱ -Continueinstallgame = װϷ? -ConsoleDefault = Ĭ -Consoleshouldbeunlockedtomodifyit = Կ趨. -ConsoleLocked = -CorrectPassword = ȷ -Couldnotinitializenetwork = ޷! -CouldnotopenDisc = ޷ -CouldnotinitializeDIPmodule = ޷ DIP ģ! -CoverDownload = ط -CoverPath = · -CoverpathChanged = ·ѱ -Coverpathchange = · -Credits = Credits -DiscImages = DVD -DiscimagePath = ˵· -DiscpathChanged = DVD·ѱ -Discpathchange = DVD· -DiscDefault = ϷĬ -Display = ʾ -Doyouwanttoformat = Ƿʽ: -Doyoureallywanttodelete = ȷɾ: -Doyouwanttoretryfor30secs = Ƿȴ30? -Downloadingfile = ļ: -DownloadBoxartimage = طͼƬ? -Downloadfinished = -Error = ! -BOOTERROR = -ErrorreadingDisc = ȡ̴ -ExitUSBISOLoader = 뿪 USB Loader GX? -InitializingNetwork = -InsertDisk = -InsertaWiiDisc = Wii ! -InsertaSDCardtodownloadimages = SD ط. -InsertaSDCardtosave = SD. -InstallRenameandDeleteareunlocked = USB Loader GX ѽ. -Installerror = װ! -Installagame = װϷ -Installinggame = ڰװϷ: -Failedtoboot = ޷: -FailedtomountfrontSDcard = ǰ SD ʧ -FailedtosetUSB = ޷趨 USB: -Failedformating = ʽʧ -filesnotfoundontheserver = ޴ļ! -filesleft = ʣļ -FlipX = -Force = ǿ -Youneedtoformatapartition = ʽһ -Format = ʽ -Formattingpleasewait = ʽ, Ժ... -formated = ɸʽ! -free = ʣ -FreeSpace = ʣռ -FullShutdown = ȫػ -GameID = ϷID -Games = Ϸ -Gameisalreadyinstalled = ѰװϷ: -GameRegion = -GameSize = Ϸ -GoBack = -GotoPage = ǰҳ -HowtoShutdown = ιػ? -Language = -Langchange = -Left = -LikeSysMenu = ͬϵͳѡ -LoadingincIOS = cIOS249 -Lock = -LockConsole = ̨ -MP3Menu = MP3 ѡ -Missingfiles = ȱٵļ -Networkiniterror = -Neither = ȫ -Next = -No = -Nofilemissing = ûȱٵļ! -NoHDDfound = ҲӲ! -NoSDcardinserted = δ SD ! -Nopartitionsfound = Ҳ -NoUSBDevice = û USB 豸 -NoWBFSpartitionfound = Ҳ WBFS -NormalCovers = һ -Normal = һ -NotaWiiDisc = Wii Ĺ -NoUSBDevicefound = Ҳ USB 豸. -Notenoughfreespace = ʣռ䲻! -notset = δ趨 -of = -OFF = ر -OfficialSite = ٷַ -ok = ȷ -ON = -Parentalcontrol = ҳ -Partition = -Password = -PasswordChanged = ѱ -Passwordhasbeenchanged = ѱ -Passwordchange = -PowerofftheWii = رWii -Prev = ǰ -PromptsButtons = ʾУ -ReloadSD = SD -RenameGameonWBFS = ıWBFS(Ӳ)ϵϷ -Restart = -Return = -ReturntoWii = Wiiϵͳ˵ -Right = -Rumble = -QuickBoot = -Save = -SaveFailed = ʧ -Specialthanksto = رл -For = -theUSBLoaderandreleasingthesourcecodethe = ųԭ -secondsleft = ʣ -SelectthePartition = ѡ -youwanttoformat = Ƿʽ -settings = -ShutdowntoIdle = ״̬ -ShutdownSystem = رϵͳ -Success = ɹ: -Successfullyinstalled = ɹİװ: -Successfullydeleted = ɹɾ: -SuccessfullySaved = ɹ -SystemDefault = ϵͳĬ -ThemePath = · -ThemepathChanged = ·ѱ -Themepathchange = · -Try = -Tooltips = ʾ -Timeleft = ʣʱ: -Unlock = -Uninstall = ɾ -USBLoaderisprotected = USB Loader GX -USBDevicenotfound = Ҳ USB 豸 -VideoMode = Ƶʽ -VIDTVPatch = VIDTV ޸ -Volume = -Waiting = ȴ... -WaitingforUSBDevice = ȴ USB 豸 -WidescreenFix = У -WiiMenu = Wii ϵͳ˵ -WrongPassword = -Yes = -YoudonthavecIOS = δװ cIOS222 -Japanese = -German = -English = Ӣ -French = -Spanish = -Italian = -Dutch = -SChinese = -TChinese = -Korean = -keyboard = -Unicodefix = Unicode -Filenotfound = Ҳļ -Loadingstandardlanguage = ׼ -Titlestxtpath = Titles.txt · -TitlestxtpathChanged = titles.txt ·ѱ -Titlestxtpathchange = titles.txt · diff --git a/Languages/spanish b/Languages/spanish deleted file mode 100644 index 0861c5b5..00000000 --- a/Languages/spanish +++ /dev/null @@ -1,194 +0,0 @@ -t3Covers = Cartulas 3D -addToFavorite = Favoritos -all = Alfabtico -AppLanguage = Idioma Aplic. -Areyousure = Ests seguro? -AutoPatch = Auto-Parchear -Back = Volver -Backgroundmusic = Msica de fondo -Backgroundmusicpath = Ruta a Msica cambiada -BacktoHBCorWiiMenu = Volver a HBC o Men Wii -BacktoLoader = Volver al HBC -BacktoWiiMenu = Volver a Men Wii -BootStandard = Inicio/Estandar -Both = Ambos -Cantcreatedirectory = No se cre directorio -Cancel = Cancelar -Cantbeformated = No se pudo formatear -Cantdelete = No se elimin: -ClicktoDownloadCovers = Click para bajar Cartulas -Clock = Reloj -Close = Cerrar -Continueinstallgame = Continuar instalando juego? -ConsoleDefault = Pred. Consola -Consoleshouldbeunlockedtomodifyit = Debes desbloquear la consola para modificar. -ConsoleLocked = Consola Bloqueada -CorrectPassword = Contrasea Correcta -Couldnotinitializenetwork = No se pudo iniciar la Conexin! -CouldnotopenDisc = No se puede abrir Disco -CouldnotinitializeDIPmodule = No se pudo iniciar mdulo DIP! -CoverDownload = Descarga de Cartulas -CoverPath = Ruta Cartulas -CoverpathChanged = Ruta de Cartulas cambiada -Coverpathchange = Cambio ruta Cartulas -count = Veces Jugadas -Credits = Crditos -DiscImages = Imgen Discos -DiscimagePath = Ruta Img. Disco -DiscpathChanged = Ruta Img. Disco cambiada -Discpathchange = Cambio ruta Img. Disco -DiscDefault = Pred. Disco -Display = Mostrar -Doyouwanttoformat = Quieres formatear: -Doyoureallywanttodelete = Realmente quieres borrar?: -Doyouwanttoretryfor30secs = Quires reintentar por 30 segs.? -Downloadingfile = Descargando archivo: -DownloadBoxartimage = Descargar Imgenes? -Downloadfinished = Descarga completa -Error = Error! -BOOTERROR = ERROR DE INICIO -ErrorreadingDisc = Error leyendo Disco -ExitUSBISOLoader = Salir de USB Loader GX? -Homemenu = Men de Inicio -InitializingNetwork = Iniciando Conexin -InsertDisk = Inserta el Disco -InsertaWiiDisc = Inserta un Disco Wii! -InsertaSDCardtodownloadimages = Insertar SD para bajar imgenes. -InsertaSDCardtosave = Insertar SD para guardar. -InsertaSDCardtousethatoption = Insertar SD para usar esta opcin -InstallRenameandDeleteareunlocked = Todas las caracteristicas del USB Loader GX desbloqueadas. -Installerror = Error de Instalacin! -Installagame = Instalar un juego -Installinggame = Instalando juego: -Failedtoboot = Fallo al iniciar: -FailedtomountfrontSDcard = Fallo al montar SD -FailedtosetUSB = Fallo al iniciar USB: -Failedformating = Fallo al formatear -fave = Favoritos -Filenotfound = Archivo no encontrado. -filesnotfoundontheserver = Archivo(s) no encontrado(s) en el servidor! -filesleft = archivo(s) restante(s) -FlipX = Desplazamiento X -Force = Forzar -Youneedtoformatapartition = Necesitas formatear una particin -Format = Formateo -Formattingpleasewait = Formateando, por favor espera... -formated = formateado! -free = libres -FreeSpace = Espacio Libre -FullShutdown = Apagado Total -GameID = ID de Juego -Games = Juegos -Gameisalreadyinstalled = El juego ya estaba instalado: -GameRegion = Regin -GameSize = Tamao del Juego -GoBack = Volver -//GotoPage = Ir a Pgina -HowtoShutdown = Cmo Apagar? -hour = Horas -Keyboard = Teclado -Language = Idioma -Langchange = Cambio de Idioma -Left = Izquierda -LikeSysMenu = Como Men Sist. -LoadingincIOS = Cargando en cIOS249 -ListSort = Ordenar juegos -Loadingstandardlanguage = Cargando idioma estandar. -Loadingstandardmusic = Cargando msica estandar. -Lock = Bloquear -LockConsole = Bloquear consola -MP3Menu = Men MP3 -Missingfiles = Archivo(s) faltante(s) -Networkiniterror = Error inicio conexin -Neither = Ninguno -Next = Siguiente -No = No -Nofilemissing = No faltan archivos! -NoHDDfound = HDD no encontrado! -NoSDcardinserted = SD no insertada! -Nopartitionsfound = Particiones no encontradas -NoUSBDevice = USB no encontrado -NoWBFSpartitionfound = Particin WBFS no encontrada -NormalCovers = Cartulas Norm. -Normal = Normal -NotaWiiDisc = No es un Disco Wii -NoUSBDevicefound = USB no encontrado. -Notenoughfreespace = No hay suficiente espacio libre! -Notasupportedformat = Formato no soportado. -notset = no puesto -of = de -OFF = Apagado -OfficialSite = Sitio Oficial -ok = OK -ON = Encendido -Parentalcontrol = Control Parental -Partition = Particin -Password = Contrasea -PasswordChanged = Contrasea cambiada -Passwordhasbeenchanged = Contrasea ha sido cambiada -Passwordchange = Cambio Contrasea -PowerofftheWii = Apagar la Wii -Plays = Veces Jugadas -Prev = Ant. -PromptsButtons = Botones -ReloadSD = Recargar SD -RenameGameonWBFS = Renombrar juego en WBFS -Restart = Reiniciar -Return = Volver -ReturntoWii = Volver a Men Wii -Right = Derecha -Rumble = Vibracin -QuickBoot = Inicio Rpido -Save = Guardar -SaveFailed = Fallo al guardar -Specialthanksto = Agradecimientos a -For = por -theUSBLoaderandreleasingthesourcecodethe = y liberar el cdigo fuente -secondsleft = segundos restantes -SelectthePartition = Selecciona la particin -youwanttoformat = quieres formatear? -settings = Configuracin -Setasbackgroundmusic = Poner como msica de fondo -Standard = Estandar -ShutdowntoIdle = Apagar a Idle -ShutdownSystem = Apagar Sistema -Success = Conseguido: -Successfullyinstalled = Instalado correctamente: -Successfullydeleted = Borrado correctamente: -SuccessfullySaved = Guardado correctamente -SystemDefault = Pred. Sistema -ThemePath = Ruta del Tema -ThemepathChanged = Ruta de Tema cambiada -Themepathchange = Cambio Ruta de Tema -Titlestxtpath = Ruta Titles.txt -TitlestxtpathChanged = Ruta a titles.txt cambiada. -Titlestxtpathchange = Cambio ruta titles.txt -Try = Intentar -Tooltips = InfoBurbujas -Timeleft = T. restante: -Unlock = Desbloquear -Unicodefix = Prche Unicode -Uninstall = Desinstalar -USBLoaderisprotected = USB Loader GX est protegido -USBDevicenotfound = USB no encontrado -VideoMode = Modo Video -VIDTVPatch = Parche VIDTV -Volume = Volumen -Waiting = Esperando... -WaitingforUSBDevice = Esperando al Dispositivo USB -WidescreenFix = Ajuste panormico -WiiMenu = Men de Wii -WrongPassword = Contrasea incorrecta -Yes = Si -YoudonthavecIOS = No tienes un cIOS222 -Japanese = Japons -German = Alemn -English = Ingls -French = Francs -Spanish = Espaol -Italian = Italiano -Dutch = Holands -SChinese = Chino Simplif. -TChinese = Chino Tradic. -Korean = Coreano - diff --git a/Languages/tchinese b/Languages/tchinese deleted file mode 100644 index 473fb761..00000000 --- a/Languages/tchinese +++ /dev/null @@ -1,178 +0,0 @@ -Specialthanksto = SOP -t3Coverst = 3D ʭ -AppLanguage = y]w -Areyousure = Tw? -AutoPatch = ۰ʭק -Back = ^ -BacktoHBCorWiiMenu = ^ HBC Wii tο -BacktoLoader = ^ Loader -BacktoWiiMenu = ^ Wii tο -BootStandard = Ұ/з -Both = -Cantcreatedirectory = Lkͥؿ -Cancel = -Cantbeformated = Lk榡 -Cantdelete = LkR: -ClicktoDownloadCovers = IiʭU -Clock = -Continueinstallgame = ~w˹C? -ConsoleDefault = Dw] -Consoleshouldbeunlockedtomodifyit = ݸH}ҳ]w\. -ConsoleLocked = xw -CorrectPassword = KXT -Couldnotinitializenetwork = LkҰʺ! -CouldnotopenDisc = Lk}ҥ -CouldnotinitializeDIPmodule = LkҰ DIP Ҳ! -CoverDownload = Uʭ -CoverPath = ʭs| -CoverpathChanged = ʭ|wܧ -Coverpathchange = ܧʭ| -Credits = Credits -DiscImages = йϹ -DiscimagePath = йϹ| -DiscpathChanged = йϹ|wܧ -Discpathchange = ܧйϹ| -DiscDefault = йw] -Display = -Doyouwanttoformat = O_榡: -Doyoureallywanttodelete = TwR: -Doyouwanttoretryfor30secs = O_30? -Downloadingfile = Uɮ: -DownloadBoxartimage = U~ʭϤ? -Downloadfinished = U -Error = ~ ! -BOOTERROR = Ұʿ~ -ErrorreadingDisc = Ūп~ -ExitUSBISOLoader = } USB Loader GX? -InitializingNetwork = bҰʺ -InsertDisk = J -InsertaWiiDisc = J Wii ! -InsertaSDCardtodownloadimages = J SD dUʭ. -InsertaSDCardtosave = JSDdxs. -InstallRenameandDeleteareunlocked = USB Loader GX \w. -Installerror = w˿~! -Installagame = w˹C -Installinggame = bw˹C: -Failedtoboot = LkҰ: -FailedtomountfrontSDcard = e SD d -FailedtosetUSB = Lk]w USB: -Failedformating = 榡ƥ -filesnotfoundontheserver = ALɮ! -filesleft = ѤUɮ -FlipX = Wh -Force = j -Youneedtoformatapartition = 榡Ƥ@Ӻϰ -Format = 榡 -Formattingpleasewait = 榡Ƥ, еy... -formated = 榡! -free = -FreeSpace = ѾlŶ -FullShutdown = -GameID = CNX -Games = Cƶq -Gameisalreadyinstalled = ww˹LC: -GameRegion = CϽX -GameSize = Ceq -GoBack = ^ -//GotoPage = e -HowtoShutdown = p? -Keyboard = L -Language = y -Langchange = ܧy -Left = -LikeSysMenu = Ptο -LoadingincIOS = H cIOS249 J -Lock = w -LockConsole = wx -MP3Menu = MP3 -Missingfiles = 򥢪ɮ -Networkiniterror = Ұʿ~ -Neither = Ҥ -Next = -No = _ -Nofilemissing = Sʤ֪ɮ! -NoHDDfound = 䤣w! -NoSDcardinserted = J SD d! -Nopartitionsfound = 䤣ϰ -NoUSBDevice = S USB ˸m -NoWBFSpartitionfound = 䤣 WBFS ϰ -NormalCovers = @ʭ -Normal = @ -NotaWiiDisc = O Wii -NoUSBDevicefound = 䤣 USB ˸m. -Notenoughfreespace = ѾlŶ! -notset = ]w -of = ѾlŶ `eq -OFF = -OfficialSite = x} -ok = Tw -ON = } -Parentalcontrol = ˤl -Partition = ϰ -Password = KX -PasswordChanged = KXwܧ -Passwordhasbeenchanged = KXwQܧ -Passwordchange = ܧKX -PowerofftheWii = WiiD -Prev = e -PromptsButtons = ܮե -ReloadSD = sJSDd -RenameGameonWBFS = WBFSWCW -Restart = sҰ -Return = ^ -ReturntoWii = ^Wiitο -Right = k -Rumble = _ -QuickBoot = ֳtҰ -Save = xs -SaveFailed = xs -Specialthanksto = SOP -For = -theUSBLoaderandreleasingthesourcecodethe = XlX -secondsleft = Ѿl -SelectthePartition = ܺϰ -youwanttoformat = O_榡 -settings = ]w -ShutdowntoIdle = iJݾA -ShutdownSystem = t -Success = \: -Successfullyinstalled = \w: -Successfullydeleted = \R: -SuccessfullySaved = xs\ -SystemDefault = tιw] -ThemePath = IDD -ThemepathChanged = IDD|wܧ -Themepathchange = ܧIDD| -Try = -Tooltips = u㴣 -Timeleft = Ѿlɶ: -Unlock = -Uninstall = -USBLoaderisprotected = USB Loader GX Qw -USBDevicenotfound = 䤣 USB ˸m -VideoMode = v榡 -VIDTVPatch = VIDTV ק -Volume = q -Waiting = ݤ... -WaitingforUSBDevice = USB ˸m -WidescreenFix = eùե -WiiMenu = Wii tο -WrongPassword = KX~ -Yes = O -YoudonthavecIOS = w cIOS222 -Japanese = -German = w -English = ^ -French = k -Spanish = Z -Italian = qjQ -Dutch = -SChinese = ²餤 -TChinese = c餤 -Korean = -Unicodefix = Unicode ץ -Filenotfound = 䤣ɮ -Loadingstandardlanguage = Jзǻy -Titlestxtpath = Titles.txt | -TitlestxtpathChanged = titles.txt |wܧ -Titlestxtpathchange = ܧ titles.txt | diff --git a/Languages/turkish b/Languages/turkish deleted file mode 100644 index 53888c39..00000000 --- a/Languages/turkish +++ /dev/null @@ -1,172 +0,0 @@ -Specialthanksto = zel tesekkrler : -t3Covers = 3B Kapaklar -AppLanguage = Program Lisani -Areyousure = Emin misiniz? -AutoPatch = OtoYama -Back = Geri -BacktoHBCorWiiMenu = HBC veya Wii Menye dns -BacktoLoader = Ykleyiciye dns -BacktoWiiMenu = Wii Menye dns -BootStandard = Boot/Standard -BothBoth = Ikisi de -Cantcreatedirectory = Klasr olusturulamiyorF -Cancel = Iptal -Cantbeformated = Biimlendirilemiyor -Cantdelete = Silinemiyor -ClicktoDownloadCovers = Kapaklari Indirmek iin Tiklayin -Clock = Saat -Continueinstallgame = Oyunu kurmaya devam et? -ConsoleDefault = Konsol Ayari -Consoleshouldbeunlockedtomodifyit = Degistirmek iin konsolun kilidini amalisin. -ConsoleLocked = Konsol Kilitli -CorrectPassword = Dogru Sifre -Couldnotinitializenetwork = Aga baglanilamiyor! -CouldnotopenDisc = Disk ailamiyor -CouldnotinitializeDIPmodule = DIP modl baslatilamiyor! -CoverDownload = Kapak Indirme -CoverPath = Kapak Yolu -CoverpathChanged = Kapak Yolu Degistir -Coverpathchange = Kapak Yolunu Degistir -Credits = Emegi Geenler -DiscImages = Disk Resimleri -DiscimagePath = Disk Resimleri Yolu -DiscpathChanged = Disk Resimleri Yolu Degistirildi -Discpathchange = Disk Resimleri Yolunu Degistir -DiscDefault = Disk Ayari -Display = Grnt -Doyouwanttoformat = Formatlamak istiyor musunuz: -Doyoureallywanttodelete = Gerekten silmek istiyor musunuz: -Doyouwanttoretryfor30secs = 30 saniye sonra denemek ister misiniz? -Downloadingfile = Indirilen dosya: -DownloadBoxartimage = Kutu resmini indirmek ister misiniz? -Downloadfinished = Indirme tamamlandi -Error = Hata ! -BOOTERROR = AILIS HATASI -ErrorreadingDisc = Disk Okuma Hatasi -ExitUSBISOLoader = USB Loader GX'dan ik? -InitializingNetwork = Aga Baglaniliyor -InsertDisk = Diski Takin -InsertaWiiDisc = Wii Diski Takin! -InsertaSDCardtodownloadimages = Resimleri indirebilmek iin SD-Card takin. -InsertaSDCardtosave = Kaydedebilmek iin SD-Card takin. -InstallRenameandDeleteareunlocked = USB Loader GX'in tm zellikleri kilitli. -Installerror = Ykleme Hatasi! -Installagame = Oyun ykle -Installinggame = Yklenen oyun: -Failedtoboot = Ailamadi: -FailedtomountfrontSDcard = SD-card monte edilemedi -FailedtosetUSB = USB ayarlamasi basarisiz oldu: -Failedformating = Biimlendirme basarisiz oldu -filesnotfoundontheserver = dosyalar sunucuda bulunamadi! -filesleft = dosya kaldi -FlipX = Flip-X -Force = Zorla -Youneedtoformatapartition = Bir blm biimlendirmeniz gerekiyor -Format = Biimlendir -Formattingpleasewait = Biimlendiriliyor, bekleyiniz... -formated = biimlendirildi! -free = bos -FreeSpace = Bos Yer -FullShutdown = Tam Kapama -GameID = Oyun ID -Games = Oyunlar -Gameisalreadyinstalled = Oyun zaten ykl: -GameRegion = Blge -GameSize = Oyun Boyutu -GoBack = Geri Dn -//GotoPage = Sayfaya Git -HowtoShutdown = Nasil Kapansin? -Language = Lisan -Langchange = Lisan degistirme -Left = Sol -LikeSysMenu = Sistem Mens Gibi -LoadingincIOS = cIOS249'dan ykleme -Lock = Kilitle -LockConsole = Konsolu Kilitle -MP3Menu = MP3 Mens -Missingfiles = Kayip dosyalar -Networkiniterror = Ag baslatma hatasi -Neither = Hibiri -Next = Ileri -No = Hayir -Nofilemissing = Kayip dosya yok! -NoHDDfound = HDD bulunamadi! -NoSDcardinserted = SD-Card takili degil! -Nopartitionsfound = Blm bulunamadi -NoUSBDevice = USB Aygiti bulunamadi -NoWBFSpartitionfound = WBFS blm bulunamadi -NormalCovers = Normal Kapaklar -Normal = Normal -NotaWiiDisc = Wii Diski Degil -NoUSBDevicefound = USB Aygiti bulunamadi -Notenoughfreespace = Gerekli bos yer yok! -notset = ayarlanmadi -of = / -OFF = KAPALI -OfficialSite = Resmi Site -ok = OK -ON = AIK -Parentalcontrol = Ebeveyn kontrol -Partition = Blm -Password = Parola -PasswordChanged = Parola degistirildi -Passwordhasbeenchanged = Password has been changed -Passwordchange = Password change -PowerofftheWii = Wii'yi kapat -Prev = nceki -PromptsButtons = Hiz ve Butonlar -ReloadSD = SD-Card'i yeniden oku -RenameGameonWBFS = WBFS'deki oyunu yeniden isimlendir -Restart = Yeniden Baslat -Return = Dns -ReturntoWii = Wii Men'ye Dns -Right = Sag -Rumble = Titresim -QuickBoot = Hizli Ailis -Save = Kaydet -SaveFailed = Kaydetme Basarisiz -Specialthanksto = zel tesekkrler -For = , -theUSBLoaderandreleasingthesourcecodethe = kaynak kodunu atigi iin -secondsleft = saniye kaldi -SelectthePartition = Blm Sein -youwanttoformat = biimlendirmek istiyorsunuz -settings = Ayarlar -ShutdowntoIdle = Yari Kapat -ShutdownSystem = Tam Kapat -Success = Basarili: -Successfullyinstalled = Basariyla yklendi: -Successfullydeleted = Basariyla silindi: -SuccessfullySaved = Basariyla Kaydedildi -SystemDefault = Sistem Ayari -ThemePath = Tema Yolu -ThemepathChanged = Tema Yolu Degisti -Themepathchange = Tema yolunu degistir -Try = Dene -Tooltips = Yardimlar -Timeleft = Kalan zaman: -Unlock = Kilidi Kaldir -Uninstall = Sil -USBLoaderisprotected = USB Loader GX koruma altinda -USBDevicenotfound = USB Aygiti bulunamadi -VideoMode = Video Modu -VIDTVPatch = VIDTV Yamasi -Volume = Ses -Waiting = Bekliyor... -WaitingforUSBDevice = USB Aygiti iin Bekleniyor -WidescreenFix = Genisekran zm -WiiMenu = Wii Men -WrongPassword = Yanlis Parola -Yes = Evet -YoudonthavecIOS = cIOS222'ye sahip degilsiniz -Japanese = Japonca -German = Almanca -English = Ingilizce -French = Fransizca -Spanish = Ispanyolca -Italian = Italyanca -Dutch = Hollandaca -SChinese = Basitlestirilmis ince -TChinese = Geleneksel ince -Korean = Korece -Turkish = Trke \ No newline at end of file diff --git a/Makefile b/Makefile index e366e261..4cec3f80 100644 --- a/Makefile +++ b/Makefile @@ -1,155 +1,146 @@ -#--------------------------------------------------------------------------------- -# Clear the implicit built in rules -#--------------------------------------------------------------------------------- -.SUFFIXES: -#--------------------------------------------------------------------------------- -ifeq ($(strip $(DEVKITPPC)),) -$(error "Please set DEVKITPPC in your environment. export DEVKITPPC=devkitPPC") -endif - -include $(DEVKITPPC)/wii_rules - -#--------------------------------------------------------------------------------- -# TARGET is the name of the output -# BUILD is the directory where object files & intermediate files will be placed -# SOURCES is a list of directories containing source code -# INCLUDES is a list of directories containing extra header files -#--------------------------------------------------------------------------------- -TARGET := boot -BUILD := build -SOURCES := source source/libwiigui source/images source/fonts source/sounds source/libwbfs -INCLUDES := source -SVNDEV := -D'SVN_REV="$(shell svnversion -n ..)"' - -#--------------------------------------------------------------------------------- -# options for code generation -#--------------------------------------------------------------------------------- - -CFLAGS = -g -O2 -Wall $(SVNDEV) $(MACHDEP) $(INCLUDE) -CXXFLAGS = -save-temps -Xassembler -aln=$@.lst $(CFLAGS) -LDFLAGS = -g $(MACHDEP) -Wl,-Map,$(notdir $@).map,--section-start,.init=0x80a00100 - -#--------------------------------------------------------------------------------- -# any extra libraries we wish to link with the project -#--------------------------------------------------------------------------------- -LIBS := -lfat -lpngu -lpng -lmetaphrasis -lm -lz -lwiiuse -lmad -lbte -lasnd -logc -ltremor -lfreetype -#--------------------------------------------------------------------------------- -# list of directories containing libraries, this must be the top level containing -# include and lib -#--------------------------------------------------------------------------------- -LIBDIRS := $(DEVKITPPC)/lib $(CURDIR) -#--------------------------------------------------------------------------------- -# no real need to edit anything past this point unless you need to add additional -# rules for different file extensions -#--------------------------------------------------------------------------------- -ifneq ($(BUILD),$(notdir $(CURDIR))) -#--------------------------------------------------------------------------------- - -export OUTPUT := $(CURDIR)/$(TARGETDIR)/$(TARGET) -export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \ - $(foreach dir,$(DATA),$(CURDIR)/$(dir)) -export DEPSDIR := $(CURDIR)/$(BUILD) - -#--------------------------------------------------------------------------------- -# automatically build a list of object files for our project -#--------------------------------------------------------------------------------- -CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) -CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) -sFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) -SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.S))) -BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) -TTFFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.ttf))) -PNGFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.png))) -OGGFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.ogg))) -PCMFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.pcm))) - -#--------------------------------------------------------------------------------- -# use CXX for linking C++ projects, CC for standard C -#--------------------------------------------------------------------------------- -ifeq ($(strip $(CPPFILES)),) - export LD := $(CC) -else - export LD := $(CXX) -endif - -export OFILES := $(addsuffix .o,$(BINFILES)) \ - $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) \ - $(sFILES:.s=.o) $(SFILES:.S=.o) \ - $(TTFFILES:.ttf=.ttf.o) $(PNGFILES:.png=.png.o) \ - $(OGGFILES:.ogg=.ogg.o) $(PCMFILES:.pcm=.pcm.o) - -#--------------------------------------------------------------------------------- -# build a list of include paths -#--------------------------------------------------------------------------------- -export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \ - $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ - -I$(CURDIR)/$(BUILD) \ - -I$(LIBOGC_INC) - -#--------------------------------------------------------------------------------- -# build a list of library paths -#--------------------------------------------------------------------------------- -export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) \ - -L$(LIBOGC_LIB) - -export OUTPUT := $(CURDIR)/$(TARGET) -.PHONY: $(BUILD) clean - -#--------------------------------------------------------------------------------- -$(BUILD): - @[ -d $@ ] || mkdir -p $@ - @make --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile - -#--------------------------------------------------------------------------------- -clean: - @echo clean ... - @rm -fr $(BUILD) $(OUTPUT).elf $(OUTPUT).dol - -#--------------------------------------------------------------------------------- -run: - wiiload $(OUTPUT).dol - -#--------------------------------------------------------------------------------- -reload: - wiiload -r $(OUTPUT).dol - -#--------------------------------------------------------------------------------- -release: - make - cp boot.dol ./hbc/boot.dol - -#--------------------------------------------------------------------------------- -else - -DEPENDS := $(OFILES:.o=.d) - -#--------------------------------------------------------------------------------- -# main targets -#--------------------------------------------------------------------------------- -$(OUTPUT).dol: $(OUTPUT).elf -$(OUTPUT).elf: $(OFILES) - -#--------------------------------------------------------------------------------- -# This rule links in binary data with .ttf, .png, and .mp3 extensions -#--------------------------------------------------------------------------------- -%.ttf.o : %.ttf - @echo $(notdir $<) - $(bin2o) - -%.png.o : %.png - @echo $(notdir $<) - $(bin2o) - -%.ogg.o : %.ogg - @echo $(notdir $<) - $(bin2o) - -%.pcm.o : %.pcm - @echo $(notdir $<) - $(bin2o) - --include $(DEPENDS) - -#--------------------------------------------------------------------------------- -endif -#--------------------------------------------------------------------------------- +#--------------------------------------------------------------------------------- +# Clear the implicit built in rules +#--------------------------------------------------------------------------------- +.SUFFIXES: +#--------------------------------------------------------------------------------- +ifeq ($(strip $(DEVKITPPC)),) +$(error "Please set DEVKITPPC in your environment. export DEVKITPPC=devkitPPC") +endif + +include $(DEVKITPPC)/wii_rules + +#--------------------------------------------------------------------------------- +# TARGET is the name of the output +# BUILD is the directory where object files & intermediate files will be placed +# SOURCES is a list of directories containing source code +# INCLUDES is a list of directories containing extra header files +#--------------------------------------------------------------------------------- +TARGET := boot +BUILD := build +SOURCES := source source/images +DATA := data +INCLUDES := + +#--------------------------------------------------------------------------------- +# options for code generation +#--------------------------------------------------------------------------------- + +CFLAGS = -g -O2 -Wall $(MACHDEP) $(INCLUDE) +CXXFLAGS = $(CFLAGS) + +#--------------------------------------------------------------------------------- +# move loader to another location - THANKS CREDIAR - 0x81330000 for HBC +#--------------------------------------------------------------------------------- +#LDFLAGS = -g $(MACHDEP) -Wl,-Map,$(notdir $@).map +LDFLAGS = -g $(MACHDEP) -Wl,-Map,$(notdir $@).map -Wl,--section-start,.init=0x81000000 +#LDFLAGS = -g $(MACHDEP) -Wl,-Map,$(notdir $@).map -Wl,--section-start,.init=0x80003f00 + +#--------------------------------------------------------------------------------- +# any extra libraries we wish to link with the project +#--------------------------------------------------------------------------------- +LIBS := -lfat -lpngu -lpng -lz -lbte -logc -lm + +#--------------------------------------------------------------------------------- +# list of directories containing libraries, this must be the top level containing +# include and lib +#--------------------------------------------------------------------------------- +LIBDIRS := $(CURDIR) + +#--------------------------------------------------------------------------------- +# no real need to edit anything past this point unless you need to add additional +# rules for different file extensions +#--------------------------------------------------------------------------------- +ifneq ($(BUILD),$(notdir $(CURDIR))) +#--------------------------------------------------------------------------------- + +export OUTPUT := $(CURDIR)/$(TARGET) + +export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \ + $(foreach dir,$(DATA),$(CURDIR)/$(dir)) + +export DEPSDIR := $(CURDIR)/$(BUILD) + +#--------------------------------------------------------------------------------- +# automatically build a list of object files for our project +#--------------------------------------------------------------------------------- +CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) +CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) +sFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) +SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.S))) +BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) +PNGFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.png))) + +#--------------------------------------------------------------------------------- +# use CXX for linking C++ projects, CC for standard C +#--------------------------------------------------------------------------------- +ifeq ($(strip $(CPPFILES)),) + export LD := $(CC) +else + export LD := $(CXX) +endif + +export OFILES := $(addsuffix .o,$(BINFILES)) \ + $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) \ + $(sFILES:.s=.o) $(SFILES:.S=.o) \ + $(PNGFILES:.png=.png.o) + +#--------------------------------------------------------------------------------- +# build a list of include paths +#--------------------------------------------------------------------------------- +export INCLUDE := $(foreach dir,$(INCLUDES), -iquote $(CURDIR)/$(dir)) \ + $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ + -I$(CURDIR)/$(BUILD) \ + -I$(LIBOGC_INC) + +#--------------------------------------------------------------------------------- +# build a list of library paths +#--------------------------------------------------------------------------------- +export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) \ + -L$(LIBOGC_LIB) + +export OUTPUT := $(CURDIR)/$(TARGET) +.PHONY: $(BUILD) clean + +#--------------------------------------------------------------------------------- +$(BUILD): + @[ -d $@ ] || mkdir -p $@ + @make --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile + +#--------------------------------------------------------------------------------- +clean: + @echo clean ... + @rm -fr $(BUILD) $(OUTPUT).elf $(OUTPUT).dol + +#--------------------------------------------------------------------------------- +run: + wiiload $(TARGET).dol + + +#--------------------------------------------------------------------------------- +pack: + zip -9 loadMii.zip $(TARGET).dol ../icon.png ../meta.xml ../README + + +#--------------------------------------------------------------------------------- +else + +DEPENDS := $(OFILES:.o=.d) + +#--------------------------------------------------------------------------------- +# main targets +#--------------------------------------------------------------------------------- +$(OUTPUT).dol: $(OUTPUT).elf +$(OUTPUT).elf: $(OFILES) + +#--------------------------------------------------------------------------------- +# This rule links in binary data with the .jpg extension +#--------------------------------------------------------------------------------- +%.png.o : %.png + @echo $(notdir $<) + $(bin2o) + +-include $(DEPENDS) + +#--------------------------------------------------------------------------------- +endif +#--------------------------------------------------------------------------------- diff --git a/gui.pnproj b/gui.pnproj deleted file mode 100644 index b333d5ee..00000000 --- a/gui.pnproj +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/gui.pnps b/gui.pnps deleted file mode 100644 index 4d76a3fe..00000000 --- a/gui.pnps +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/source/CH2Unicode.c b/source/CH2Unicode.c deleted file mode 100644 index faf88491..00000000 --- a/source/CH2Unicode.c +++ /dev/null @@ -1,3161 +0,0 @@ - -#include "CH2Unicode.h" - - -const unsigned char b2uTable[] = -{ - 0x30,0x00, 0xff,0x0c, 0x30,0x01, 0x30,0x02, 0xff,0x0e, 0x20,0x22, 0xff,0x1b, - 0xff,0x1a, 0xff,0x1f, 0xff,0x01, 0xfe,0x30, 0x20,0x26, 0x20,0x25, 0xfe,0x50, - 0xff,0x64, 0xfe,0x52, 0x00,0xb7, 0xfe,0x54, 0xfe,0x55, 0xfe,0x56, 0xfe,0x57, - 0xff,0x5c, 0x20,0x13, 0xfe,0x31, 0x20,0x14, 0xfe,0x33, 0xff,0xfd, 0xfe,0x34, - 0xfe,0x4f, 0xff,0x08, 0xff,0x09, 0xfe,0x35, 0xfe,0x36, 0xff,0x5b, 0xff,0x5d, - 0xfe,0x37, 0xfe,0x38, 0x30,0x14, 0x30,0x15, 0xfe,0x39, 0xfe,0x3a, 0x30,0x10, - 0x30,0x11, 0xfe,0x3b, 0xfe,0x3c, 0x30,0x0a, 0x30,0x0b, 0xfe,0x3d, 0xfe,0x3e, - 0x30,0x08, 0x30,0x09, 0xfe,0x3f, 0xfe,0x40, 0x30,0x0c, 0x30,0x0d, 0xfe,0x41, - 0xfe,0x42, 0x30,0x0e, 0x30,0x0f, 0xfe,0x43, 0xfe,0x44, 0xfe,0x59, 0xfe,0x5a, - 0xfe,0x5b, 0xfe,0x5c, 0xfe,0x5d, 0xfe,0x5e, 0x20,0x18, 0x20,0x19, 0x20,0x1c, - 0x20,0x1d, 0x30,0x1d, 0x30,0x1e, 0x20,0x35, 0x20,0x32, 0xff,0x03, 0xff,0x06, - 0xff,0x0a, 0x20,0x3b, 0x00,0xa7, 0x30,0x03, 0x25,0xcb, 0x25,0xcf, 0x25,0xb3, - 0x25,0xb2, 0x25,0xce, 0x26,0x06, 0x26,0x05, 0x25,0xc7, 0x25,0xc6, 0x25,0xa1, - 0x25,0xa0, 0x25,0xbd, 0x25,0xbc, 0x32,0xa3, 0x21,0x05, 0x20,0x3e, 0xff,0xfd, - 0xff,0x3f, 0xff,0xfd, 0xfe,0x49, 0xfe,0x4a, 0xfe,0x4d, 0xfe,0x4e, 0xfe,0x4b, - 0xfe,0x4c, 0xfe,0x5f, 0xfe,0x60, 0xfe,0x61, 0xff,0x0b, 0xff,0x0d, 0x00,0xd7, - 0x00,0xf7, 0x00,0xb1, 0x22,0x1a, 0xff,0x1c, 0xff,0x1e, 0xff,0x1d, 0x22,0x66, - 0x22,0x67, 0x22,0x60, 0x22,0x1e, 0x22,0x52, 0x22,0x61, 0xfe,0x62, 0xfe,0x63, - 0xfe,0x64, 0xfe,0x65, 0xfe,0x66, 0x22,0x3c, 0x22,0x29, 0x22,0x2a, 0x22,0xa5, - 0x22,0x20, 0x22,0x1f, 0x22,0xbf, 0x33,0xd2, 0x33,0xd1, 0x22,0x2b, 0x22,0x2e, - 0x22,0x35, 0x22,0x34, 0x26,0x40, 0x26,0x42, 0x26,0x41, 0x26,0x09, 0x21,0x91, - 0x21,0x93, 0x21,0x90, 0x21,0x92, 0x21,0x96, 0x21,0x97, 0x21,0x99, 0x21,0x98, - 0x22,0x25, 0x22,0x23, 0xff,0xfd, 0xff,0xfd, 0xff,0x0f, 0xff,0x3c, 0xff,0x04, - 0x00,0xa5, 0x30,0x12, 0x00,0xa2, 0x00,0xa3, 0xff,0x05, 0xff,0x20, 0x21,0x03, - 0x21,0x09, 0xfe,0x69, 0xfe,0x6a, 0xfe,0x6b, 0x33,0xd5, 0x33,0x9c, 0x33,0x9d, - 0x33,0x9e, 0x33,0xce, 0x33,0xa1, 0x33,0x8e, 0x33,0x8f, 0x33,0xc4, 0x00,0xb0, - 0x51,0x59, 0x51,0x5b, 0x51,0x5e, 0x51,0x5d, 0x51,0x61, 0x51,0x63, 0x55,0xe7, - 0x74,0xe9, 0x7c,0xce, 0x25,0x81, 0x25,0x82, 0x25,0x83, 0x25,0x84, 0x25,0x85, - 0x25,0x86, 0x25,0x87, 0x25,0x88, 0x25,0x8f, 0x25,0x8e, 0x25,0x8d, 0x25,0x8c, - 0x25,0x8b, 0x25,0x8a, 0x25,0x89, 0x25,0x3c, 0x25,0x34, 0x25,0x2c, 0x25,0x24, - 0x25,0x1c, 0x25,0x94, 0x25,0x00, 0x25,0x02, 0x25,0x95, 0x25,0x0c, 0x25,0x10, - 0x25,0x14, 0x25,0x18, 0x25,0x6d, 0x25,0x6e, 0x25,0x70, 0x25,0x6f, 0x25,0x50, - 0x25,0x5e, 0x25,0x6a, 0x25,0x61, 0x25,0xe2, 0x25,0xe3, 0x25,0xe5, 0x25,0xe4, - 0x25,0x71, 0x25,0x72, 0x25,0x73, 0xff,0x10, 0xff,0x11, 0xff,0x12, 0xff,0x13, - 0xff,0x14, 0xff,0x15, 0xff,0x16, 0xff,0x17, 0xff,0x18, 0xff,0x19, 0x21,0x60, - 0x21,0x61, 0x21,0x62, 0x21,0x63, 0x21,0x64, 0x21,0x65, 0x21,0x66, 0x21,0x67, - 0x21,0x68, 0x21,0x69, 0x30,0x21, 0x30,0x22, 0x30,0x23, 0x30,0x24, 0x30,0x25, - 0x30,0x26, 0x30,0x27, 0x30,0x28, 0x30,0x29, 0xff,0xfd, 0x53,0x44, 0xff,0xfd, - 0xff,0x21, 0xff,0x22, 0xff,0x23, 0xff,0x24, 0xff,0x25, 0xff,0x26, 0xff,0x27, - 0xff,0x28, 0xff,0x29, 0xff,0x2a, 0xff,0x2b, 0xff,0x2c, 0xff,0x2d, 0xff,0x2e, - 0xff,0x2f, 0xff,0x30, 0xff,0x31, 0xff,0x32, 0xff,0x33, 0xff,0x34, 0xff,0x35, - 0xff,0x36, 0xff,0x37, 0xff,0x38, 0xff,0x39, 0xff,0x3a, 0xff,0x41, 0xff,0x42, - 0xff,0x43, 0xff,0x44, 0xff,0x45, 0xff,0x46, 0xff,0x47, 0xff,0x48, 0xff,0x49, - 0xff,0x4a, 0xff,0x4b, 0xff,0x4c, 0xff,0x4d, 0xff,0x4e, 0xff,0x4f, 0xff,0x50, - 0xff,0x51, 0xff,0x52, 0xff,0x53, 0xff,0x54, 0xff,0x55, 0xff,0x56, 0xff,0x57, - 0xff,0x58, 0xff,0x59, 0xff,0x5a, 0x03,0x91, 0x03,0x92, 0x03,0x93, 0x03,0x94, - 0x03,0x95, 0x03,0x96, 0x03,0x97, 0x03,0x98, 0x03,0x99, 0x03,0x9a, 0x03,0x9b, - 0x03,0x9c, 0x03,0x9d, 0x03,0x9e, 0x03,0x9f, 0x03,0xa0, 0x03,0xa1, 0x03,0xa3, - 0x03,0xa4, 0x03,0xa5, 0x03,0xa6, 0x03,0xa7, 0x03,0xa8, 0x03,0xa9, 0x03,0xb1, - 0x03,0xb2, 0x03,0xb3, 0x03,0xb4, 0x03,0xb5, 0x03,0xb6, 0x03,0xb7, 0x03,0xb8, - 0x03,0xb9, 0x03,0xba, 0x03,0xbb, 0x03,0xbc, 0x03,0xbd, 0x03,0xbe, 0x03,0xbf, - 0x03,0xc0, 0x03,0xc1, 0x03,0xc3, 0x03,0xc4, 0x03,0xc5, 0x03,0xc6, 0x03,0xc7, - 0x03,0xc8, 0x03,0xc9, 0x31,0x05, 0x31,0x06, 0x31,0x07, 0x31,0x08, 0x31,0x09, - 0x31,0x0a, 0x31,0x0b, 0x31,0x0c, 0x31,0x0d, 0x31,0x0e, 0x31,0x0f, 0x31,0x10, - 0x31,0x11, 0x31,0x12, 0x31,0x13, 0x31,0x14, 0x31,0x15, 0x31,0x16, 0x31,0x17, - 0x31,0x18, 0x31,0x19, 0x31,0x1a, 0x31,0x1b, 0x31,0x1c, 0x31,0x1d, 0x31,0x1e, - 0x31,0x1f, 0x31,0x20, 0x31,0x21, 0x31,0x22, 0x31,0x23, 0x31,0x24, 0x31,0x25, - 0x31,0x26, 0x31,0x27, 0x31,0x28, 0x31,0x29, 0x02,0xd9, 0x02,0xc9, 0x02,0xca, - 0x02,0xc7, 0x02,0xcb, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, - 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, - 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, - 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, - 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, - 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, - 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, - 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, - 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, - 0xff,0xfd, 0xff,0xfd, 0x4e,0x00, 0x4e,0x59, 0x4e,0x01, 0x4e,0x03, 0x4e,0x43, - 0x4e,0x5d, 0x4e,0x86, 0x4e,0x8c, 0x4e,0xba, 0x51,0x3f, 0x51,0x65, 0x51,0x6b, - 0x51,0xe0, 0x52,0x00, 0x52,0x01, 0x52,0x9b, 0x53,0x15, 0x53,0x41, 0x53,0x5c, - 0x53,0xc8, 0x4e,0x09, 0x4e,0x0b, 0x4e,0x08, 0x4e,0x0a, 0x4e,0x2b, 0x4e,0x38, - 0x51,0xe1, 0x4e,0x45, 0x4e,0x48, 0x4e,0x5f, 0x4e,0x5e, 0x4e,0x8e, 0x4e,0xa1, - 0x51,0x40, 0x52,0x03, 0x52,0xfa, 0x53,0x43, 0x53,0xc9, 0x53,0xe3, 0x57,0x1f, - 0x58,0xeb, 0x59,0x15, 0x59,0x27, 0x59,0x73, 0x5b,0x50, 0x5b,0x51, 0x5b,0x53, - 0x5b,0xf8, 0x5c,0x0f, 0x5c,0x22, 0x5c,0x38, 0x5c,0x71, 0x5d,0xdd, 0x5d,0xe5, - 0x5d,0xf1, 0x5d,0xf2, 0x5d,0xf3, 0x5d,0xfe, 0x5e,0x72, 0x5e,0xfe, 0x5f,0x0b, - 0x5f,0x13, 0x62,0x4d, 0x4e,0x11, 0x4e,0x10, 0x4e,0x0d, 0x4e,0x2d, 0x4e,0x30, - 0x4e,0x39, 0x4e,0x4b, 0x5c,0x39, 0x4e,0x88, 0x4e,0x91, 0x4e,0x95, 0x4e,0x92, - 0x4e,0x94, 0x4e,0xa2, 0x4e,0xc1, 0x4e,0xc0, 0x4e,0xc3, 0x4e,0xc6, 0x4e,0xc7, - 0x4e,0xcd, 0x4e,0xca, 0x4e,0xcb, 0x4e,0xc4, 0x51,0x43, 0x51,0x41, 0x51,0x67, - 0x51,0x6d, 0x51,0x6e, 0x51,0x6c, 0x51,0x97, 0x51,0xf6, 0x52,0x06, 0x52,0x07, - 0x52,0x08, 0x52,0xfb, 0x52,0xfe, 0x52,0xff, 0x53,0x16, 0x53,0x39, 0x53,0x48, - 0x53,0x47, 0x53,0x45, 0x53,0x5e, 0x53,0x84, 0x53,0xcb, 0x53,0xca, 0x53,0xcd, - 0x58,0xec, 0x59,0x29, 0x59,0x2b, 0x59,0x2a, 0x59,0x2d, 0x5b,0x54, 0x5c,0x11, - 0x5c,0x24, 0x5c,0x3a, 0x5c,0x6f, 0x5d,0xf4, 0x5e,0x7b, 0x5e,0xff, 0x5f,0x14, - 0x5f,0x15, 0x5f,0xc3, 0x62,0x08, 0x62,0x36, 0x62,0x4b, 0x62,0x4e, 0x65,0x2f, - 0x65,0x87, 0x65,0x97, 0x65,0xa4, 0x65,0xb9, 0x65,0xe5, 0x66,0xf0, 0x67,0x08, - 0x67,0x28, 0x6b,0x20, 0x6b,0x62, 0x6b,0x79, 0x6b,0xcb, 0x6b,0xd4, 0x6b,0xdb, - 0x6c,0x0f, 0x6c,0x34, 0x70,0x6b, 0x72,0x2a, 0x72,0x36, 0x72,0x3b, 0x72,0x47, - 0x72,0x59, 0x72,0x5b, 0x72,0xac, 0x73,0x8b, 0x4e,0x19, 0x4e,0x16, 0x4e,0x15, - 0x4e,0x14, 0x4e,0x18, 0x4e,0x3b, 0x4e,0x4d, 0x4e,0x4f, 0x4e,0x4e, 0x4e,0xe5, - 0x4e,0xd8, 0x4e,0xd4, 0x4e,0xd5, 0x4e,0xd6, 0x4e,0xd7, 0x4e,0xe3, 0x4e,0xe4, - 0x4e,0xd9, 0x4e,0xde, 0x51,0x45, 0x51,0x44, 0x51,0x89, 0x51,0x8a, 0x51,0xac, - 0x51,0xf9, 0x51,0xfa, 0x51,0xf8, 0x52,0x0a, 0x52,0xa0, 0x52,0x9f, 0x53,0x05, - 0x53,0x06, 0x53,0x17, 0x53,0x1d, 0x4e,0xdf, 0x53,0x4a, 0x53,0x49, 0x53,0x61, - 0x53,0x60, 0x53,0x6f, 0x53,0x6e, 0x53,0xbb, 0x53,0xef, 0x53,0xe4, 0x53,0xf3, - 0x53,0xec, 0x53,0xee, 0x53,0xe9, 0x53,0xe8, 0x53,0xfc, 0x53,0xf8, 0x53,0xf5, - 0x53,0xeb, 0x53,0xe6, 0x53,0xea, 0x53,0xf2, 0x53,0xf1, 0x53,0xf0, 0x53,0xe5, - 0x53,0xed, 0x53,0xfb, 0x56,0xdb, 0x56,0xda, 0x59,0x16, 0x59,0x2e, 0x59,0x31, - 0x59,0x74, 0x59,0x76, 0x5b,0x55, 0x5b,0x83, 0x5c,0x3c, 0x5d,0xe8, 0x5d,0xe7, - 0x5d,0xe6, 0x5e,0x02, 0x5e,0x03, 0x5e,0x73, 0x5e,0x7c, 0x5f,0x01, 0x5f,0x18, - 0x5f,0x17, 0x5f,0xc5, 0x62,0x0a, 0x62,0x53, 0x62,0x54, 0x62,0x52, 0x62,0x51, - 0x65,0xa5, 0x65,0xe6, 0x67,0x2e, 0x67,0x2c, 0x67,0x2a, 0x67,0x2b, 0x67,0x2d, - 0x6b,0x63, 0x6b,0xcd, 0x6c,0x11, 0x6c,0x10, 0x6c,0x38, 0x6c,0x41, 0x6c,0x40, - 0x6c,0x3e, 0x72,0xaf, 0x73,0x84, 0x73,0x89, 0x74,0xdc, 0x74,0xe6, 0x75,0x18, - 0x75,0x1f, 0x75,0x28, 0x75,0x29, 0x75,0x30, 0x75,0x31, 0x75,0x32, 0x75,0x33, - 0x75,0x8b, 0x76,0x7d, 0x76,0xae, 0x76,0xbf, 0x76,0xee, 0x77,0xdb, 0x77,0xe2, - 0x77,0xf3, 0x79,0x3a, 0x79,0xbe, 0x7a,0x74, 0x7a,0xcb, 0x4e,0x1e, 0x4e,0x1f, - 0x4e,0x52, 0x4e,0x53, 0x4e,0x69, 0x4e,0x99, 0x4e,0xa4, 0x4e,0xa6, 0x4e,0xa5, - 0x4e,0xff, 0x4f,0x09, 0x4f,0x19, 0x4f,0x0a, 0x4f,0x15, 0x4f,0x0d, 0x4f,0x10, - 0x4f,0x11, 0x4f,0x0f, 0x4e,0xf2, 0x4e,0xf6, 0x4e,0xfb, 0x4e,0xf0, 0x4e,0xf3, - 0x4e,0xfd, 0x4f,0x01, 0x4f,0x0b, 0x51,0x49, 0x51,0x47, 0x51,0x46, 0x51,0x48, - 0x51,0x68, 0x51,0x71, 0x51,0x8d, 0x51,0xb0, 0x52,0x17, 0x52,0x11, 0x52,0x12, - 0x52,0x0e, 0x52,0x16, 0x52,0xa3, 0x53,0x08, 0x53,0x21, 0x53,0x20, 0x53,0x70, - 0x53,0x71, 0x54,0x09, 0x54,0x0f, 0x54,0x0c, 0x54,0x0a, 0x54,0x10, 0x54,0x01, - 0x54,0x0b, 0x54,0x04, 0x54,0x11, 0x54,0x0d, 0x54,0x08, 0x54,0x03, 0x54,0x0e, - 0x54,0x06, 0x54,0x12, 0x56,0xe0, 0x56,0xde, 0x56,0xdd, 0x57,0x33, 0x57,0x30, - 0x57,0x28, 0x57,0x2d, 0x57,0x2c, 0x57,0x2f, 0x57,0x29, 0x59,0x19, 0x59,0x1a, - 0x59,0x37, 0x59,0x38, 0x59,0x84, 0x59,0x78, 0x59,0x83, 0x59,0x7d, 0x59,0x79, - 0x59,0x82, 0x59,0x81, 0x5b,0x57, 0x5b,0x58, 0x5b,0x87, 0x5b,0x88, 0x5b,0x85, - 0x5b,0x89, 0x5b,0xfa, 0x5c,0x16, 0x5c,0x79, 0x5d,0xde, 0x5e,0x06, 0x5e,0x76, - 0x5e,0x74, 0x5f,0x0f, 0x5f,0x1b, 0x5f,0xd9, 0x5f,0xd6, 0x62,0x0e, 0x62,0x0c, - 0x62,0x0d, 0x62,0x10, 0x62,0x63, 0x62,0x5b, 0x62,0x58, 0x65,0x36, 0x65,0xe9, - 0x65,0xe8, 0x65,0xec, 0x65,0xed, 0x66,0xf2, 0x66,0xf3, 0x67,0x09, 0x67,0x3d, - 0x67,0x34, 0x67,0x31, 0x67,0x35, 0x6b,0x21, 0x6b,0x64, 0x6b,0x7b, 0x6c,0x16, - 0x6c,0x5d, 0x6c,0x57, 0x6c,0x59, 0x6c,0x5f, 0x6c,0x60, 0x6c,0x50, 0x6c,0x55, - 0x6c,0x61, 0x6c,0x5b, 0x6c,0x4d, 0x6c,0x4e, 0x70,0x70, 0x72,0x5f, 0x72,0x5d, - 0x76,0x7e, 0x7a,0xf9, 0x7c,0x73, 0x7c,0xf8, 0x7f,0x36, 0x7f,0x8a, 0x7f,0xbd, - 0x80,0x01, 0x80,0x03, 0x80,0x0c, 0x80,0x12, 0x80,0x33, 0x80,0x7f, 0x80,0x89, - 0x80,0x8b, 0x80,0x8c, 0x81,0xe3, 0x81,0xea, 0x81,0xf3, 0x81,0xfc, 0x82,0x0c, - 0x82,0x1b, 0x82,0x1f, 0x82,0x6e, 0x82,0x72, 0x82,0x7e, 0x86,0x6b, 0x88,0x40, - 0x88,0x4c, 0x88,0x63, 0x89,0x7f, 0x96,0x21, 0x4e,0x32, 0x4e,0xa8, 0x4f,0x4d, - 0x4f,0x4f, 0x4f,0x47, 0x4f,0x57, 0x4f,0x5e, 0x4f,0x34, 0x4f,0x5b, 0x4f,0x55, - 0x4f,0x30, 0x4f,0x50, 0x4f,0x51, 0x4f,0x3d, 0x4f,0x3a, 0x4f,0x38, 0x4f,0x43, - 0x4f,0x54, 0x4f,0x3c, 0x4f,0x46, 0x4f,0x63, 0x4f,0x5c, 0x4f,0x60, 0x4f,0x2f, - 0x4f,0x4e, 0x4f,0x36, 0x4f,0x59, 0x4f,0x5d, 0x4f,0x48, 0x4f,0x5a, 0x51,0x4c, - 0x51,0x4b, 0x51,0x4d, 0x51,0x75, 0x51,0xb6, 0x51,0xb7, 0x52,0x25, 0x52,0x24, - 0x52,0x29, 0x52,0x2a, 0x52,0x28, 0x52,0xab, 0x52,0xa9, 0x52,0xaa, 0x52,0xac, - 0x53,0x23, 0x53,0x73, 0x53,0x75, 0x54,0x1d, 0x54,0x2d, 0x54,0x1e, 0x54,0x3e, - 0x54,0x26, 0x54,0x4e, 0x54,0x27, 0x54,0x46, 0x54,0x43, 0x54,0x33, 0x54,0x48, - 0x54,0x42, 0x54,0x1b, 0x54,0x29, 0x54,0x4a, 0x54,0x39, 0x54,0x3b, 0x54,0x38, - 0x54,0x2e, 0x54,0x35, 0x54,0x36, 0x54,0x20, 0x54,0x3c, 0x54,0x40, 0x54,0x31, - 0x54,0x2b, 0x54,0x1f, 0x54,0x2c, 0x56,0xea, 0x56,0xf0, 0x56,0xe4, 0x56,0xeb, - 0x57,0x4a, 0x57,0x51, 0x57,0x40, 0x57,0x4d, 0x57,0x47, 0x57,0x4e, 0x57,0x3e, - 0x57,0x50, 0x57,0x4f, 0x57,0x3b, 0x58,0xef, 0x59,0x3e, 0x59,0x9d, 0x59,0x92, - 0x59,0xa8, 0x59,0x9e, 0x59,0xa3, 0x59,0x99, 0x59,0x96, 0x59,0x8d, 0x59,0xa4, - 0x59,0x93, 0x59,0x8a, 0x59,0xa5, 0x5b,0x5d, 0x5b,0x5c, 0x5b,0x5a, 0x5b,0x5b, - 0x5b,0x8c, 0x5b,0x8b, 0x5b,0x8f, 0x5c,0x2c, 0x5c,0x40, 0x5c,0x41, 0x5c,0x3f, - 0x5c,0x3e, 0x5c,0x90, 0x5c,0x91, 0x5c,0x94, 0x5c,0x8c, 0x5d,0xeb, 0x5e,0x0c, - 0x5e,0x8f, 0x5e,0x87, 0x5e,0x8a, 0x5e,0xf7, 0x5f,0x04, 0x5f,0x1f, 0x5f,0x64, - 0x5f,0x62, 0x5f,0x77, 0x5f,0x79, 0x5f,0xd8, 0x5f,0xcc, 0x5f,0xd7, 0x5f,0xcd, - 0x5f,0xf1, 0x5f,0xeb, 0x5f,0xf8, 0x5f,0xea, 0x62,0x12, 0x62,0x11, 0x62,0x84, - 0x62,0x97, 0x62,0x96, 0x62,0x80, 0x62,0x76, 0x62,0x89, 0x62,0x6d, 0x62,0x8a, - 0x62,0x7c, 0x62,0x7e, 0x62,0x79, 0x62,0x73, 0x62,0x92, 0x62,0x6f, 0x62,0x98, - 0x62,0x6e, 0x62,0x95, 0x62,0x93, 0x62,0x91, 0x62,0x86, 0x65,0x39, 0x65,0x3b, - 0x65,0x38, 0x65,0xf1, 0x66,0xf4, 0x67,0x5f, 0x67,0x4e, 0x67,0x4f, 0x67,0x50, - 0x67,0x51, 0x67,0x5c, 0x67,0x56, 0x67,0x5e, 0x67,0x49, 0x67,0x46, 0x67,0x60, - 0x67,0x53, 0x67,0x57, 0x6b,0x65, 0x6b,0xcf, 0x6c,0x42, 0x6c,0x5e, 0x6c,0x99, - 0x6c,0x81, 0x6c,0x88, 0x6c,0x89, 0x6c,0x85, 0x6c,0x9b, 0x6c,0x6a, 0x6c,0x7a, - 0x6c,0x90, 0x6c,0x70, 0x6c,0x8c, 0x6c,0x68, 0x6c,0x96, 0x6c,0x92, 0x6c,0x7d, - 0x6c,0x83, 0x6c,0x72, 0x6c,0x7e, 0x6c,0x74, 0x6c,0x86, 0x6c,0x76, 0x6c,0x8d, - 0x6c,0x94, 0x6c,0x98, 0x6c,0x82, 0x70,0x76, 0x70,0x7c, 0x70,0x7d, 0x70,0x78, - 0x72,0x62, 0x72,0x61, 0x72,0x60, 0x72,0xc4, 0x72,0xc2, 0x73,0x96, 0x75,0x2c, - 0x75,0x2b, 0x75,0x37, 0x75,0x38, 0x76,0x82, 0x76,0xef, 0x77,0xe3, 0x79,0xc1, - 0x79,0xc0, 0x79,0xbf, 0x7a,0x76, 0x7c,0xfb, 0x7f,0x55, 0x80,0x96, 0x80,0x93, - 0x80,0x9d, 0x80,0x98, 0x80,0x9b, 0x80,0x9a, 0x80,0xb2, 0x82,0x6f, 0x82,0x92, - 0x82,0x8b, 0x82,0x8d, 0x89,0x8b, 0x89,0xd2, 0x8a,0x00, 0x8c,0x37, 0x8c,0x46, - 0x8c,0x55, 0x8c,0x9d, 0x8d,0x64, 0x8d,0x70, 0x8d,0xb3, 0x8e,0xab, 0x8e,0xca, - 0x8f,0x9b, 0x8f,0xb0, 0x8f,0xc2, 0x8f,0xc6, 0x8f,0xc5, 0x8f,0xc4, 0x5d,0xe1, - 0x90,0x91, 0x90,0xa2, 0x90,0xaa, 0x90,0xa6, 0x90,0xa3, 0x91,0x49, 0x91,0xc6, - 0x91,0xcc, 0x96,0x32, 0x96,0x2e, 0x96,0x31, 0x96,0x2a, 0x96,0x2c, 0x4e,0x26, - 0x4e,0x56, 0x4e,0x73, 0x4e,0x8b, 0x4e,0x9b, 0x4e,0x9e, 0x4e,0xab, 0x4e,0xac, - 0x4f,0x6f, 0x4f,0x9d, 0x4f,0x8d, 0x4f,0x73, 0x4f,0x7f, 0x4f,0x6c, 0x4f,0x9b, - 0x4f,0x8b, 0x4f,0x86, 0x4f,0x83, 0x4f,0x70, 0x4f,0x75, 0x4f,0x88, 0x4f,0x69, - 0x4f,0x7b, 0x4f,0x96, 0x4f,0x7e, 0x4f,0x8f, 0x4f,0x91, 0x4f,0x7a, 0x51,0x54, - 0x51,0x52, 0x51,0x55, 0x51,0x69, 0x51,0x77, 0x51,0x76, 0x51,0x78, 0x51,0xbd, - 0x51,0xfd, 0x52,0x3b, 0x52,0x38, 0x52,0x37, 0x52,0x3a, 0x52,0x30, 0x52,0x2e, - 0x52,0x36, 0x52,0x41, 0x52,0xbe, 0x52,0xbb, 0x53,0x52, 0x53,0x54, 0x53,0x53, - 0x53,0x51, 0x53,0x66, 0x53,0x77, 0x53,0x78, 0x53,0x79, 0x53,0xd6, 0x53,0xd4, - 0x53,0xd7, 0x54,0x73, 0x54,0x75, 0x54,0x96, 0x54,0x78, 0x54,0x95, 0x54,0x80, - 0x54,0x7b, 0x54,0x77, 0x54,0x84, 0x54,0x92, 0x54,0x86, 0x54,0x7c, 0x54,0x90, - 0x54,0x71, 0x54,0x76, 0x54,0x8c, 0x54,0x9a, 0x54,0x62, 0x54,0x68, 0x54,0x8b, - 0x54,0x7d, 0x54,0x8e, 0x56,0xfa, 0x57,0x83, 0x57,0x77, 0x57,0x6a, 0x57,0x69, - 0x57,0x61, 0x57,0x66, 0x57,0x64, 0x57,0x7c, 0x59,0x1c, 0x59,0x49, 0x59,0x47, - 0x59,0x48, 0x59,0x44, 0x59,0x54, 0x59,0xbe, 0x59,0xbb, 0x59,0xd4, 0x59,0xb9, - 0x59,0xae, 0x59,0xd1, 0x59,0xc6, 0x59,0xd0, 0x59,0xcd, 0x59,0xcb, 0x59,0xd3, - 0x59,0xca, 0x59,0xaf, 0x59,0xb3, 0x59,0xd2, 0x59,0xc5, 0x5b,0x5f, 0x5b,0x64, - 0x5b,0x63, 0x5b,0x97, 0x5b,0x9a, 0x5b,0x98, 0x5b,0x9c, 0x5b,0x99, 0x5b,0x9b, - 0x5c,0x1a, 0x5c,0x48, 0x5c,0x45, 0x5c,0x46, 0x5c,0xb7, 0x5c,0xa1, 0x5c,0xb8, - 0x5c,0xa9, 0x5c,0xab, 0x5c,0xb1, 0x5c,0xb3, 0x5e,0x18, 0x5e,0x1a, 0x5e,0x16, - 0x5e,0x15, 0x5e,0x1b, 0x5e,0x11, 0x5e,0x78, 0x5e,0x9a, 0x5e,0x97, 0x5e,0x9c, - 0x5e,0x95, 0x5e,0x96, 0x5e,0xf6, 0x5f,0x26, 0x5f,0x27, 0x5f,0x29, 0x5f,0x80, - 0x5f,0x81, 0x5f,0x7f, 0x5f,0x7c, 0x5f,0xdd, 0x5f,0xe0, 0x5f,0xfd, 0x5f,0xf5, - 0x5f,0xff, 0x60,0x0f, 0x60,0x14, 0x60,0x2f, 0x60,0x35, 0x60,0x16, 0x60,0x2a, - 0x60,0x15, 0x60,0x21, 0x60,0x27, 0x60,0x29, 0x60,0x2b, 0x60,0x1b, 0x62,0x16, - 0x62,0x15, 0x62,0x3f, 0x62,0x3e, 0x62,0x40, 0x62,0x7f, 0x62,0xc9, 0x62,0xcc, - 0x62,0xc4, 0x62,0xbf, 0x62,0xc2, 0x62,0xb9, 0x62,0xd2, 0x62,0xdb, 0x62,0xab, - 0x62,0xd3, 0x62,0xd4, 0x62,0xcb, 0x62,0xc8, 0x62,0xa8, 0x62,0xbd, 0x62,0xbc, - 0x62,0xd0, 0x62,0xd9, 0x62,0xc7, 0x62,0xcd, 0x62,0xb5, 0x62,0xda, 0x62,0xb1, - 0x62,0xd8, 0x62,0xd6, 0x62,0xd7, 0x62,0xc6, 0x62,0xac, 0x62,0xce, 0x65,0x3e, - 0x65,0xa7, 0x65,0xbc, 0x65,0xfa, 0x66,0x14, 0x66,0x13, 0x66,0x0c, 0x66,0x06, - 0x66,0x02, 0x66,0x0e, 0x66,0x00, 0x66,0x0f, 0x66,0x15, 0x66,0x0a, 0x66,0x07, - 0x67,0x0d, 0x67,0x0b, 0x67,0x6d, 0x67,0x8b, 0x67,0x95, 0x67,0x71, 0x67,0x9c, - 0x67,0x73, 0x67,0x77, 0x67,0x87, 0x67,0x9d, 0x67,0x97, 0x67,0x6f, 0x67,0x70, - 0x67,0x7f, 0x67,0x89, 0x67,0x7e, 0x67,0x90, 0x67,0x75, 0x67,0x9a, 0x67,0x93, - 0x67,0x7c, 0x67,0x6a, 0x67,0x72, 0x6b,0x23, 0x6b,0x66, 0x6b,0x67, 0x6b,0x7f, - 0x6c,0x13, 0x6c,0x1b, 0x6c,0xe3, 0x6c,0xe8, 0x6c,0xf3, 0x6c,0xb1, 0x6c,0xcc, - 0x6c,0xe5, 0x6c,0xb3, 0x6c,0xbd, 0x6c,0xbe, 0x6c,0xbc, 0x6c,0xe2, 0x6c,0xab, - 0x6c,0xd5, 0x6c,0xd3, 0x6c,0xb8, 0x6c,0xc4, 0x6c,0xb9, 0x6c,0xc1, 0x6c,0xae, - 0x6c,0xd7, 0x6c,0xc5, 0x6c,0xf1, 0x6c,0xbf, 0x6c,0xbb, 0x6c,0xe1, 0x6c,0xdb, - 0x6c,0xca, 0x6c,0xac, 0x6c,0xef, 0x6c,0xdc, 0x6c,0xd6, 0x6c,0xe0, 0x70,0x95, - 0x70,0x8e, 0x70,0x92, 0x70,0x8a, 0x70,0x99, 0x72,0x2c, 0x72,0x2d, 0x72,0x38, - 0x72,0x48, 0x72,0x67, 0x72,0x69, 0x72,0xc0, 0x72,0xce, 0x72,0xd9, 0x72,0xd7, - 0x72,0xd0, 0x73,0xa9, 0x73,0xa8, 0x73,0x9f, 0x73,0xab, 0x73,0xa5, 0x75,0x3d, - 0x75,0x9d, 0x75,0x99, 0x75,0x9a, 0x76,0x84, 0x76,0xc2, 0x76,0xf2, 0x76,0xf4, - 0x77,0xe5, 0x77,0xfd, 0x79,0x3e, 0x79,0x40, 0x79,0x41, 0x79,0xc9, 0x79,0xc8, - 0x7a,0x7a, 0x7a,0x79, 0x7a,0xfa, 0x7c,0xfe, 0x7f,0x54, 0x7f,0x8c, 0x7f,0x8b, - 0x80,0x05, 0x80,0xba, 0x80,0xa5, 0x80,0xa2, 0x80,0xb1, 0x80,0xa1, 0x80,0xab, - 0x80,0xa9, 0x80,0xb4, 0x80,0xaa, 0x80,0xaf, 0x81,0xe5, 0x81,0xfe, 0x82,0x0d, - 0x82,0xb3, 0x82,0x9d, 0x82,0x99, 0x82,0xad, 0x82,0xbd, 0x82,0x9f, 0x82,0xb9, - 0x82,0xb1, 0x82,0xac, 0x82,0xa5, 0x82,0xaf, 0x82,0xb8, 0x82,0xa3, 0x82,0xb0, - 0x82,0xbe, 0x82,0xb7, 0x86,0x4e, 0x86,0x71, 0x52,0x1d, 0x88,0x68, 0x8e,0xcb, - 0x8f,0xce, 0x8f,0xd4, 0x8f,0xd1, 0x90,0xb5, 0x90,0xb8, 0x90,0xb1, 0x90,0xb6, - 0x91,0xc7, 0x91,0xd1, 0x95,0x77, 0x95,0x80, 0x96,0x1c, 0x96,0x40, 0x96,0x3f, - 0x96,0x3b, 0x96,0x44, 0x96,0x42, 0x96,0xb9, 0x96,0xe8, 0x97,0x52, 0x97,0x5e, - 0x4e,0x9f, 0x4e,0xad, 0x4e,0xae, 0x4f,0xe1, 0x4f,0xb5, 0x4f,0xaf, 0x4f,0xbf, - 0x4f,0xe0, 0x4f,0xd1, 0x4f,0xcf, 0x4f,0xdd, 0x4f,0xc3, 0x4f,0xb6, 0x4f,0xd8, - 0x4f,0xdf, 0x4f,0xca, 0x4f,0xd7, 0x4f,0xae, 0x4f,0xd0, 0x4f,0xc4, 0x4f,0xc2, - 0x4f,0xda, 0x4f,0xce, 0x4f,0xde, 0x4f,0xb7, 0x51,0x57, 0x51,0x92, 0x51,0x91, - 0x51,0xa0, 0x52,0x4e, 0x52,0x43, 0x52,0x4a, 0x52,0x4d, 0x52,0x4c, 0x52,0x4b, - 0x52,0x47, 0x52,0xc7, 0x52,0xc9, 0x52,0xc3, 0x52,0xc1, 0x53,0x0d, 0x53,0x57, - 0x53,0x7b, 0x53,0x9a, 0x53,0xdb, 0x54,0xac, 0x54,0xc0, 0x54,0xa8, 0x54,0xce, - 0x54,0xc9, 0x54,0xb8, 0x54,0xa6, 0x54,0xb3, 0x54,0xc7, 0x54,0xc2, 0x54,0xbd, - 0x54,0xaa, 0x54,0xc1, 0x54,0xc4, 0x54,0xc8, 0x54,0xaf, 0x54,0xab, 0x54,0xb1, - 0x54,0xbb, 0x54,0xa9, 0x54,0xa7, 0x54,0xbf, 0x56,0xff, 0x57,0x82, 0x57,0x8b, - 0x57,0xa0, 0x57,0xa3, 0x57,0xa2, 0x57,0xce, 0x57,0xae, 0x57,0x93, 0x59,0x55, - 0x59,0x51, 0x59,0x4f, 0x59,0x4e, 0x59,0x50, 0x59,0xdc, 0x59,0xd8, 0x59,0xff, - 0x59,0xe3, 0x59,0xe8, 0x5a,0x03, 0x59,0xe5, 0x59,0xea, 0x59,0xda, 0x59,0xe6, - 0x5a,0x01, 0x59,0xfb, 0x5b,0x69, 0x5b,0xa3, 0x5b,0xa6, 0x5b,0xa4, 0x5b,0xa2, - 0x5b,0xa5, 0x5c,0x01, 0x5c,0x4e, 0x5c,0x4f, 0x5c,0x4d, 0x5c,0x4b, 0x5c,0xd9, - 0x5c,0xd2, 0x5d,0xf7, 0x5e,0x1d, 0x5e,0x25, 0x5e,0x1f, 0x5e,0x7d, 0x5e,0xa0, - 0x5e,0xa6, 0x5e,0xfa, 0x5f,0x08, 0x5f,0x2d, 0x5f,0x65, 0x5f,0x88, 0x5f,0x85, - 0x5f,0x8a, 0x5f,0x8b, 0x5f,0x87, 0x5f,0x8c, 0x5f,0x89, 0x60,0x12, 0x60,0x1d, - 0x60,0x20, 0x60,0x25, 0x60,0x0e, 0x60,0x28, 0x60,0x4d, 0x60,0x70, 0x60,0x68, - 0x60,0x62, 0x60,0x46, 0x60,0x43, 0x60,0x6c, 0x60,0x6b, 0x60,0x6a, 0x60,0x64, - 0x62,0x41, 0x62,0xdc, 0x63,0x16, 0x63,0x09, 0x62,0xfc, 0x62,0xed, 0x63,0x01, - 0x62,0xee, 0x62,0xfd, 0x63,0x07, 0x62,0xf1, 0x62,0xf7, 0x62,0xef, 0x62,0xec, - 0x62,0xfe, 0x62,0xf4, 0x63,0x11, 0x63,0x02, 0x65,0x3f, 0x65,0x45, 0x65,0xab, - 0x65,0xbd, 0x65,0xe2, 0x66,0x25, 0x66,0x2d, 0x66,0x20, 0x66,0x27, 0x66,0x2f, - 0x66,0x1f, 0x66,0x28, 0x66,0x31, 0x66,0x24, 0x66,0xf7, 0x67,0xff, 0x67,0xd3, - 0x67,0xf1, 0x67,0xd4, 0x67,0xd0, 0x67,0xec, 0x67,0xb6, 0x67,0xaf, 0x67,0xf5, - 0x67,0xe9, 0x67,0xef, 0x67,0xc4, 0x67,0xd1, 0x67,0xb4, 0x67,0xda, 0x67,0xe5, - 0x67,0xb8, 0x67,0xcf, 0x67,0xde, 0x67,0xf3, 0x67,0xb0, 0x67,0xd9, 0x67,0xe2, - 0x67,0xdd, 0x67,0xd2, 0x6b,0x6a, 0x6b,0x83, 0x6b,0x86, 0x6b,0xb5, 0x6b,0xd2, - 0x6b,0xd7, 0x6c,0x1f, 0x6c,0xc9, 0x6d,0x0b, 0x6d,0x32, 0x6d,0x2a, 0x6d,0x41, - 0x6d,0x25, 0x6d,0x0c, 0x6d,0x31, 0x6d,0x1e, 0x6d,0x17, 0x6d,0x3b, 0x6d,0x3d, - 0x6d,0x3e, 0x6d,0x36, 0x6d,0x1b, 0x6c,0xf5, 0x6d,0x39, 0x6d,0x27, 0x6d,0x38, - 0x6d,0x29, 0x6d,0x2e, 0x6d,0x35, 0x6d,0x0e, 0x6d,0x2b, 0x70,0xab, 0x70,0xba, - 0x70,0xb3, 0x70,0xac, 0x70,0xaf, 0x70,0xad, 0x70,0xb8, 0x70,0xae, 0x70,0xa4, - 0x72,0x30, 0x72,0x72, 0x72,0x6f, 0x72,0x74, 0x72,0xe9, 0x72,0xe0, 0x72,0xe1, - 0x73,0xb7, 0x73,0xca, 0x73,0xbb, 0x73,0xb2, 0x73,0xcd, 0x73,0xc0, 0x73,0xb3, - 0x75,0x1a, 0x75,0x2d, 0x75,0x4f, 0x75,0x4c, 0x75,0x4e, 0x75,0x4b, 0x75,0xab, - 0x75,0xa4, 0x75,0xa5, 0x75,0xa2, 0x75,0xa3, 0x76,0x78, 0x76,0x86, 0x76,0x87, - 0x76,0x88, 0x76,0xc8, 0x76,0xc6, 0x76,0xc3, 0x76,0xc5, 0x77,0x01, 0x76,0xf9, - 0x76,0xf8, 0x77,0x09, 0x77,0x0b, 0x76,0xfe, 0x76,0xfc, 0x77,0x07, 0x77,0xdc, - 0x78,0x02, 0x78,0x14, 0x78,0x0c, 0x78,0x0d, 0x79,0x46, 0x79,0x49, 0x79,0x48, - 0x79,0x47, 0x79,0xb9, 0x79,0xba, 0x79,0xd1, 0x79,0xd2, 0x79,0xcb, 0x7a,0x7f, - 0x7a,0x81, 0x7a,0xff, 0x7a,0xfd, 0x7c,0x7d, 0x7d,0x02, 0x7d,0x05, 0x7d,0x00, - 0x7d,0x09, 0x7d,0x07, 0x7d,0x04, 0x7d,0x06, 0x7f,0x38, 0x7f,0x8e, 0x7f,0xbf, - 0x80,0x04, 0x80,0x10, 0x80,0x0d, 0x80,0x11, 0x80,0x36, 0x80,0xd6, 0x80,0xe5, - 0x80,0xda, 0x80,0xc3, 0x80,0xc4, 0x80,0xcc, 0x80,0xe1, 0x80,0xdb, 0x80,0xce, - 0x80,0xde, 0x80,0xe4, 0x80,0xdd, 0x81,0xf4, 0x82,0x22, 0x82,0xe7, 0x83,0x03, - 0x83,0x05, 0x82,0xe3, 0x82,0xdb, 0x82,0xe6, 0x83,0x04, 0x82,0xe5, 0x83,0x02, - 0x83,0x09, 0x82,0xd2, 0x82,0xd7, 0x82,0xf1, 0x83,0x01, 0x82,0xdc, 0x82,0xd4, - 0x82,0xd1, 0x82,0xde, 0x82,0xd3, 0x82,0xdf, 0x82,0xef, 0x83,0x06, 0x86,0x50, - 0x86,0x79, 0x86,0x7b, 0x86,0x7a, 0x88,0x4d, 0x88,0x6b, 0x89,0x81, 0x89,0xd4, - 0x8a,0x08, 0x8a,0x02, 0x8a,0x03, 0x8c,0x9e, 0x8c,0xa0, 0x8d,0x74, 0x8d,0x73, - 0x8d,0xb4, 0x8e,0xcd, 0x8e,0xcc, 0x8f,0xf0, 0x8f,0xe6, 0x8f,0xe2, 0x8f,0xea, - 0x8f,0xe5, 0x8f,0xed, 0x8f,0xeb, 0x8f,0xe4, 0x8f,0xe8, 0x90,0xca, 0x90,0xce, - 0x90,0xc1, 0x90,0xc3, 0x91,0x4b, 0x91,0x4a, 0x91,0xcd, 0x95,0x82, 0x96,0x50, - 0x96,0x4b, 0x96,0x4c, 0x96,0x4d, 0x97,0x62, 0x97,0x69, 0x97,0xcb, 0x97,0xed, - 0x97,0xf3, 0x98,0x01, 0x98,0xa8, 0x98,0xdb, 0x98,0xdf, 0x99,0x96, 0x99,0x99, - 0x4e,0x58, 0x4e,0xb3, 0x50,0x0c, 0x50,0x0d, 0x50,0x23, 0x4f,0xef, 0x50,0x26, - 0x50,0x25, 0x4f,0xf8, 0x50,0x29, 0x50,0x16, 0x50,0x06, 0x50,0x3c, 0x50,0x1f, - 0x50,0x1a, 0x50,0x12, 0x50,0x11, 0x4f,0xfa, 0x50,0x00, 0x50,0x14, 0x50,0x28, - 0x4f,0xf1, 0x50,0x21, 0x50,0x0b, 0x50,0x19, 0x50,0x18, 0x4f,0xf3, 0x4f,0xee, - 0x50,0x2d, 0x50,0x2a, 0x4f,0xfe, 0x50,0x2b, 0x50,0x09, 0x51,0x7c, 0x51,0xa4, - 0x51,0xa5, 0x51,0xa2, 0x51,0xcd, 0x51,0xcc, 0x51,0xc6, 0x51,0xcb, 0x52,0x56, - 0x52,0x5c, 0x52,0x54, 0x52,0x5b, 0x52,0x5d, 0x53,0x2a, 0x53,0x7f, 0x53,0x9f, - 0x53,0x9d, 0x53,0xdf, 0x54,0xe8, 0x55,0x10, 0x55,0x01, 0x55,0x37, 0x54,0xfc, - 0x54,0xe5, 0x54,0xf2, 0x55,0x06, 0x54,0xfa, 0x55,0x14, 0x54,0xe9, 0x54,0xed, - 0x54,0xe1, 0x55,0x09, 0x54,0xee, 0x54,0xea, 0x54,0xe6, 0x55,0x27, 0x55,0x07, - 0x54,0xfd, 0x55,0x0f, 0x57,0x03, 0x57,0x04, 0x57,0xc2, 0x57,0xd4, 0x57,0xcb, - 0x57,0xc3, 0x58,0x09, 0x59,0x0f, 0x59,0x57, 0x59,0x58, 0x59,0x5a, 0x5a,0x11, - 0x5a,0x18, 0x5a,0x1c, 0x5a,0x1f, 0x5a,0x1b, 0x5a,0x13, 0x59,0xec, 0x5a,0x20, - 0x5a,0x23, 0x5a,0x29, 0x5a,0x25, 0x5a,0x0c, 0x5a,0x09, 0x5b,0x6b, 0x5c,0x58, - 0x5b,0xb0, 0x5b,0xb3, 0x5b,0xb6, 0x5b,0xb4, 0x5b,0xae, 0x5b,0xb5, 0x5b,0xb9, - 0x5b,0xb8, 0x5c,0x04, 0x5c,0x51, 0x5c,0x55, 0x5c,0x50, 0x5c,0xed, 0x5c,0xfd, - 0x5c,0xfb, 0x5c,0xea, 0x5c,0xe8, 0x5c,0xf0, 0x5c,0xf6, 0x5d,0x01, 0x5c,0xf4, - 0x5d,0xee, 0x5e,0x2d, 0x5e,0x2b, 0x5e,0xab, 0x5e,0xad, 0x5e,0xa7, 0x5f,0x31, - 0x5f,0x92, 0x5f,0x91, 0x5f,0x90, 0x60,0x59, 0x60,0x63, 0x60,0x65, 0x60,0x50, - 0x60,0x55, 0x60,0x6d, 0x60,0x69, 0x60,0x6f, 0x60,0x84, 0x60,0x9f, 0x60,0x9a, - 0x60,0x8d, 0x60,0x94, 0x60,0x8c, 0x60,0x85, 0x60,0x96, 0x62,0x47, 0x62,0xf3, - 0x63,0x08, 0x62,0xff, 0x63,0x4e, 0x63,0x3e, 0x63,0x2f, 0x63,0x55, 0x63,0x42, - 0x63,0x46, 0x63,0x4f, 0x63,0x49, 0x63,0x3a, 0x63,0x50, 0x63,0x3d, 0x63,0x2a, - 0x63,0x2b, 0x63,0x28, 0x63,0x4d, 0x63,0x4c, 0x65,0x48, 0x65,0x49, 0x65,0x99, - 0x65,0xc1, 0x65,0xc5, 0x66,0x42, 0x66,0x49, 0x66,0x4f, 0x66,0x43, 0x66,0x52, - 0x66,0x4c, 0x66,0x45, 0x66,0x41, 0x66,0xf8, 0x67,0x14, 0x67,0x15, 0x67,0x17, - 0x68,0x21, 0x68,0x38, 0x68,0x48, 0x68,0x46, 0x68,0x53, 0x68,0x39, 0x68,0x42, - 0x68,0x54, 0x68,0x29, 0x68,0xb3, 0x68,0x17, 0x68,0x4c, 0x68,0x51, 0x68,0x3d, - 0x67,0xf4, 0x68,0x50, 0x68,0x40, 0x68,0x3c, 0x68,0x43, 0x68,0x2a, 0x68,0x45, - 0x68,0x13, 0x68,0x18, 0x68,0x41, 0x6b,0x8a, 0x6b,0x89, 0x6b,0xb7, 0x6c,0x23, - 0x6c,0x27, 0x6c,0x28, 0x6c,0x26, 0x6c,0x24, 0x6c,0xf0, 0x6d,0x6a, 0x6d,0x95, - 0x6d,0x88, 0x6d,0x87, 0x6d,0x66, 0x6d,0x78, 0x6d,0x77, 0x6d,0x59, 0x6d,0x93, - 0x6d,0x6c, 0x6d,0x89, 0x6d,0x6e, 0x6d,0x5a, 0x6d,0x74, 0x6d,0x69, 0x6d,0x8c, - 0x6d,0x8a, 0x6d,0x79, 0x6d,0x85, 0x6d,0x65, 0x6d,0x94, 0x70,0xca, 0x70,0xd8, - 0x70,0xe4, 0x70,0xd9, 0x70,0xc8, 0x70,0xcf, 0x72,0x39, 0x72,0x79, 0x72,0xfc, - 0x72,0xf9, 0x72,0xfd, 0x72,0xf8, 0x72,0xf7, 0x73,0x86, 0x73,0xed, 0x74,0x09, - 0x73,0xee, 0x73,0xe0, 0x73,0xea, 0x73,0xde, 0x75,0x54, 0x75,0x5d, 0x75,0x5c, - 0x75,0x5a, 0x75,0x59, 0x75,0xbe, 0x75,0xc5, 0x75,0xc7, 0x75,0xb2, 0x75,0xb3, - 0x75,0xbd, 0x75,0xbc, 0x75,0xb9, 0x75,0xc2, 0x75,0xb8, 0x76,0x8b, 0x76,0xb0, - 0x76,0xca, 0x76,0xcd, 0x76,0xce, 0x77,0x29, 0x77,0x1f, 0x77,0x20, 0x77,0x28, - 0x77,0xe9, 0x78,0x30, 0x78,0x27, 0x78,0x38, 0x78,0x1d, 0x78,0x34, 0x78,0x37, - 0x78,0x25, 0x78,0x2d, 0x78,0x20, 0x78,0x1f, 0x78,0x32, 0x79,0x55, 0x79,0x50, - 0x79,0x60, 0x79,0x5f, 0x79,0x56, 0x79,0x5e, 0x79,0x5d, 0x79,0x57, 0x79,0x5a, - 0x79,0xe4, 0x79,0xe3, 0x79,0xe7, 0x79,0xdf, 0x79,0xe6, 0x79,0xe9, 0x79,0xd8, - 0x7a,0x84, 0x7a,0x88, 0x7a,0xd9, 0x7b,0x06, 0x7b,0x11, 0x7c,0x89, 0x7d,0x21, - 0x7d,0x17, 0x7d,0x0b, 0x7d,0x0a, 0x7d,0x20, 0x7d,0x22, 0x7d,0x14, 0x7d,0x10, - 0x7d,0x15, 0x7d,0x1a, 0x7d,0x1c, 0x7d,0x0d, 0x7d,0x19, 0x7d,0x1b, 0x7f,0x3a, - 0x7f,0x5f, 0x7f,0x94, 0x7f,0xc5, 0x7f,0xc1, 0x80,0x06, 0x80,0x18, 0x80,0x15, - 0x80,0x19, 0x80,0x17, 0x80,0x3d, 0x80,0x3f, 0x80,0xf1, 0x81,0x02, 0x80,0xf0, - 0x81,0x05, 0x80,0xed, 0x80,0xf4, 0x81,0x06, 0x80,0xf8, 0x80,0xf3, 0x81,0x08, - 0x80,0xfd, 0x81,0x0a, 0x80,0xfc, 0x80,0xef, 0x81,0xed, 0x81,0xec, 0x82,0x00, - 0x82,0x10, 0x82,0x2a, 0x82,0x2b, 0x82,0x28, 0x82,0x2c, 0x82,0xbb, 0x83,0x2b, - 0x83,0x52, 0x83,0x54, 0x83,0x4a, 0x83,0x38, 0x83,0x50, 0x83,0x49, 0x83,0x35, - 0x83,0x34, 0x83,0x4f, 0x83,0x32, 0x83,0x39, 0x83,0x36, 0x83,0x17, 0x83,0x40, - 0x83,0x31, 0x83,0x28, 0x83,0x43, 0x86,0x54, 0x86,0x8a, 0x86,0xaa, 0x86,0x93, - 0x86,0xa4, 0x86,0xa9, 0x86,0x8c, 0x86,0xa3, 0x86,0x9c, 0x88,0x70, 0x88,0x77, - 0x88,0x81, 0x88,0x82, 0x88,0x7d, 0x88,0x79, 0x8a,0x18, 0x8a,0x10, 0x8a,0x0e, - 0x8a,0x0c, 0x8a,0x15, 0x8a,0x0a, 0x8a,0x17, 0x8a,0x13, 0x8a,0x16, 0x8a,0x0f, - 0x8a,0x11, 0x8c,0x48, 0x8c,0x7a, 0x8c,0x79, 0x8c,0xa1, 0x8c,0xa2, 0x8d,0x77, - 0x8e,0xac, 0x8e,0xd2, 0x8e,0xd4, 0x8e,0xcf, 0x8f,0xb1, 0x90,0x01, 0x90,0x06, - 0x8f,0xf7, 0x90,0x00, 0x8f,0xfa, 0x8f,0xf4, 0x90,0x03, 0x8f,0xfd, 0x90,0x05, - 0x8f,0xf8, 0x90,0x95, 0x90,0xe1, 0x90,0xdd, 0x90,0xe2, 0x91,0x52, 0x91,0x4d, - 0x91,0x4c, 0x91,0xd8, 0x91,0xdd, 0x91,0xd7, 0x91,0xdc, 0x91,0xd9, 0x95,0x83, - 0x96,0x62, 0x96,0x63, 0x96,0x61, 0x96,0x5b, 0x96,0x5d, 0x96,0x64, 0x96,0x58, - 0x96,0x5e, 0x96,0xbb, 0x98,0xe2, 0x99,0xac, 0x9a,0xa8, 0x9a,0xd8, 0x9b,0x25, - 0x9b,0x32, 0x9b,0x3c, 0x4e,0x7e, 0x50,0x7a, 0x50,0x7d, 0x50,0x5c, 0x50,0x47, - 0x50,0x43, 0x50,0x4c, 0x50,0x5a, 0x50,0x49, 0x50,0x65, 0x50,0x76, 0x50,0x4e, - 0x50,0x55, 0x50,0x75, 0x50,0x74, 0x50,0x77, 0x50,0x4f, 0x50,0x0f, 0x50,0x6f, - 0x50,0x6d, 0x51,0x5c, 0x51,0x95, 0x51,0xf0, 0x52,0x6a, 0x52,0x6f, 0x52,0xd2, - 0x52,0xd9, 0x52,0xd8, 0x52,0xd5, 0x53,0x10, 0x53,0x0f, 0x53,0x19, 0x53,0x3f, - 0x53,0x40, 0x53,0x3e, 0x53,0xc3, 0x66,0xfc, 0x55,0x46, 0x55,0x6a, 0x55,0x66, - 0x55,0x44, 0x55,0x5e, 0x55,0x61, 0x55,0x43, 0x55,0x4a, 0x55,0x31, 0x55,0x56, - 0x55,0x4f, 0x55,0x55, 0x55,0x2f, 0x55,0x64, 0x55,0x38, 0x55,0x2e, 0x55,0x5c, - 0x55,0x2c, 0x55,0x63, 0x55,0x33, 0x55,0x41, 0x55,0x57, 0x57,0x08, 0x57,0x0b, - 0x57,0x09, 0x57,0xdf, 0x58,0x05, 0x58,0x0a, 0x58,0x06, 0x57,0xe0, 0x57,0xe4, - 0x57,0xfa, 0x58,0x02, 0x58,0x35, 0x57,0xf7, 0x57,0xf9, 0x59,0x20, 0x59,0x62, - 0x5a,0x36, 0x5a,0x41, 0x5a,0x49, 0x5a,0x66, 0x5a,0x6a, 0x5a,0x40, 0x5a,0x3c, - 0x5a,0x62, 0x5a,0x5a, 0x5a,0x46, 0x5a,0x4a, 0x5b,0x70, 0x5b,0xc7, 0x5b,0xc5, - 0x5b,0xc4, 0x5b,0xc2, 0x5b,0xbf, 0x5b,0xc6, 0x5c,0x09, 0x5c,0x08, 0x5c,0x07, - 0x5c,0x60, 0x5c,0x5c, 0x5c,0x5d, 0x5d,0x07, 0x5d,0x06, 0x5d,0x0e, 0x5d,0x1b, - 0x5d,0x16, 0x5d,0x22, 0x5d,0x11, 0x5d,0x29, 0x5d,0x14, 0x5d,0x19, 0x5d,0x24, - 0x5d,0x27, 0x5d,0x17, 0x5d,0xe2, 0x5e,0x38, 0x5e,0x36, 0x5e,0x33, 0x5e,0x37, - 0x5e,0xb7, 0x5e,0xb8, 0x5e,0xb6, 0x5e,0xb5, 0x5e,0xbe, 0x5f,0x35, 0x5f,0x37, - 0x5f,0x57, 0x5f,0x6c, 0x5f,0x69, 0x5f,0x6b, 0x5f,0x97, 0x5f,0x99, 0x5f,0x9e, - 0x5f,0x98, 0x5f,0xa1, 0x5f,0xa0, 0x5f,0x9c, 0x60,0x7f, 0x60,0xa3, 0x60,0x89, - 0x60,0xa0, 0x60,0xa8, 0x60,0xcb, 0x60,0xb4, 0x60,0xe6, 0x60,0xbd, 0x60,0xc5, - 0x60,0xbb, 0x60,0xb5, 0x60,0xdc, 0x60,0xbc, 0x60,0xd8, 0x60,0xd5, 0x60,0xc6, - 0x60,0xdf, 0x60,0xb8, 0x60,0xda, 0x60,0xc7, 0x62,0x1a, 0x62,0x1b, 0x62,0x48, - 0x63,0xa0, 0x63,0xa7, 0x63,0x72, 0x63,0x96, 0x63,0xa2, 0x63,0xa5, 0x63,0x77, - 0x63,0x67, 0x63,0x98, 0x63,0xaa, 0x63,0x71, 0x63,0xa9, 0x63,0x89, 0x63,0x83, - 0x63,0x9b, 0x63,0x6b, 0x63,0xa8, 0x63,0x84, 0x63,0x88, 0x63,0x99, 0x63,0xa1, - 0x63,0xac, 0x63,0x92, 0x63,0x8f, 0x63,0x80, 0x63,0x7b, 0x63,0x69, 0x63,0x68, - 0x63,0x7a, 0x65,0x5d, 0x65,0x56, 0x65,0x51, 0x65,0x59, 0x65,0x57, 0x55,0x5f, - 0x65,0x4f, 0x65,0x58, 0x65,0x55, 0x65,0x54, 0x65,0x9c, 0x65,0x9b, 0x65,0xac, - 0x65,0xcf, 0x65,0xcb, 0x65,0xcc, 0x65,0xce, 0x66,0x5d, 0x66,0x5a, 0x66,0x64, - 0x66,0x68, 0x66,0x66, 0x66,0x5e, 0x66,0xf9, 0x52,0xd7, 0x67,0x1b, 0x68,0x81, - 0x68,0xaf, 0x68,0xa2, 0x68,0x93, 0x68,0xb5, 0x68,0x7f, 0x68,0x76, 0x68,0xb1, - 0x68,0xa7, 0x68,0x97, 0x68,0xb0, 0x68,0x83, 0x68,0xc4, 0x68,0xad, 0x68,0x86, - 0x68,0x85, 0x68,0x94, 0x68,0x9d, 0x68,0xa8, 0x68,0x9f, 0x68,0xa1, 0x68,0x82, - 0x6b,0x32, 0x6b,0xba, 0x6b,0xeb, 0x6b,0xec, 0x6c,0x2b, 0x6d,0x8e, 0x6d,0xbc, - 0x6d,0xf3, 0x6d,0xd9, 0x6d,0xb2, 0x6d,0xe1, 0x6d,0xcc, 0x6d,0xe4, 0x6d,0xfb, - 0x6d,0xfa, 0x6e,0x05, 0x6d,0xc7, 0x6d,0xcb, 0x6d,0xaf, 0x6d,0xd1, 0x6d,0xae, - 0x6d,0xde, 0x6d,0xf9, 0x6d,0xb8, 0x6d,0xf7, 0x6d,0xf5, 0x6d,0xc5, 0x6d,0xd2, - 0x6e,0x1a, 0x6d,0xb5, 0x6d,0xda, 0x6d,0xeb, 0x6d,0xd8, 0x6d,0xea, 0x6d,0xf1, - 0x6d,0xee, 0x6d,0xe8, 0x6d,0xc6, 0x6d,0xc4, 0x6d,0xaa, 0x6d,0xec, 0x6d,0xbf, - 0x6d,0xe6, 0x70,0xf9, 0x71,0x09, 0x71,0x0a, 0x70,0xfd, 0x70,0xef, 0x72,0x3d, - 0x72,0x7d, 0x72,0x81, 0x73,0x1c, 0x73,0x1b, 0x73,0x16, 0x73,0x13, 0x73,0x19, - 0x73,0x87, 0x74,0x05, 0x74,0x0a, 0x74,0x03, 0x74,0x06, 0x73,0xfe, 0x74,0x0d, - 0x74,0xe0, 0x74,0xf6, 0x74,0xf7, 0x75,0x1c, 0x75,0x22, 0x75,0x65, 0x75,0x66, - 0x75,0x62, 0x75,0x70, 0x75,0x8f, 0x75,0xd4, 0x75,0xd5, 0x75,0xb5, 0x75,0xca, - 0x75,0xcd, 0x76,0x8e, 0x76,0xd4, 0x76,0xd2, 0x76,0xdb, 0x77,0x37, 0x77,0x3e, - 0x77,0x3c, 0x77,0x36, 0x77,0x38, 0x77,0x3a, 0x78,0x6b, 0x78,0x43, 0x78,0x4e, - 0x79,0x65, 0x79,0x68, 0x79,0x6d, 0x79,0xfb, 0x7a,0x92, 0x7a,0x95, 0x7b,0x20, - 0x7b,0x28, 0x7b,0x1b, 0x7b,0x2c, 0x7b,0x26, 0x7b,0x19, 0x7b,0x1e, 0x7b,0x2e, - 0x7c,0x92, 0x7c,0x97, 0x7c,0x95, 0x7d,0x46, 0x7d,0x43, 0x7d,0x71, 0x7d,0x2e, - 0x7d,0x39, 0x7d,0x3c, 0x7d,0x40, 0x7d,0x30, 0x7d,0x33, 0x7d,0x44, 0x7d,0x2f, - 0x7d,0x42, 0x7d,0x32, 0x7d,0x31, 0x7f,0x3d, 0x7f,0x9e, 0x7f,0x9a, 0x7f,0xcc, - 0x7f,0xce, 0x7f,0xd2, 0x80,0x1c, 0x80,0x4a, 0x80,0x46, 0x81,0x2f, 0x81,0x16, - 0x81,0x23, 0x81,0x2b, 0x81,0x29, 0x81,0x30, 0x81,0x24, 0x82,0x02, 0x82,0x35, - 0x82,0x37, 0x82,0x36, 0x82,0x39, 0x83,0x8e, 0x83,0x9e, 0x83,0x98, 0x83,0x78, - 0x83,0xa2, 0x83,0x96, 0x83,0xbd, 0x83,0xab, 0x83,0x92, 0x83,0x8a, 0x83,0x93, - 0x83,0x89, 0x83,0xa0, 0x83,0x77, 0x83,0x7b, 0x83,0x7c, 0x83,0x86, 0x83,0xa7, - 0x86,0x55, 0x5f,0x6a, 0x86,0xc7, 0x86,0xc0, 0x86,0xb6, 0x86,0xc4, 0x86,0xb5, - 0x86,0xc6, 0x86,0xcb, 0x86,0xb1, 0x86,0xaf, 0x86,0xc9, 0x88,0x53, 0x88,0x9e, - 0x88,0x88, 0x88,0xab, 0x88,0x92, 0x88,0x96, 0x88,0x8d, 0x88,0x8b, 0x89,0x93, - 0x89,0x8f, 0x8a,0x2a, 0x8a,0x1d, 0x8a,0x23, 0x8a,0x25, 0x8a,0x31, 0x8a,0x2d, - 0x8a,0x1f, 0x8a,0x1b, 0x8a,0x22, 0x8c,0x49, 0x8c,0x5a, 0x8c,0xa9, 0x8c,0xac, - 0x8c,0xab, 0x8c,0xa8, 0x8c,0xaa, 0x8c,0xa7, 0x8d,0x67, 0x8d,0x66, 0x8d,0xbe, - 0x8d,0xba, 0x8e,0xdb, 0x8e,0xdf, 0x90,0x19, 0x90,0x0d, 0x90,0x1a, 0x90,0x17, - 0x90,0x23, 0x90,0x1f, 0x90,0x1d, 0x90,0x10, 0x90,0x15, 0x90,0x1e, 0x90,0x20, - 0x90,0x0f, 0x90,0x22, 0x90,0x16, 0x90,0x1b, 0x90,0x14, 0x90,0xe8, 0x90,0xed, - 0x90,0xfd, 0x91,0x57, 0x91,0xce, 0x91,0xf5, 0x91,0xe6, 0x91,0xe3, 0x91,0xe7, - 0x91,0xed, 0x91,0xe9, 0x95,0x89, 0x96,0x6a, 0x96,0x75, 0x96,0x73, 0x96,0x78, - 0x96,0x70, 0x96,0x74, 0x96,0x76, 0x96,0x77, 0x96,0x6c, 0x96,0xc0, 0x96,0xea, - 0x96,0xe9, 0x7a,0xe0, 0x7a,0xdf, 0x98,0x02, 0x98,0x03, 0x9b,0x5a, 0x9c,0xe5, - 0x9e,0x75, 0x9e,0x7f, 0x9e,0xa5, 0x9e,0xbb, 0x50,0xa2, 0x50,0x8d, 0x50,0x85, - 0x50,0x99, 0x50,0x91, 0x50,0x80, 0x50,0x96, 0x50,0x98, 0x50,0x9a, 0x67,0x00, - 0x51,0xf1, 0x52,0x72, 0x52,0x74, 0x52,0x75, 0x52,0x69, 0x52,0xde, 0x52,0xdd, - 0x52,0xdb, 0x53,0x5a, 0x53,0xa5, 0x55,0x7b, 0x55,0x80, 0x55,0xa7, 0x55,0x7c, - 0x55,0x8a, 0x55,0x9d, 0x55,0x98, 0x55,0x82, 0x55,0x9c, 0x55,0xaa, 0x55,0x94, - 0x55,0x87, 0x55,0x8b, 0x55,0x83, 0x55,0xb3, 0x55,0xae, 0x55,0x9f, 0x55,0x3e, - 0x55,0xb2, 0x55,0x9a, 0x55,0xbb, 0x55,0xac, 0x55,0xb1, 0x55,0x7e, 0x55,0x89, - 0x55,0xab, 0x55,0x99, 0x57,0x0d, 0x58,0x2f, 0x58,0x2a, 0x58,0x34, 0x58,0x24, - 0x58,0x30, 0x58,0x31, 0x58,0x21, 0x58,0x1d, 0x58,0x20, 0x58,0xf9, 0x58,0xfa, - 0x59,0x60, 0x5a,0x77, 0x5a,0x9a, 0x5a,0x7f, 0x5a,0x92, 0x5a,0x9b, 0x5a,0xa7, - 0x5b,0x73, 0x5b,0x71, 0x5b,0xd2, 0x5b,0xcc, 0x5b,0xd3, 0x5b,0xd0, 0x5c,0x0a, - 0x5c,0x0b, 0x5c,0x31, 0x5d,0x4c, 0x5d,0x50, 0x5d,0x34, 0x5d,0x47, 0x5d,0xfd, - 0x5e,0x45, 0x5e,0x3d, 0x5e,0x40, 0x5e,0x43, 0x5e,0x7e, 0x5e,0xca, 0x5e,0xc1, - 0x5e,0xc2, 0x5e,0xc4, 0x5f,0x3c, 0x5f,0x6d, 0x5f,0xa9, 0x5f,0xaa, 0x5f,0xa8, - 0x60,0xd1, 0x60,0xe1, 0x60,0xb2, 0x60,0xb6, 0x60,0xe0, 0x61,0x1c, 0x61,0x23, - 0x60,0xfa, 0x61,0x15, 0x60,0xf0, 0x60,0xfb, 0x60,0xf4, 0x61,0x68, 0x60,0xf1, - 0x61,0x0e, 0x60,0xf6, 0x61,0x09, 0x61,0x00, 0x61,0x12, 0x62,0x1f, 0x62,0x49, - 0x63,0xa3, 0x63,0x8c, 0x63,0xcf, 0x63,0xc0, 0x63,0xe9, 0x63,0xc9, 0x63,0xc6, - 0x63,0xcd, 0x63,0xd2, 0x63,0xe3, 0x63,0xd0, 0x63,0xe1, 0x63,0xd6, 0x63,0xed, - 0x63,0xee, 0x63,0x76, 0x63,0xf4, 0x63,0xea, 0x63,0xdb, 0x64,0x52, 0x63,0xda, - 0x63,0xf9, 0x65,0x5e, 0x65,0x66, 0x65,0x62, 0x65,0x63, 0x65,0x91, 0x65,0x90, - 0x65,0xaf, 0x66,0x6e, 0x66,0x70, 0x66,0x74, 0x66,0x76, 0x66,0x6f, 0x66,0x91, - 0x66,0x7a, 0x66,0x7e, 0x66,0x77, 0x66,0xfe, 0x66,0xff, 0x67,0x1f, 0x67,0x1d, - 0x68,0xfa, 0x68,0xd5, 0x68,0xe0, 0x68,0xd8, 0x68,0xd7, 0x69,0x05, 0x68,0xdf, - 0x68,0xf5, 0x68,0xee, 0x68,0xe7, 0x68,0xf9, 0x68,0xd2, 0x68,0xf2, 0x68,0xe3, - 0x68,0xcb, 0x68,0xcd, 0x69,0x0d, 0x69,0x12, 0x69,0x0e, 0x68,0xc9, 0x68,0xda, - 0x69,0x6e, 0x68,0xfb, 0x6b,0x3e, 0x6b,0x3a, 0x6b,0x3d, 0x6b,0x98, 0x6b,0x96, - 0x6b,0xbc, 0x6b,0xef, 0x6c,0x2e, 0x6c,0x2f, 0x6c,0x2c, 0x6e,0x2f, 0x6e,0x38, - 0x6e,0x54, 0x6e,0x21, 0x6e,0x32, 0x6e,0x67, 0x6e,0x4a, 0x6e,0x20, 0x6e,0x25, - 0x6e,0x23, 0x6e,0x1b, 0x6e,0x5b, 0x6e,0x58, 0x6e,0x24, 0x6e,0x56, 0x6e,0x6e, - 0x6e,0x2d, 0x6e,0x26, 0x6e,0x6f, 0x6e,0x34, 0x6e,0x4d, 0x6e,0x3a, 0x6e,0x2c, - 0x6e,0x43, 0x6e,0x1d, 0x6e,0x3e, 0x6e,0xcb, 0x6e,0x89, 0x6e,0x19, 0x6e,0x4e, - 0x6e,0x63, 0x6e,0x44, 0x6e,0x72, 0x6e,0x69, 0x6e,0x5f, 0x71,0x19, 0x71,0x1a, - 0x71,0x26, 0x71,0x30, 0x71,0x21, 0x71,0x36, 0x71,0x6e, 0x71,0x1c, 0x72,0x4c, - 0x72,0x84, 0x72,0x80, 0x73,0x36, 0x73,0x25, 0x73,0x34, 0x73,0x29, 0x74,0x3a, - 0x74,0x2a, 0x74,0x33, 0x74,0x22, 0x74,0x25, 0x74,0x35, 0x74,0x36, 0x74,0x34, - 0x74,0x2f, 0x74,0x1b, 0x74,0x26, 0x74,0x28, 0x75,0x25, 0x75,0x26, 0x75,0x6b, - 0x75,0x6a, 0x75,0xe2, 0x75,0xdb, 0x75,0xe3, 0x75,0xd9, 0x75,0xd8, 0x75,0xde, - 0x75,0xe0, 0x76,0x7b, 0x76,0x7c, 0x76,0x96, 0x76,0x93, 0x76,0xb4, 0x76,0xdc, - 0x77,0x4f, 0x77,0xed, 0x78,0x5d, 0x78,0x6c, 0x78,0x6f, 0x7a,0x0d, 0x7a,0x08, - 0x7a,0x0b, 0x7a,0x05, 0x7a,0x00, 0x7a,0x98, 0x7a,0x97, 0x7a,0x96, 0x7a,0xe5, - 0x7a,0xe3, 0x7b,0x49, 0x7b,0x56, 0x7b,0x46, 0x7b,0x50, 0x7b,0x52, 0x7b,0x54, - 0x7b,0x4d, 0x7b,0x4b, 0x7b,0x4f, 0x7b,0x51, 0x7c,0x9f, 0x7c,0xa5, 0x7d,0x5e, - 0x7d,0x50, 0x7d,0x68, 0x7d,0x55, 0x7d,0x2b, 0x7d,0x6e, 0x7d,0x72, 0x7d,0x61, - 0x7d,0x66, 0x7d,0x62, 0x7d,0x70, 0x7d,0x73, 0x55,0x84, 0x7f,0xd4, 0x7f,0xd5, - 0x80,0x0b, 0x80,0x52, 0x80,0x85, 0x81,0x55, 0x81,0x54, 0x81,0x4b, 0x81,0x51, - 0x81,0x4e, 0x81,0x39, 0x81,0x46, 0x81,0x3e, 0x81,0x4c, 0x81,0x53, 0x81,0x74, - 0x82,0x12, 0x82,0x1c, 0x83,0xe9, 0x84,0x03, 0x83,0xf8, 0x84,0x0d, 0x83,0xe0, - 0x83,0xc5, 0x84,0x0b, 0x83,0xc1, 0x83,0xef, 0x83,0xf1, 0x83,0xf4, 0x84,0x57, - 0x84,0x0a, 0x83,0xf0, 0x84,0x0c, 0x83,0xcc, 0x83,0xfd, 0x83,0xf2, 0x83,0xca, - 0x84,0x38, 0x84,0x0e, 0x84,0x04, 0x83,0xdc, 0x84,0x07, 0x83,0xd4, 0x83,0xdf, - 0x86,0x5b, 0x86,0xdf, 0x86,0xd9, 0x86,0xed, 0x86,0xd4, 0x86,0xdb, 0x86,0xe4, - 0x86,0xd0, 0x86,0xde, 0x88,0x57, 0x88,0xc1, 0x88,0xc2, 0x88,0xb1, 0x89,0x83, - 0x89,0x96, 0x8a,0x3b, 0x8a,0x60, 0x8a,0x55, 0x8a,0x5e, 0x8a,0x3c, 0x8a,0x41, - 0x8a,0x54, 0x8a,0x5b, 0x8a,0x50, 0x8a,0x46, 0x8a,0x34, 0x8a,0x3a, 0x8a,0x36, - 0x8a,0x56, 0x8c,0x61, 0x8c,0x82, 0x8c,0xaf, 0x8c,0xbc, 0x8c,0xb3, 0x8c,0xbd, - 0x8c,0xc1, 0x8c,0xbb, 0x8c,0xc0, 0x8c,0xb4, 0x8c,0xb7, 0x8c,0xb6, 0x8c,0xbf, - 0x8c,0xb8, 0x8d,0x8a, 0x8d,0x85, 0x8d,0x81, 0x8d,0xce, 0x8d,0xdd, 0x8d,0xcb, - 0x8d,0xda, 0x8d,0xd1, 0x8d,0xcc, 0x8d,0xdb, 0x8d,0xc6, 0x8e,0xfb, 0x8e,0xf8, - 0x8e,0xfc, 0x8f,0x9c, 0x90,0x2e, 0x90,0x35, 0x90,0x31, 0x90,0x38, 0x90,0x32, - 0x90,0x36, 0x91,0x02, 0x90,0xf5, 0x91,0x09, 0x90,0xfe, 0x91,0x63, 0x91,0x65, - 0x91,0xcf, 0x92,0x14, 0x92,0x15, 0x92,0x23, 0x92,0x09, 0x92,0x1e, 0x92,0x0d, - 0x92,0x10, 0x92,0x07, 0x92,0x11, 0x95,0x94, 0x95,0x8f, 0x95,0x8b, 0x95,0x91, - 0x95,0x93, 0x95,0x92, 0x95,0x8e, 0x96,0x8a, 0x96,0x8e, 0x96,0x8b, 0x96,0x7d, - 0x96,0x85, 0x96,0x86, 0x96,0x8d, 0x96,0x72, 0x96,0x84, 0x96,0xc1, 0x96,0xc5, - 0x96,0xc4, 0x96,0xc6, 0x96,0xc7, 0x96,0xef, 0x96,0xf2, 0x97,0xcc, 0x98,0x05, - 0x98,0x06, 0x98,0x08, 0x98,0xe7, 0x98,0xea, 0x98,0xef, 0x98,0xe9, 0x98,0xf2, - 0x98,0xed, 0x99,0xae, 0x99,0xad, 0x9e,0xc3, 0x9e,0xcd, 0x9e,0xd1, 0x4e,0x82, - 0x50,0xad, 0x50,0xb5, 0x50,0xb2, 0x50,0xb3, 0x50,0xc5, 0x50,0xbe, 0x50,0xac, - 0x50,0xb7, 0x50,0xbb, 0x50,0xaf, 0x50,0xc7, 0x52,0x7f, 0x52,0x77, 0x52,0x7d, - 0x52,0xdf, 0x52,0xe6, 0x52,0xe4, 0x52,0xe2, 0x52,0xe3, 0x53,0x2f, 0x55,0xdf, - 0x55,0xe8, 0x55,0xd3, 0x55,0xe6, 0x55,0xce, 0x55,0xdc, 0x55,0xc7, 0x55,0xd1, - 0x55,0xe3, 0x55,0xe4, 0x55,0xef, 0x55,0xda, 0x55,0xe1, 0x55,0xc5, 0x55,0xc6, - 0x55,0xe5, 0x55,0xc9, 0x57,0x12, 0x57,0x13, 0x58,0x5e, 0x58,0x51, 0x58,0x58, - 0x58,0x57, 0x58,0x5a, 0x58,0x54, 0x58,0x6b, 0x58,0x4c, 0x58,0x6d, 0x58,0x4a, - 0x58,0x62, 0x58,0x52, 0x58,0x4b, 0x59,0x67, 0x5a,0xc1, 0x5a,0xc9, 0x5a,0xcc, - 0x5a,0xbe, 0x5a,0xbd, 0x5a,0xbc, 0x5a,0xb3, 0x5a,0xc2, 0x5a,0xb2, 0x5d,0x69, - 0x5d,0x6f, 0x5e,0x4c, 0x5e,0x79, 0x5e,0xc9, 0x5e,0xc8, 0x5f,0x12, 0x5f,0x59, - 0x5f,0xac, 0x5f,0xae, 0x61,0x1a, 0x61,0x0f, 0x61,0x48, 0x61,0x1f, 0x60,0xf3, - 0x61,0x1b, 0x60,0xf9, 0x61,0x01, 0x61,0x08, 0x61,0x4e, 0x61,0x4c, 0x61,0x44, - 0x61,0x4d, 0x61,0x3e, 0x61,0x34, 0x61,0x27, 0x61,0x0d, 0x61,0x06, 0x61,0x37, - 0x62,0x21, 0x62,0x22, 0x64,0x13, 0x64,0x3e, 0x64,0x1e, 0x64,0x2a, 0x64,0x2d, - 0x64,0x3d, 0x64,0x2c, 0x64,0x0f, 0x64,0x1c, 0x64,0x14, 0x64,0x0d, 0x64,0x36, - 0x64,0x16, 0x64,0x17, 0x64,0x06, 0x65,0x6c, 0x65,0x9f, 0x65,0xb0, 0x66,0x97, - 0x66,0x89, 0x66,0x87, 0x66,0x88, 0x66,0x96, 0x66,0x84, 0x66,0x98, 0x66,0x8d, - 0x67,0x03, 0x69,0x94, 0x69,0x6d, 0x69,0x5a, 0x69,0x77, 0x69,0x60, 0x69,0x54, - 0x69,0x75, 0x69,0x30, 0x69,0x82, 0x69,0x4a, 0x69,0x68, 0x69,0x6b, 0x69,0x5e, - 0x69,0x53, 0x69,0x79, 0x69,0x86, 0x69,0x5d, 0x69,0x63, 0x69,0x5b, 0x6b,0x47, - 0x6b,0x72, 0x6b,0xc0, 0x6b,0xbf, 0x6b,0xd3, 0x6b,0xfd, 0x6e,0xa2, 0x6e,0xaf, - 0x6e,0xd3, 0x6e,0xb6, 0x6e,0xc2, 0x6e,0x90, 0x6e,0x9d, 0x6e,0xc7, 0x6e,0xc5, - 0x6e,0xa5, 0x6e,0x98, 0x6e,0xbc, 0x6e,0xba, 0x6e,0xab, 0x6e,0xd1, 0x6e,0x96, - 0x6e,0x9c, 0x6e,0xc4, 0x6e,0xd4, 0x6e,0xaa, 0x6e,0xa7, 0x6e,0xb4, 0x71,0x4e, - 0x71,0x59, 0x71,0x69, 0x71,0x64, 0x71,0x49, 0x71,0x67, 0x71,0x5c, 0x71,0x6c, - 0x71,0x66, 0x71,0x4c, 0x71,0x65, 0x71,0x5e, 0x71,0x46, 0x71,0x68, 0x71,0x56, - 0x72,0x3a, 0x72,0x52, 0x73,0x37, 0x73,0x45, 0x73,0x3f, 0x73,0x3e, 0x74,0x6f, - 0x74,0x5a, 0x74,0x55, 0x74,0x5f, 0x74,0x5e, 0x74,0x41, 0x74,0x3f, 0x74,0x59, - 0x74,0x5b, 0x74,0x5c, 0x75,0x76, 0x75,0x78, 0x76,0x00, 0x75,0xf0, 0x76,0x01, - 0x75,0xf2, 0x75,0xf1, 0x75,0xfa, 0x75,0xff, 0x75,0xf4, 0x75,0xf3, 0x76,0xde, - 0x76,0xdf, 0x77,0x5b, 0x77,0x6b, 0x77,0x66, 0x77,0x5e, 0x77,0x63, 0x77,0x79, - 0x77,0x6a, 0x77,0x6c, 0x77,0x5c, 0x77,0x65, 0x77,0x68, 0x77,0x62, 0x77,0xee, - 0x78,0x8e, 0x78,0xb0, 0x78,0x97, 0x78,0x98, 0x78,0x8c, 0x78,0x89, 0x78,0x7c, - 0x78,0x91, 0x78,0x93, 0x78,0x7f, 0x79,0x7a, 0x79,0x7f, 0x79,0x81, 0x84,0x2c, - 0x79,0xbd, 0x7a,0x1c, 0x7a,0x1a, 0x7a,0x20, 0x7a,0x14, 0x7a,0x1f, 0x7a,0x1e, - 0x7a,0x9f, 0x7a,0xa0, 0x7b,0x77, 0x7b,0xc0, 0x7b,0x60, 0x7b,0x6e, 0x7b,0x67, - 0x7c,0xb1, 0x7c,0xb3, 0x7c,0xb5, 0x7d,0x93, 0x7d,0x79, 0x7d,0x91, 0x7d,0x81, - 0x7d,0x8f, 0x7d,0x5b, 0x7f,0x6e, 0x7f,0x69, 0x7f,0x6a, 0x7f,0x72, 0x7f,0xa9, - 0x7f,0xa8, 0x7f,0xa4, 0x80,0x56, 0x80,0x58, 0x80,0x86, 0x80,0x84, 0x81,0x71, - 0x81,0x70, 0x81,0x78, 0x81,0x65, 0x81,0x6e, 0x81,0x73, 0x81,0x6b, 0x81,0x79, - 0x81,0x7a, 0x81,0x66, 0x82,0x05, 0x82,0x47, 0x84,0x82, 0x84,0x77, 0x84,0x3d, - 0x84,0x31, 0x84,0x75, 0x84,0x66, 0x84,0x6b, 0x84,0x49, 0x84,0x6c, 0x84,0x5b, - 0x84,0x3c, 0x84,0x35, 0x84,0x61, 0x84,0x63, 0x84,0x69, 0x84,0x6d, 0x84,0x46, - 0x86,0x5e, 0x86,0x5c, 0x86,0x5f, 0x86,0xf9, 0x87,0x13, 0x87,0x08, 0x87,0x07, - 0x87,0x00, 0x86,0xfe, 0x86,0xfb, 0x87,0x02, 0x87,0x03, 0x87,0x06, 0x87,0x0a, - 0x88,0x59, 0x88,0xdf, 0x88,0xd4, 0x88,0xd9, 0x88,0xdc, 0x88,0xd8, 0x88,0xdd, - 0x88,0xe1, 0x88,0xca, 0x88,0xd5, 0x88,0xd2, 0x89,0x9c, 0x89,0xe3, 0x8a,0x6b, - 0x8a,0x72, 0x8a,0x73, 0x8a,0x66, 0x8a,0x69, 0x8a,0x70, 0x8a,0x87, 0x8a,0x7c, - 0x8a,0x63, 0x8a,0xa0, 0x8a,0x71, 0x8a,0x85, 0x8a,0x6d, 0x8a,0x62, 0x8a,0x6e, - 0x8a,0x6c, 0x8a,0x79, 0x8a,0x7b, 0x8a,0x3e, 0x8a,0x68, 0x8c,0x62, 0x8c,0x8a, - 0x8c,0x89, 0x8c,0xca, 0x8c,0xc7, 0x8c,0xc8, 0x8c,0xc4, 0x8c,0xb2, 0x8c,0xc3, - 0x8c,0xc2, 0x8c,0xc5, 0x8d,0xe1, 0x8d,0xdf, 0x8d,0xe8, 0x8d,0xef, 0x8d,0xf3, - 0x8d,0xfa, 0x8d,0xea, 0x8d,0xe4, 0x8d,0xe6, 0x8e,0xb2, 0x8f,0x03, 0x8f,0x09, - 0x8e,0xfe, 0x8f,0x0a, 0x8f,0x9f, 0x8f,0xb2, 0x90,0x4b, 0x90,0x4a, 0x90,0x53, - 0x90,0x42, 0x90,0x54, 0x90,0x3c, 0x90,0x55, 0x90,0x50, 0x90,0x47, 0x90,0x4f, - 0x90,0x4e, 0x90,0x4d, 0x90,0x51, 0x90,0x3e, 0x90,0x41, 0x91,0x12, 0x91,0x17, - 0x91,0x6c, 0x91,0x6a, 0x91,0x69, 0x91,0xc9, 0x92,0x37, 0x92,0x57, 0x92,0x38, - 0x92,0x3d, 0x92,0x40, 0x92,0x3e, 0x92,0x5b, 0x92,0x4b, 0x92,0x64, 0x92,0x51, - 0x92,0x34, 0x92,0x49, 0x92,0x4d, 0x92,0x45, 0x92,0x39, 0x92,0x3f, 0x92,0x5a, - 0x95,0x98, 0x96,0x98, 0x96,0x94, 0x96,0x95, 0x96,0xcd, 0x96,0xcb, 0x96,0xc9, - 0x96,0xca, 0x96,0xf7, 0x96,0xfb, 0x96,0xf9, 0x96,0xf6, 0x97,0x56, 0x97,0x74, - 0x97,0x76, 0x98,0x10, 0x98,0x11, 0x98,0x13, 0x98,0x0a, 0x98,0x12, 0x98,0x0c, - 0x98,0xfc, 0x98,0xf4, 0x98,0xfd, 0x98,0xfe, 0x99,0xb3, 0x99,0xb1, 0x99,0xb4, - 0x9a,0xe1, 0x9c,0xe9, 0x9e,0x82, 0x9f,0x0e, 0x9f,0x13, 0x9f,0x20, 0x50,0xe7, - 0x50,0xee, 0x50,0xe5, 0x50,0xd6, 0x50,0xed, 0x50,0xda, 0x50,0xd5, 0x50,0xcf, - 0x50,0xd1, 0x50,0xf1, 0x50,0xce, 0x50,0xe9, 0x51,0x62, 0x51,0xf3, 0x52,0x83, - 0x52,0x82, 0x53,0x31, 0x53,0xad, 0x55,0xfe, 0x56,0x00, 0x56,0x1b, 0x56,0x17, - 0x55,0xfd, 0x56,0x14, 0x56,0x06, 0x56,0x09, 0x56,0x0d, 0x56,0x0e, 0x55,0xf7, - 0x56,0x16, 0x56,0x1f, 0x56,0x08, 0x56,0x10, 0x55,0xf6, 0x57,0x18, 0x57,0x16, - 0x58,0x75, 0x58,0x7e, 0x58,0x83, 0x58,0x93, 0x58,0x8a, 0x58,0x79, 0x58,0x85, - 0x58,0x7d, 0x58,0xfd, 0x59,0x25, 0x59,0x22, 0x59,0x24, 0x59,0x6a, 0x59,0x69, - 0x5a,0xe1, 0x5a,0xe6, 0x5a,0xe9, 0x5a,0xd7, 0x5a,0xd6, 0x5a,0xd8, 0x5a,0xe3, - 0x5b,0x75, 0x5b,0xde, 0x5b,0xe7, 0x5b,0xe1, 0x5b,0xe5, 0x5b,0xe6, 0x5b,0xe8, - 0x5b,0xe2, 0x5b,0xe4, 0x5b,0xdf, 0x5c,0x0d, 0x5c,0x62, 0x5d,0x84, 0x5d,0x87, - 0x5e,0x5b, 0x5e,0x63, 0x5e,0x55, 0x5e,0x57, 0x5e,0x54, 0x5e,0xd3, 0x5e,0xd6, - 0x5f,0x0a, 0x5f,0x46, 0x5f,0x70, 0x5f,0xb9, 0x61,0x47, 0x61,0x3f, 0x61,0x4b, - 0x61,0x77, 0x61,0x62, 0x61,0x63, 0x61,0x5f, 0x61,0x5a, 0x61,0x58, 0x61,0x75, - 0x62,0x2a, 0x64,0x87, 0x64,0x58, 0x64,0x54, 0x64,0xa4, 0x64,0x78, 0x64,0x5f, - 0x64,0x7a, 0x64,0x51, 0x64,0x67, 0x64,0x34, 0x64,0x6d, 0x64,0x7b, 0x65,0x72, - 0x65,0xa1, 0x65,0xd7, 0x65,0xd6, 0x66,0xa2, 0x66,0xa8, 0x66,0x9d, 0x69,0x9c, - 0x69,0xa8, 0x69,0x95, 0x69,0xc1, 0x69,0xae, 0x69,0xd3, 0x69,0xcb, 0x69,0x9b, - 0x69,0xb7, 0x69,0xbb, 0x69,0xab, 0x69,0xb4, 0x69,0xd0, 0x69,0xcd, 0x69,0xad, - 0x69,0xcc, 0x69,0xa6, 0x69,0xc3, 0x69,0xa3, 0x6b,0x49, 0x6b,0x4c, 0x6c,0x33, - 0x6f,0x33, 0x6f,0x14, 0x6e,0xfe, 0x6f,0x13, 0x6e,0xf4, 0x6f,0x29, 0x6f,0x3e, - 0x6f,0x20, 0x6f,0x2c, 0x6f,0x0f, 0x6f,0x02, 0x6f,0x22, 0x6e,0xff, 0x6e,0xef, - 0x6f,0x06, 0x6f,0x31, 0x6f,0x38, 0x6f,0x32, 0x6f,0x23, 0x6f,0x15, 0x6f,0x2b, - 0x6f,0x2f, 0x6f,0x88, 0x6f,0x2a, 0x6e,0xec, 0x6f,0x01, 0x6e,0xf2, 0x6e,0xcc, - 0x6e,0xf7, 0x71,0x94, 0x71,0x99, 0x71,0x7d, 0x71,0x8a, 0x71,0x84, 0x71,0x92, - 0x72,0x3e, 0x72,0x92, 0x72,0x96, 0x73,0x44, 0x73,0x50, 0x74,0x64, 0x74,0x63, - 0x74,0x6a, 0x74,0x70, 0x74,0x6d, 0x75,0x04, 0x75,0x91, 0x76,0x27, 0x76,0x0d, - 0x76,0x0b, 0x76,0x09, 0x76,0x13, 0x76,0xe1, 0x76,0xe3, 0x77,0x84, 0x77,0x7d, - 0x77,0x7f, 0x77,0x61, 0x78,0xc1, 0x78,0x9f, 0x78,0xa7, 0x78,0xb3, 0x78,0xa9, - 0x78,0xa3, 0x79,0x8e, 0x79,0x8f, 0x79,0x8d, 0x7a,0x2e, 0x7a,0x31, 0x7a,0xaa, - 0x7a,0xa9, 0x7a,0xed, 0x7a,0xef, 0x7b,0xa1, 0x7b,0x95, 0x7b,0x8b, 0x7b,0x75, - 0x7b,0x97, 0x7b,0x9d, 0x7b,0x94, 0x7b,0x8f, 0x7b,0xb8, 0x7b,0x87, 0x7b,0x84, - 0x7c,0xb9, 0x7c,0xbd, 0x7c,0xbe, 0x7d,0xbb, 0x7d,0xb0, 0x7d,0x9c, 0x7d,0xbd, - 0x7d,0xbe, 0x7d,0xa0, 0x7d,0xca, 0x7d,0xb4, 0x7d,0xb2, 0x7d,0xb1, 0x7d,0xba, - 0x7d,0xa2, 0x7d,0xbf, 0x7d,0xb5, 0x7d,0xb8, 0x7d,0xad, 0x7d,0xd2, 0x7d,0xc7, - 0x7d,0xac, 0x7f,0x70, 0x7f,0xe0, 0x7f,0xe1, 0x7f,0xdf, 0x80,0x5e, 0x80,0x5a, - 0x80,0x87, 0x81,0x50, 0x81,0x80, 0x81,0x8f, 0x81,0x88, 0x81,0x8a, 0x81,0x7f, - 0x81,0x82, 0x81,0xe7, 0x81,0xfa, 0x82,0x07, 0x82,0x14, 0x82,0x1e, 0x82,0x4b, - 0x84,0xc9, 0x84,0xbf, 0x84,0xc6, 0x84,0xc4, 0x84,0x99, 0x84,0x9e, 0x84,0xb2, - 0x84,0x9c, 0x84,0xcb, 0x84,0xb8, 0x84,0xc0, 0x84,0xd3, 0x84,0x90, 0x84,0xbc, - 0x84,0xd1, 0x84,0xca, 0x87,0x3f, 0x87,0x1c, 0x87,0x3b, 0x87,0x22, 0x87,0x25, - 0x87,0x34, 0x87,0x18, 0x87,0x55, 0x87,0x37, 0x87,0x29, 0x88,0xf3, 0x89,0x02, - 0x88,0xf4, 0x88,0xf9, 0x88,0xf8, 0x88,0xfd, 0x88,0xe8, 0x89,0x1a, 0x88,0xef, - 0x8a,0xa6, 0x8a,0x8c, 0x8a,0x9e, 0x8a,0xa3, 0x8a,0x8d, 0x8a,0xa1, 0x8a,0x93, - 0x8a,0xa4, 0x8a,0xaa, 0x8a,0xa5, 0x8a,0xa8, 0x8a,0x98, 0x8a,0x91, 0x8a,0x9a, - 0x8a,0xa7, 0x8c,0x6a, 0x8c,0x8d, 0x8c,0x8c, 0x8c,0xd3, 0x8c,0xd1, 0x8c,0xd2, - 0x8d,0x6b, 0x8d,0x99, 0x8d,0x95, 0x8d,0xfc, 0x8f,0x14, 0x8f,0x12, 0x8f,0x15, - 0x8f,0x13, 0x8f,0xa3, 0x90,0x60, 0x90,0x58, 0x90,0x5c, 0x90,0x63, 0x90,0x59, - 0x90,0x5e, 0x90,0x62, 0x90,0x5d, 0x90,0x5b, 0x91,0x19, 0x91,0x18, 0x91,0x1e, - 0x91,0x75, 0x91,0x78, 0x91,0x77, 0x91,0x74, 0x92,0x78, 0x92,0x80, 0x92,0x85, - 0x92,0x98, 0x92,0x96, 0x92,0x7b, 0x92,0x93, 0x92,0x9c, 0x92,0xa8, 0x92,0x7c, - 0x92,0x91, 0x95,0xa1, 0x95,0xa8, 0x95,0xa9, 0x95,0xa3, 0x95,0xa5, 0x95,0xa4, - 0x96,0x99, 0x96,0x9c, 0x96,0x9b, 0x96,0xcc, 0x96,0xd2, 0x97,0x00, 0x97,0x7c, - 0x97,0x85, 0x97,0xf6, 0x98,0x17, 0x98,0x18, 0x98,0xaf, 0x98,0xb1, 0x99,0x03, - 0x99,0x05, 0x99,0x0c, 0x99,0x09, 0x99,0xc1, 0x9a,0xaf, 0x9a,0xb0, 0x9a,0xe6, - 0x9b,0x41, 0x9b,0x42, 0x9c,0xf4, 0x9c,0xf6, 0x9c,0xf3, 0x9e,0xbc, 0x9f,0x3b, - 0x9f,0x4a, 0x51,0x04, 0x51,0x00, 0x50,0xfb, 0x50,0xf5, 0x50,0xf9, 0x51,0x02, - 0x51,0x08, 0x51,0x09, 0x51,0x05, 0x51,0xdc, 0x52,0x87, 0x52,0x88, 0x52,0x89, - 0x52,0x8d, 0x52,0x8a, 0x52,0xf0, 0x53,0xb2, 0x56,0x2e, 0x56,0x3b, 0x56,0x39, - 0x56,0x32, 0x56,0x3f, 0x56,0x34, 0x56,0x29, 0x56,0x53, 0x56,0x4e, 0x56,0x57, - 0x56,0x74, 0x56,0x36, 0x56,0x2f, 0x56,0x30, 0x58,0x80, 0x58,0x9f, 0x58,0x9e, - 0x58,0xb3, 0x58,0x9c, 0x58,0xae, 0x58,0xa9, 0x58,0xa6, 0x59,0x6d, 0x5b,0x09, - 0x5a,0xfb, 0x5b,0x0b, 0x5a,0xf5, 0x5b,0x0c, 0x5b,0x08, 0x5b,0xee, 0x5b,0xec, - 0x5b,0xe9, 0x5b,0xeb, 0x5c,0x64, 0x5c,0x65, 0x5d,0x9d, 0x5d,0x94, 0x5e,0x62, - 0x5e,0x5f, 0x5e,0x61, 0x5e,0xe2, 0x5e,0xda, 0x5e,0xdf, 0x5e,0xdd, 0x5e,0xe3, - 0x5e,0xe0, 0x5f,0x48, 0x5f,0x71, 0x5f,0xb7, 0x5f,0xb5, 0x61,0x76, 0x61,0x67, - 0x61,0x6e, 0x61,0x5d, 0x61,0x55, 0x61,0x82, 0x61,0x7c, 0x61,0x70, 0x61,0x6b, - 0x61,0x7e, 0x61,0xa7, 0x61,0x90, 0x61,0xab, 0x61,0x8e, 0x61,0xac, 0x61,0x9a, - 0x61,0xa4, 0x61,0x94, 0x61,0xae, 0x62,0x2e, 0x64,0x69, 0x64,0x6f, 0x64,0x79, - 0x64,0x9e, 0x64,0xb2, 0x64,0x88, 0x64,0x90, 0x64,0xb0, 0x64,0xa5, 0x64,0x93, - 0x64,0x95, 0x64,0xa9, 0x64,0x92, 0x64,0xae, 0x64,0xad, 0x64,0xab, 0x64,0x9a, - 0x64,0xac, 0x64,0x99, 0x64,0xa2, 0x64,0xb3, 0x65,0x75, 0x65,0x77, 0x65,0x78, - 0x66,0xae, 0x66,0xab, 0x66,0xb4, 0x66,0xb1, 0x6a,0x23, 0x6a,0x1f, 0x69,0xe8, - 0x6a,0x01, 0x6a,0x1e, 0x6a,0x19, 0x69,0xfd, 0x6a,0x21, 0x6a,0x13, 0x6a,0x0a, - 0x69,0xf3, 0x6a,0x02, 0x6a,0x05, 0x69,0xed, 0x6a,0x11, 0x6b,0x50, 0x6b,0x4e, - 0x6b,0xa4, 0x6b,0xc5, 0x6b,0xc6, 0x6f,0x3f, 0x6f,0x7c, 0x6f,0x84, 0x6f,0x51, - 0x6f,0x66, 0x6f,0x54, 0x6f,0x86, 0x6f,0x6d, 0x6f,0x5b, 0x6f,0x78, 0x6f,0x6e, - 0x6f,0x8e, 0x6f,0x7a, 0x6f,0x70, 0x6f,0x64, 0x6f,0x97, 0x6f,0x58, 0x6e,0xd5, - 0x6f,0x6f, 0x6f,0x60, 0x6f,0x5f, 0x71,0x9f, 0x71,0xac, 0x71,0xb1, 0x71,0xa8, - 0x72,0x56, 0x72,0x9b, 0x73,0x4e, 0x73,0x57, 0x74,0x69, 0x74,0x8b, 0x74,0x83, - 0x74,0x7e, 0x74,0x80, 0x75,0x7f, 0x76,0x20, 0x76,0x29, 0x76,0x1f, 0x76,0x24, - 0x76,0x26, 0x76,0x21, 0x76,0x22, 0x76,0x9a, 0x76,0xba, 0x76,0xe4, 0x77,0x8e, - 0x77,0x87, 0x77,0x8c, 0x77,0x91, 0x77,0x8b, 0x78,0xcb, 0x78,0xc5, 0x78,0xba, - 0x78,0xca, 0x78,0xbe, 0x78,0xd5, 0x78,0xbc, 0x78,0xd0, 0x7a,0x3f, 0x7a,0x3c, - 0x7a,0x40, 0x7a,0x3d, 0x7a,0x37, 0x7a,0x3b, 0x7a,0xaf, 0x7a,0xae, 0x7b,0xad, - 0x7b,0xb1, 0x7b,0xc4, 0x7b,0xb4, 0x7b,0xc6, 0x7b,0xc7, 0x7b,0xc1, 0x7b,0xa0, - 0x7b,0xcc, 0x7c,0xca, 0x7d,0xe0, 0x7d,0xf4, 0x7d,0xef, 0x7d,0xfb, 0x7d,0xd8, - 0x7d,0xec, 0x7d,0xdd, 0x7d,0xe8, 0x7d,0xe3, 0x7d,0xda, 0x7d,0xde, 0x7d,0xe9, - 0x7d,0x9e, 0x7d,0xd9, 0x7d,0xf2, 0x7d,0xf9, 0x7f,0x75, 0x7f,0x77, 0x7f,0xaf, - 0x7f,0xe9, 0x80,0x26, 0x81,0x9b, 0x81,0x9c, 0x81,0x9d, 0x81,0xa0, 0x81,0x9a, - 0x81,0x98, 0x85,0x17, 0x85,0x3d, 0x85,0x1a, 0x84,0xee, 0x85,0x2c, 0x85,0x2d, - 0x85,0x13, 0x85,0x11, 0x85,0x23, 0x85,0x21, 0x85,0x14, 0x84,0xec, 0x85,0x25, - 0x84,0xff, 0x85,0x06, 0x87,0x82, 0x87,0x74, 0x87,0x76, 0x87,0x60, 0x87,0x66, - 0x87,0x78, 0x87,0x68, 0x87,0x59, 0x87,0x57, 0x87,0x4c, 0x87,0x53, 0x88,0x5b, - 0x88,0x5d, 0x89,0x10, 0x89,0x07, 0x89,0x12, 0x89,0x13, 0x89,0x15, 0x89,0x0a, - 0x8a,0xbc, 0x8a,0xd2, 0x8a,0xc7, 0x8a,0xc4, 0x8a,0x95, 0x8a,0xcb, 0x8a,0xf8, - 0x8a,0xb2, 0x8a,0xc9, 0x8a,0xc2, 0x8a,0xbf, 0x8a,0xb0, 0x8a,0xd6, 0x8a,0xcd, - 0x8a,0xb6, 0x8a,0xb9, 0x8a,0xdb, 0x8c,0x4c, 0x8c,0x4e, 0x8c,0x6c, 0x8c,0xe0, - 0x8c,0xde, 0x8c,0xe6, 0x8c,0xe4, 0x8c,0xec, 0x8c,0xed, 0x8c,0xe2, 0x8c,0xe3, - 0x8c,0xdc, 0x8c,0xea, 0x8c,0xe1, 0x8d,0x6d, 0x8d,0x9f, 0x8d,0xa3, 0x8e,0x2b, - 0x8e,0x10, 0x8e,0x1d, 0x8e,0x22, 0x8e,0x0f, 0x8e,0x29, 0x8e,0x1f, 0x8e,0x21, - 0x8e,0x1e, 0x8e,0xba, 0x8f,0x1d, 0x8f,0x1b, 0x8f,0x1f, 0x8f,0x29, 0x8f,0x26, - 0x8f,0x2a, 0x8f,0x1c, 0x8f,0x1e, 0x8f,0x25, 0x90,0x69, 0x90,0x6e, 0x90,0x68, - 0x90,0x6d, 0x90,0x77, 0x91,0x30, 0x91,0x2d, 0x91,0x27, 0x91,0x31, 0x91,0x87, - 0x91,0x89, 0x91,0x8b, 0x91,0x83, 0x92,0xc5, 0x92,0xbb, 0x92,0xb7, 0x92,0xea, - 0x92,0xac, 0x92,0xe4, 0x92,0xc1, 0x92,0xb3, 0x92,0xbc, 0x92,0xd2, 0x92,0xc7, - 0x92,0xf0, 0x92,0xb2, 0x95,0xad, 0x95,0xb1, 0x97,0x04, 0x97,0x06, 0x97,0x07, - 0x97,0x09, 0x97,0x60, 0x97,0x8d, 0x97,0x8b, 0x97,0x8f, 0x98,0x21, 0x98,0x2b, - 0x98,0x1c, 0x98,0xb3, 0x99,0x0a, 0x99,0x13, 0x99,0x12, 0x99,0x18, 0x99,0xdd, - 0x99,0xd0, 0x99,0xdf, 0x99,0xdb, 0x99,0xd1, 0x99,0xd5, 0x99,0xd2, 0x99,0xd9, - 0x9a,0xb7, 0x9a,0xee, 0x9a,0xef, 0x9b,0x27, 0x9b,0x45, 0x9b,0x44, 0x9b,0x77, - 0x9b,0x6f, 0x9d,0x06, 0x9d,0x09, 0x9d,0x03, 0x9e,0xa9, 0x9e,0xbe, 0x9e,0xce, - 0x58,0xa8, 0x9f,0x52, 0x51,0x12, 0x51,0x18, 0x51,0x14, 0x51,0x10, 0x51,0x15, - 0x51,0x80, 0x51,0xaa, 0x51,0xdd, 0x52,0x91, 0x52,0x93, 0x52,0xf3, 0x56,0x59, - 0x56,0x6b, 0x56,0x79, 0x56,0x69, 0x56,0x64, 0x56,0x78, 0x56,0x6a, 0x56,0x68, - 0x56,0x65, 0x56,0x71, 0x56,0x6f, 0x56,0x6c, 0x56,0x62, 0x56,0x76, 0x58,0xc1, - 0x58,0xbe, 0x58,0xc7, 0x58,0xc5, 0x59,0x6e, 0x5b,0x1d, 0x5b,0x34, 0x5b,0x78, - 0x5b,0xf0, 0x5c,0x0e, 0x5f,0x4a, 0x61,0xb2, 0x61,0x91, 0x61,0xa9, 0x61,0x8a, - 0x61,0xcd, 0x61,0xb6, 0x61,0xbe, 0x61,0xca, 0x61,0xc8, 0x62,0x30, 0x64,0xc5, - 0x64,0xc1, 0x64,0xcb, 0x64,0xbb, 0x64,0xbc, 0x64,0xda, 0x64,0xc4, 0x64,0xc7, - 0x64,0xc2, 0x64,0xcd, 0x64,0xbf, 0x64,0xd2, 0x64,0xd4, 0x64,0xbe, 0x65,0x74, - 0x66,0xc6, 0x66,0xc9, 0x66,0xb9, 0x66,0xc4, 0x66,0xc7, 0x66,0xb8, 0x6a,0x3d, - 0x6a,0x38, 0x6a,0x3a, 0x6a,0x59, 0x6a,0x6b, 0x6a,0x58, 0x6a,0x39, 0x6a,0x44, - 0x6a,0x62, 0x6a,0x61, 0x6a,0x4b, 0x6a,0x47, 0x6a,0x35, 0x6a,0x5f, 0x6a,0x48, - 0x6b,0x59, 0x6b,0x77, 0x6c,0x05, 0x6f,0xc2, 0x6f,0xb1, 0x6f,0xa1, 0x6f,0xc3, - 0x6f,0xa4, 0x6f,0xc1, 0x6f,0xa7, 0x6f,0xb3, 0x6f,0xc0, 0x6f,0xb9, 0x6f,0xb6, - 0x6f,0xa6, 0x6f,0xa0, 0x6f,0xb4, 0x71,0xbe, 0x71,0xc9, 0x71,0xd0, 0x71,0xd2, - 0x71,0xc8, 0x71,0xd5, 0x71,0xb9, 0x71,0xce, 0x71,0xd9, 0x71,0xdc, 0x71,0xc3, - 0x71,0xc4, 0x73,0x68, 0x74,0x9c, 0x74,0xa3, 0x74,0x98, 0x74,0x9f, 0x74,0x9e, - 0x74,0xe2, 0x75,0x0c, 0x75,0x0d, 0x76,0x34, 0x76,0x38, 0x76,0x3a, 0x76,0xe7, - 0x76,0xe5, 0x77,0xa0, 0x77,0x9e, 0x77,0x9f, 0x77,0xa5, 0x78,0xe8, 0x78,0xda, - 0x78,0xec, 0x78,0xe7, 0x79,0xa6, 0x7a,0x4d, 0x7a,0x4e, 0x7a,0x46, 0x7a,0x4c, - 0x7a,0x4b, 0x7a,0xba, 0x7b,0xd9, 0x7c,0x11, 0x7b,0xc9, 0x7b,0xe4, 0x7b,0xdb, - 0x7b,0xe1, 0x7b,0xe9, 0x7b,0xe6, 0x7c,0xd5, 0x7c,0xd6, 0x7e,0x0a, 0x7e,0x11, - 0x7e,0x08, 0x7e,0x1b, 0x7e,0x23, 0x7e,0x1e, 0x7e,0x1d, 0x7e,0x09, 0x7e,0x10, - 0x7f,0x79, 0x7f,0xb2, 0x7f,0xf0, 0x7f,0xf1, 0x7f,0xee, 0x80,0x28, 0x81,0xb3, - 0x81,0xa9, 0x81,0xa8, 0x81,0xfb, 0x82,0x08, 0x82,0x58, 0x82,0x59, 0x85,0x4a, - 0x85,0x59, 0x85,0x48, 0x85,0x68, 0x85,0x69, 0x85,0x43, 0x85,0x49, 0x85,0x6d, - 0x85,0x6a, 0x85,0x5e, 0x87,0x83, 0x87,0x9f, 0x87,0x9e, 0x87,0xa2, 0x87,0x8d, - 0x88,0x61, 0x89,0x2a, 0x89,0x32, 0x89,0x25, 0x89,0x2b, 0x89,0x21, 0x89,0xaa, - 0x89,0xa6, 0x8a,0xe6, 0x8a,0xfa, 0x8a,0xeb, 0x8a,0xf1, 0x8b,0x00, 0x8a,0xdc, - 0x8a,0xe7, 0x8a,0xee, 0x8a,0xfe, 0x8b,0x01, 0x8b,0x02, 0x8a,0xf7, 0x8a,0xed, - 0x8a,0xf3, 0x8a,0xf6, 0x8a,0xfc, 0x8c,0x6b, 0x8c,0x6d, 0x8c,0x93, 0x8c,0xf4, - 0x8e,0x44, 0x8e,0x31, 0x8e,0x34, 0x8e,0x42, 0x8e,0x39, 0x8e,0x35, 0x8f,0x3b, - 0x8f,0x2f, 0x8f,0x38, 0x8f,0x33, 0x8f,0xa8, 0x8f,0xa6, 0x90,0x75, 0x90,0x74, - 0x90,0x78, 0x90,0x72, 0x90,0x7c, 0x90,0x7a, 0x91,0x34, 0x91,0x92, 0x93,0x20, - 0x93,0x36, 0x92,0xf8, 0x93,0x33, 0x93,0x2f, 0x93,0x22, 0x92,0xfc, 0x93,0x2b, - 0x93,0x04, 0x93,0x1a, 0x93,0x10, 0x93,0x26, 0x93,0x21, 0x93,0x15, 0x93,0x2e, - 0x93,0x19, 0x95,0xbb, 0x96,0xa7, 0x96,0xa8, 0x96,0xaa, 0x96,0xd5, 0x97,0x0e, - 0x97,0x11, 0x97,0x16, 0x97,0x0d, 0x97,0x13, 0x97,0x0f, 0x97,0x5b, 0x97,0x5c, - 0x97,0x66, 0x97,0x98, 0x98,0x30, 0x98,0x38, 0x98,0x3b, 0x98,0x37, 0x98,0x2d, - 0x98,0x39, 0x98,0x24, 0x99,0x10, 0x99,0x28, 0x99,0x1e, 0x99,0x1b, 0x99,0x21, - 0x99,0x1a, 0x99,0xed, 0x99,0xe2, 0x99,0xf1, 0x9a,0xb8, 0x9a,0xbc, 0x9a,0xfb, - 0x9a,0xed, 0x9b,0x28, 0x9b,0x91, 0x9d,0x15, 0x9d,0x23, 0x9d,0x26, 0x9d,0x28, - 0x9d,0x12, 0x9d,0x1b, 0x9e,0xd8, 0x9e,0xd4, 0x9f,0x8d, 0x9f,0x9c, 0x51,0x2a, - 0x51,0x1f, 0x51,0x21, 0x51,0x32, 0x52,0xf5, 0x56,0x8e, 0x56,0x80, 0x56,0x90, - 0x56,0x85, 0x56,0x87, 0x56,0x8f, 0x58,0xd5, 0x58,0xd3, 0x58,0xd1, 0x58,0xce, - 0x5b,0x30, 0x5b,0x2a, 0x5b,0x24, 0x5b,0x7a, 0x5c,0x37, 0x5c,0x68, 0x5d,0xbc, - 0x5d,0xba, 0x5d,0xbd, 0x5d,0xb8, 0x5e,0x6b, 0x5f,0x4c, 0x5f,0xbd, 0x61,0xc9, - 0x61,0xc2, 0x61,0xc7, 0x61,0xe6, 0x61,0xcb, 0x62,0x32, 0x62,0x34, 0x64,0xce, - 0x64,0xca, 0x64,0xd8, 0x64,0xe0, 0x64,0xf0, 0x64,0xe6, 0x64,0xec, 0x64,0xf1, - 0x64,0xe2, 0x64,0xed, 0x65,0x82, 0x65,0x83, 0x66,0xd9, 0x66,0xd6, 0x6a,0x80, - 0x6a,0x94, 0x6a,0x84, 0x6a,0xa2, 0x6a,0x9c, 0x6a,0xdb, 0x6a,0xa3, 0x6a,0x7e, - 0x6a,0x97, 0x6a,0x90, 0x6a,0xa0, 0x6b,0x5c, 0x6b,0xae, 0x6b,0xda, 0x6c,0x08, - 0x6f,0xd8, 0x6f,0xf1, 0x6f,0xdf, 0x6f,0xe0, 0x6f,0xdb, 0x6f,0xe4, 0x6f,0xeb, - 0x6f,0xef, 0x6f,0x80, 0x6f,0xec, 0x6f,0xe1, 0x6f,0xe9, 0x6f,0xd5, 0x6f,0xee, - 0x6f,0xf0, 0x71,0xe7, 0x71,0xdf, 0x71,0xee, 0x71,0xe6, 0x71,0xe5, 0x71,0xed, - 0x71,0xec, 0x71,0xf4, 0x71,0xe0, 0x72,0x35, 0x72,0x46, 0x73,0x70, 0x73,0x72, - 0x74,0xa9, 0x74,0xb0, 0x74,0xa6, 0x74,0xa8, 0x76,0x46, 0x76,0x42, 0x76,0x4c, - 0x76,0xea, 0x77,0xb3, 0x77,0xaa, 0x77,0xb0, 0x77,0xac, 0x77,0xa7, 0x77,0xad, - 0x77,0xef, 0x78,0xf7, 0x78,0xfa, 0x78,0xf4, 0x78,0xef, 0x79,0x01, 0x79,0xa7, - 0x79,0xaa, 0x7a,0x57, 0x7a,0xbf, 0x7c,0x07, 0x7c,0x0d, 0x7b,0xfe, 0x7b,0xf7, - 0x7c,0x0c, 0x7b,0xe0, 0x7c,0xe0, 0x7c,0xdc, 0x7c,0xde, 0x7c,0xe2, 0x7c,0xdf, - 0x7c,0xd9, 0x7c,0xdd, 0x7e,0x2e, 0x7e,0x3e, 0x7e,0x46, 0x7e,0x37, 0x7e,0x32, - 0x7e,0x43, 0x7e,0x2b, 0x7e,0x3d, 0x7e,0x31, 0x7e,0x45, 0x7e,0x41, 0x7e,0x34, - 0x7e,0x39, 0x7e,0x48, 0x7e,0x35, 0x7e,0x3f, 0x7e,0x2f, 0x7f,0x44, 0x7f,0xf3, - 0x7f,0xfc, 0x80,0x71, 0x80,0x72, 0x80,0x70, 0x80,0x6f, 0x80,0x73, 0x81,0xc6, - 0x81,0xc3, 0x81,0xba, 0x81,0xc2, 0x81,0xc0, 0x81,0xbf, 0x81,0xbd, 0x81,0xc9, - 0x81,0xbe, 0x81,0xe8, 0x82,0x09, 0x82,0x71, 0x85,0xaa, 0x85,0x84, 0x85,0x7e, - 0x85,0x9c, 0x85,0x91, 0x85,0x94, 0x85,0xaf, 0x85,0x9b, 0x85,0x87, 0x85,0xa8, - 0x85,0x8a, 0x86,0x67, 0x87,0xc0, 0x87,0xd1, 0x87,0xb3, 0x87,0xd2, 0x87,0xc6, - 0x87,0xab, 0x87,0xbb, 0x87,0xba, 0x87,0xc8, 0x87,0xcb, 0x89,0x3b, 0x89,0x36, - 0x89,0x44, 0x89,0x38, 0x89,0x3d, 0x89,0xac, 0x8b,0x0e, 0x8b,0x17, 0x8b,0x19, - 0x8b,0x1b, 0x8b,0x0a, 0x8b,0x20, 0x8b,0x1d, 0x8b,0x04, 0x8b,0x10, 0x8c,0x41, - 0x8c,0x3f, 0x8c,0x73, 0x8c,0xfa, 0x8c,0xfd, 0x8c,0xfc, 0x8c,0xf8, 0x8c,0xfb, - 0x8d,0xa8, 0x8e,0x49, 0x8e,0x4b, 0x8e,0x48, 0x8e,0x4a, 0x8f,0x44, 0x8f,0x3e, - 0x8f,0x42, 0x8f,0x45, 0x8f,0x3f, 0x90,0x7f, 0x90,0x7d, 0x90,0x84, 0x90,0x81, - 0x90,0x82, 0x90,0x80, 0x91,0x39, 0x91,0xa3, 0x91,0x9e, 0x91,0x9c, 0x93,0x4d, - 0x93,0x82, 0x93,0x28, 0x93,0x75, 0x93,0x4a, 0x93,0x65, 0x93,0x4b, 0x93,0x18, - 0x93,0x7e, 0x93,0x6c, 0x93,0x5b, 0x93,0x70, 0x93,0x5a, 0x93,0x54, 0x95,0xca, - 0x95,0xcb, 0x95,0xcc, 0x95,0xc8, 0x95,0xc6, 0x96,0xb1, 0x96,0xb8, 0x96,0xd6, - 0x97,0x1c, 0x97,0x1e, 0x97,0xa0, 0x97,0xd3, 0x98,0x46, 0x98,0xb6, 0x99,0x35, - 0x9a,0x01, 0x99,0xff, 0x9b,0xae, 0x9b,0xab, 0x9b,0xaa, 0x9b,0xad, 0x9d,0x3b, - 0x9d,0x3f, 0x9e,0x8b, 0x9e,0xcf, 0x9e,0xde, 0x9e,0xdc, 0x9e,0xdd, 0x9e,0xdb, - 0x9f,0x3e, 0x9f,0x4b, 0x53,0xe2, 0x56,0x95, 0x56,0xae, 0x58,0xd9, 0x58,0xd8, - 0x5b,0x38, 0x5f,0x5d, 0x61,0xe3, 0x62,0x33, 0x64,0xf4, 0x64,0xf2, 0x64,0xfe, - 0x65,0x06, 0x64,0xfa, 0x64,0xfb, 0x64,0xf7, 0x65,0xb7, 0x66,0xdc, 0x67,0x26, - 0x6a,0xb3, 0x6a,0xac, 0x6a,0xc3, 0x6a,0xbb, 0x6a,0xb8, 0x6a,0xc2, 0x6a,0xae, - 0x6a,0xaf, 0x6b,0x5f, 0x6b,0x78, 0x6b,0xaf, 0x70,0x09, 0x70,0x0b, 0x6f,0xfe, - 0x70,0x06, 0x6f,0xfa, 0x70,0x11, 0x70,0x0f, 0x71,0xfb, 0x71,0xfc, 0x71,0xfe, - 0x71,0xf8, 0x73,0x77, 0x73,0x75, 0x74,0xa7, 0x74,0xbf, 0x75,0x15, 0x76,0x56, - 0x76,0x58, 0x76,0x52, 0x77,0xbd, 0x77,0xbf, 0x77,0xbb, 0x77,0xbc, 0x79,0x0e, - 0x79,0xae, 0x7a,0x61, 0x7a,0x62, 0x7a,0x60, 0x7a,0xc4, 0x7a,0xc5, 0x7c,0x2b, - 0x7c,0x27, 0x7c,0x2a, 0x7c,0x1e, 0x7c,0x23, 0x7c,0x21, 0x7c,0xe7, 0x7e,0x54, - 0x7e,0x55, 0x7e,0x5e, 0x7e,0x5a, 0x7e,0x61, 0x7e,0x52, 0x7e,0x59, 0x7f,0x48, - 0x7f,0xf9, 0x7f,0xfb, 0x80,0x77, 0x80,0x76, 0x81,0xcd, 0x81,0xcf, 0x82,0x0a, - 0x85,0xcf, 0x85,0xa9, 0x85,0xcd, 0x85,0xd0, 0x85,0xc9, 0x85,0xb0, 0x85,0xba, - 0x85,0xb9, 0x85,0xa6, 0x87,0xef, 0x87,0xec, 0x87,0xf2, 0x87,0xe0, 0x89,0x86, - 0x89,0xb2, 0x89,0xf4, 0x8b,0x28, 0x8b,0x39, 0x8b,0x2c, 0x8b,0x2b, 0x8c,0x50, - 0x8d,0x05, 0x8e,0x59, 0x8e,0x63, 0x8e,0x66, 0x8e,0x64, 0x8e,0x5f, 0x8e,0x55, - 0x8e,0xc0, 0x8f,0x49, 0x8f,0x4d, 0x90,0x87, 0x90,0x83, 0x90,0x88, 0x91,0xab, - 0x91,0xac, 0x91,0xd0, 0x93,0x94, 0x93,0x8a, 0x93,0x96, 0x93,0xa2, 0x93,0xb3, - 0x93,0xae, 0x93,0xac, 0x93,0xb0, 0x93,0x98, 0x93,0x9a, 0x93,0x97, 0x95,0xd4, - 0x95,0xd6, 0x95,0xd0, 0x95,0xd5, 0x96,0xe2, 0x96,0xdc, 0x96,0xd9, 0x96,0xdb, - 0x96,0xde, 0x97,0x24, 0x97,0xa3, 0x97,0xa6, 0x97,0xad, 0x97,0xf9, 0x98,0x4d, - 0x98,0x4f, 0x98,0x4c, 0x98,0x4e, 0x98,0x53, 0x98,0xba, 0x99,0x3e, 0x99,0x3f, - 0x99,0x3d, 0x99,0x2e, 0x99,0xa5, 0x9a,0x0e, 0x9a,0xc1, 0x9b,0x03, 0x9b,0x06, - 0x9b,0x4f, 0x9b,0x4e, 0x9b,0x4d, 0x9b,0xca, 0x9b,0xc9, 0x9b,0xfd, 0x9b,0xc8, - 0x9b,0xc0, 0x9d,0x51, 0x9d,0x5d, 0x9d,0x60, 0x9e,0xe0, 0x9f,0x15, 0x9f,0x2c, - 0x51,0x33, 0x56,0xa5, 0x58,0xde, 0x58,0xdf, 0x58,0xe2, 0x5b,0xf5, 0x9f,0x90, - 0x5e,0xec, 0x61,0xf2, 0x61,0xf7, 0x61,0xf6, 0x61,0xf5, 0x65,0x00, 0x65,0x0f, - 0x66,0xe0, 0x66,0xdd, 0x6a,0xe5, 0x6a,0xdd, 0x6a,0xda, 0x6a,0xd3, 0x70,0x1b, - 0x70,0x1f, 0x70,0x28, 0x70,0x1a, 0x70,0x1d, 0x70,0x15, 0x70,0x18, 0x72,0x06, - 0x72,0x0d, 0x72,0x58, 0x72,0xa2, 0x73,0x78, 0x73,0x7a, 0x74,0xbd, 0x74,0xca, - 0x74,0xe3, 0x75,0x87, 0x75,0x86, 0x76,0x5f, 0x76,0x61, 0x77,0xc7, 0x79,0x19, - 0x79,0xb1, 0x7a,0x6b, 0x7a,0x69, 0x7c,0x3e, 0x7c,0x3f, 0x7c,0x38, 0x7c,0x3d, - 0x7c,0x37, 0x7c,0x40, 0x7e,0x6b, 0x7e,0x6d, 0x7e,0x79, 0x7e,0x69, 0x7e,0x6a, - 0x7f,0x85, 0x7e,0x73, 0x7f,0xb6, 0x7f,0xb9, 0x7f,0xb8, 0x81,0xd8, 0x85,0xe9, - 0x85,0xdd, 0x85,0xea, 0x85,0xd5, 0x85,0xe4, 0x85,0xe5, 0x85,0xf7, 0x87,0xfb, - 0x88,0x05, 0x88,0x0d, 0x87,0xf9, 0x87,0xfe, 0x89,0x60, 0x89,0x5f, 0x89,0x56, - 0x89,0x5e, 0x8b,0x41, 0x8b,0x5c, 0x8b,0x58, 0x8b,0x49, 0x8b,0x5a, 0x8b,0x4e, - 0x8b,0x4f, 0x8b,0x46, 0x8b,0x59, 0x8d,0x08, 0x8d,0x0a, 0x8e,0x7c, 0x8e,0x72, - 0x8e,0x87, 0x8e,0x76, 0x8e,0x6c, 0x8e,0x7a, 0x8e,0x74, 0x8f,0x54, 0x8f,0x4e, - 0x8f,0xad, 0x90,0x8a, 0x90,0x8b, 0x91,0xb1, 0x91,0xae, 0x93,0xe1, 0x93,0xd1, - 0x93,0xdf, 0x93,0xc3, 0x93,0xc8, 0x93,0xdc, 0x93,0xdd, 0x93,0xd6, 0x93,0xe2, - 0x93,0xcd, 0x93,0xd8, 0x93,0xe4, 0x93,0xd7, 0x93,0xe8, 0x95,0xdc, 0x96,0xb4, - 0x96,0xe3, 0x97,0x2a, 0x97,0x27, 0x97,0x61, 0x97,0xdc, 0x97,0xfb, 0x98,0x5e, - 0x98,0x58, 0x98,0x5b, 0x98,0xbc, 0x99,0x45, 0x99,0x49, 0x9a,0x16, 0x9a,0x19, - 0x9b,0x0d, 0x9b,0xe8, 0x9b,0xe7, 0x9b,0xd6, 0x9b,0xdb, 0x9d,0x89, 0x9d,0x61, - 0x9d,0x72, 0x9d,0x6a, 0x9d,0x6c, 0x9e,0x92, 0x9e,0x97, 0x9e,0x93, 0x9e,0xb4, - 0x52,0xf8, 0x56,0xa8, 0x56,0xb7, 0x56,0xb6, 0x56,0xb4, 0x56,0xbc, 0x58,0xe4, - 0x5b,0x40, 0x5b,0x43, 0x5b,0x7d, 0x5b,0xf6, 0x5d,0xc9, 0x61,0xf8, 0x61,0xfa, - 0x65,0x18, 0x65,0x14, 0x65,0x19, 0x66,0xe6, 0x67,0x27, 0x6a,0xec, 0x70,0x3e, - 0x70,0x30, 0x70,0x32, 0x72,0x10, 0x73,0x7b, 0x74,0xcf, 0x76,0x62, 0x76,0x65, - 0x79,0x26, 0x79,0x2a, 0x79,0x2c, 0x79,0x2b, 0x7a,0xc7, 0x7a,0xf6, 0x7c,0x4c, - 0x7c,0x43, 0x7c,0x4d, 0x7c,0xef, 0x7c,0xf0, 0x8f,0xae, 0x7e,0x7d, 0x7e,0x7c, - 0x7e,0x82, 0x7f,0x4c, 0x80,0x00, 0x81,0xda, 0x82,0x66, 0x85,0xfb, 0x85,0xf9, - 0x86,0x11, 0x85,0xfa, 0x86,0x06, 0x86,0x0b, 0x86,0x07, 0x86,0x0a, 0x88,0x14, - 0x88,0x15, 0x89,0x64, 0x89,0xba, 0x89,0xf8, 0x8b,0x70, 0x8b,0x6c, 0x8b,0x66, - 0x8b,0x6f, 0x8b,0x5f, 0x8b,0x6b, 0x8d,0x0f, 0x8d,0x0d, 0x8e,0x89, 0x8e,0x81, - 0x8e,0x85, 0x8e,0x82, 0x91,0xb4, 0x91,0xcb, 0x94,0x18, 0x94,0x03, 0x93,0xfd, - 0x95,0xe1, 0x97,0x30, 0x98,0xc4, 0x99,0x52, 0x99,0x51, 0x99,0xa8, 0x9a,0x2b, - 0x9a,0x30, 0x9a,0x37, 0x9a,0x35, 0x9c,0x13, 0x9c,0x0d, 0x9e,0x79, 0x9e,0xb5, - 0x9e,0xe8, 0x9f,0x2f, 0x9f,0x5f, 0x9f,0x63, 0x9f,0x61, 0x51,0x37, 0x51,0x38, - 0x56,0xc1, 0x56,0xc0, 0x56,0xc2, 0x59,0x14, 0x5c,0x6c, 0x5d,0xcd, 0x61,0xfc, - 0x61,0xfe, 0x65,0x1d, 0x65,0x1c, 0x65,0x95, 0x66,0xe9, 0x6a,0xfb, 0x6b,0x04, - 0x6a,0xfa, 0x6b,0xb2, 0x70,0x4c, 0x72,0x1b, 0x72,0xa7, 0x74,0xd6, 0x74,0xd4, - 0x76,0x69, 0x77,0xd3, 0x7c,0x50, 0x7e,0x8f, 0x7e,0x8c, 0x7f,0xbc, 0x86,0x17, - 0x86,0x2d, 0x86,0x1a, 0x88,0x23, 0x88,0x22, 0x88,0x21, 0x88,0x1f, 0x89,0x6a, - 0x89,0x6c, 0x89,0xbd, 0x8b,0x74, 0x8b,0x77, 0x8b,0x7d, 0x8d,0x13, 0x8e,0x8a, - 0x8e,0x8d, 0x8e,0x8b, 0x8f,0x5f, 0x8f,0xaf, 0x91,0xba, 0x94,0x2e, 0x94,0x33, - 0x94,0x35, 0x94,0x3a, 0x94,0x38, 0x94,0x32, 0x94,0x2b, 0x95,0xe2, 0x97,0x38, - 0x97,0x39, 0x97,0x32, 0x97,0xff, 0x98,0x67, 0x98,0x65, 0x99,0x57, 0x9a,0x45, - 0x9a,0x43, 0x9a,0x40, 0x9a,0x3e, 0x9a,0xcf, 0x9b,0x54, 0x9b,0x51, 0x9c,0x2d, - 0x9c,0x25, 0x9d,0xaf, 0x9d,0xb4, 0x9d,0xc2, 0x9d,0xb8, 0x9e,0x9d, 0x9e,0xef, - 0x9f,0x19, 0x9f,0x5c, 0x9f,0x66, 0x9f,0x67, 0x51,0x3c, 0x51,0x3b, 0x56,0xc8, - 0x56,0xca, 0x56,0xc9, 0x5b,0x7f, 0x5d,0xd4, 0x5d,0xd2, 0x5f,0x4e, 0x61,0xff, - 0x65,0x24, 0x6b,0x0a, 0x6b,0x61, 0x70,0x51, 0x70,0x58, 0x73,0x80, 0x74,0xe4, - 0x75,0x8a, 0x76,0x6e, 0x76,0x6c, 0x79,0xb3, 0x7c,0x60, 0x7c,0x5f, 0x80,0x7e, - 0x80,0x7d, 0x81,0xdf, 0x89,0x72, 0x89,0x6f, 0x89,0xfc, 0x8b,0x80, 0x8d,0x16, - 0x8d,0x17, 0x8e,0x91, 0x8e,0x93, 0x8f,0x61, 0x91,0x48, 0x94,0x44, 0x94,0x51, - 0x94,0x52, 0x97,0x3d, 0x97,0x3e, 0x97,0xc3, 0x97,0xc1, 0x98,0x6b, 0x99,0x55, - 0x9a,0x55, 0x9a,0x4d, 0x9a,0xd2, 0x9b,0x1a, 0x9c,0x49, 0x9c,0x31, 0x9c,0x3e, - 0x9c,0x3b, 0x9d,0xd3, 0x9d,0xd7, 0x9f,0x34, 0x9f,0x6c, 0x9f,0x6a, 0x9f,0x94, - 0x56,0xcc, 0x5d,0xd6, 0x62,0x00, 0x65,0x23, 0x65,0x2b, 0x65,0x2a, 0x66,0xec, - 0x6b,0x10, 0x74,0xda, 0x7a,0xca, 0x7c,0x64, 0x7c,0x63, 0x7c,0x65, 0x7e,0x93, - 0x7e,0x96, 0x7e,0x94, 0x81,0xe2, 0x86,0x38, 0x86,0x3f, 0x88,0x31, 0x8b,0x8a, - 0x90,0x90, 0x90,0x8f, 0x94,0x63, 0x94,0x60, 0x94,0x64, 0x97,0x68, 0x98,0x6f, - 0x99,0x5c, 0x9a,0x5a, 0x9a,0x5b, 0x9a,0x57, 0x9a,0xd3, 0x9a,0xd4, 0x9a,0xd1, - 0x9c,0x54, 0x9c,0x57, 0x9c,0x56, 0x9d,0xe5, 0x9e,0x9f, 0x9e,0xf4, 0x56,0xd1, - 0x58,0xe9, 0x65,0x2c, 0x70,0x5e, 0x76,0x71, 0x76,0x72, 0x77,0xd7, 0x7f,0x50, - 0x7f,0x88, 0x88,0x36, 0x88,0x39, 0x88,0x62, 0x8b,0x93, 0x8b,0x92, 0x8b,0x96, - 0x82,0x77, 0x8d,0x1b, 0x91,0xc0, 0x94,0x6a, 0x97,0x42, 0x97,0x48, 0x97,0x44, - 0x97,0xc6, 0x98,0x70, 0x9a,0x5f, 0x9b,0x22, 0x9b,0x58, 0x9c,0x5f, 0x9d,0xf9, - 0x9d,0xfa, 0x9e,0x7c, 0x9e,0x7d, 0x9f,0x07, 0x9f,0x77, 0x9f,0x72, 0x5e,0xf3, - 0x6b,0x16, 0x70,0x63, 0x7c,0x6c, 0x7c,0x6e, 0x88,0x3b, 0x89,0xc0, 0x8e,0xa1, - 0x91,0xc1, 0x94,0x72, 0x94,0x70, 0x98,0x71, 0x99,0x5e, 0x9a,0xd6, 0x9b,0x23, - 0x9e,0xcc, 0x70,0x64, 0x77,0xda, 0x8b,0x9a, 0x94,0x77, 0x97,0xc9, 0x9a,0x62, - 0x9a,0x65, 0x7e,0x9c, 0x8b,0x9c, 0x8e,0xaa, 0x91,0xc5, 0x94,0x7d, 0x94,0x7e, - 0x94,0x7c, 0x9c,0x77, 0x9c,0x78, 0x9e,0xf7, 0x8c,0x54, 0x94,0x7f, 0x9e,0x1a, - 0x72,0x28, 0x9a,0x6a, 0x9b,0x31, 0x9e,0x1b, 0x9e,0x1e, 0x7c,0x72, 0x30,0xfe, - 0x30,0x9d, 0x30,0x9e, 0x30,0x05, 0x30,0x41, 0x30,0x42, 0x30,0x43, 0x30,0x44, - 0x30,0x45, 0x30,0x46, 0x30,0x47, 0x30,0x48, 0x30,0x49, 0x30,0x4a, 0x30,0x4b, - 0x30,0x4c, 0x30,0x4d, 0x30,0x4e, 0x30,0x4f, 0x30,0x50, 0x30,0x51, 0x30,0x52, - 0x30,0x53, 0x30,0x54, 0x30,0x55, 0x30,0x56, 0x30,0x57, 0x30,0x58, 0x30,0x59, - 0x30,0x5a, 0x30,0x5b, 0x30,0x5c, 0x30,0x5d, 0x30,0x5e, 0x30,0x5f, 0x30,0x60, - 0x30,0x61, 0x30,0x62, 0x30,0x63, 0x30,0x64, 0x30,0x65, 0x30,0x66, 0x30,0x67, - 0x30,0x68, 0x30,0x69, 0x30,0x6a, 0x30,0x6b, 0x30,0x6c, 0x30,0x6d, 0x30,0x6e, - 0x30,0x6f, 0x30,0x70, 0x30,0x71, 0x30,0x72, 0x30,0x73, 0x30,0x74, 0x30,0x75, - 0x30,0x76, 0x30,0x77, 0x30,0x78, 0x30,0x79, 0x30,0x7a, 0x30,0x7b, 0x30,0x7c, - 0x30,0x7d, 0x30,0x7e, 0x30,0x7f, 0x30,0x80, 0x30,0x81, 0x30,0x82, 0x30,0x83, - 0x30,0x84, 0x30,0x85, 0x30,0x86, 0x30,0x87, 0x30,0x88, 0x30,0x89, 0x30,0x8a, - 0x30,0x8b, 0x30,0x8c, 0x30,0x8d, 0x30,0x8e, 0x30,0x8f, 0x30,0x90, 0x30,0x91, - 0x30,0x92, 0x30,0x93, 0x30,0xa1, 0x30,0xa2, 0x30,0xa3, 0x30,0xa4, 0x30,0xa5, - 0x30,0xa6, 0x30,0xa7, 0x30,0xa8, 0x30,0xa9, 0x30,0xaa, 0x30,0xab, 0x30,0xac, - 0x30,0xad, 0x30,0xae, 0x30,0xaf, 0x30,0xb0, 0x30,0xb1, 0x30,0xb2, 0x30,0xb3, - 0x30,0xb4, 0x30,0xb5, 0x30,0xb6, 0x30,0xb7, 0x30,0xb8, 0x30,0xb9, 0x30,0xba, - 0x30,0xbb, 0x30,0xbc, 0x30,0xbd, 0x30,0xbe, 0x30,0xbf, 0x30,0xc0, 0x30,0xc1, - 0x30,0xc2, 0x30,0xc3, 0x30,0xc4, 0x30,0xc5, 0x30,0xc6, 0x30,0xc7, 0x30,0xc8, - 0x30,0xc9, 0x30,0xca, 0x30,0xcb, 0x30,0xcc, 0x30,0xcd, 0x30,0xce, 0x30,0xcf, - 0x30,0xd0, 0x30,0xd1, 0x30,0xd2, 0x30,0xd3, 0x30,0xd4, 0x30,0xd5, 0x30,0xd6, - 0x30,0xd7, 0x30,0xd8, 0x30,0xd9, 0x30,0xda, 0x30,0xdb, 0x30,0xdc, 0x30,0xdd, - 0x30,0xde, 0x30,0xdf, 0x30,0xe0, 0x30,0xe1, 0x30,0xe2, 0x30,0xe3, 0x30,0xe4, - 0x30,0xe5, 0x30,0xe6, 0x30,0xe7, 0x30,0xe8, 0x30,0xe9, 0x30,0xea, 0x30,0xeb, - 0x30,0xec, 0x30,0xed, 0x30,0xee, 0x30,0xef, 0x30,0xf0, 0x30,0xf1, 0x30,0xf2, - 0x30,0xf3, 0x30,0xf4, 0x30,0xf5, 0x30,0xf6, 0x04,0x14, 0x04,0x15, 0x04,0x01, - 0x04,0x16, 0x04,0x17, 0x04,0x18, 0x04,0x19, 0x04,0x1a, 0x04,0x1b, 0x04,0x1c, - 0x04,0x23, 0x04,0x24, 0x04,0x25, 0x04,0x26, 0x04,0x27, 0x04,0x28, 0x04,0x29, - 0x04,0x2a, 0x04,0x2b, 0x04,0x2c, 0x04,0x2d, 0x04,0x2e, 0x04,0x2f, 0x04,0x30, - 0x04,0x31, 0x04,0x32, 0x04,0x33, 0x04,0x34, 0x04,0x35, 0x04,0x51, 0x04,0x36, - 0x04,0x37, 0x04,0x38, 0x04,0x39, 0x04,0x3a, 0x04,0x3b, 0x04,0x3c, 0x04,0x3d, - 0x04,0x3e, 0x04,0x3f, 0x04,0x40, 0x04,0x41, 0x04,0x42, 0x04,0x43, 0x04,0x44, - 0x04,0x45, 0x04,0x46, 0x04,0x47, 0x04,0x48, 0x04,0x49, 0x04,0x4a, 0x04,0x4b, - 0x04,0x4c, 0x04,0x4d, 0x04,0x4e, 0x04,0x4f, 0x24,0x60, 0x24,0x61, 0x24,0x62, - 0x24,0x63, 0x24,0x64, 0x24,0x65, 0x24,0x66, 0x24,0x67, 0x24,0x68, 0x24,0x69, - 0x24,0x74, 0x24,0x75, 0x24,0x76, 0x24,0x77, 0x24,0x78, 0x24,0x79, 0x24,0x7a, - 0x24,0x7b, 0x24,0x7c, 0x24,0x7d, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, - 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, - 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, - 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, - 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, - 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, - 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, - 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, - 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, - 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, - 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, - 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, - 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, - 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, - 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, - 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, - 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, - 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, - 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, - 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, - 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, - 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, - 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, - 0xff,0xfd, 0x4e,0x42, 0x4e,0x5c, 0x51,0xf5, 0x53,0x1a, 0x53,0x82, 0x4e,0x07, - 0x4e,0x0c, 0x4e,0x47, 0x4e,0x8d, 0x56,0xd7, 0xfa,0x0c, 0x5c,0x6e, 0x5f,0x73, - 0x4e,0x0f, 0x51,0x87, 0x4e,0x0e, 0x4e,0x2e, 0x4e,0x93, 0x4e,0xc2, 0x4e,0xc9, - 0x4e,0xc8, 0x51,0x98, 0x52,0xfc, 0x53,0x6c, 0x53,0xb9, 0x57,0x20, 0x59,0x03, - 0x59,0x2c, 0x5c,0x10, 0x5d,0xff, 0x65,0xe1, 0x6b,0xb3, 0x6b,0xcc, 0x6c,0x14, - 0x72,0x3f, 0x4e,0x31, 0x4e,0x3c, 0x4e,0xe8, 0x4e,0xdc, 0x4e,0xe9, 0x4e,0xe1, - 0x4e,0xdd, 0x4e,0xda, 0x52,0x0c, 0x53,0x1c, 0x53,0x4c, 0x57,0x22, 0x57,0x23, - 0x59,0x17, 0x59,0x2f, 0x5b,0x81, 0x5b,0x84, 0x5c,0x12, 0x5c,0x3b, 0x5c,0x74, - 0x5c,0x73, 0x5e,0x04, 0x5e,0x80, 0x5e,0x82, 0x5f,0xc9, 0x62,0x09, 0x62,0x50, - 0x6c,0x15, 0x6c,0x36, 0x6c,0x43, 0x6c,0x3f, 0x6c,0x3b, 0x72,0xae, 0x72,0xb0, - 0x73,0x8a, 0x79,0xb8, 0x80,0x8a, 0x96,0x1e, 0x4f,0x0e, 0x4f,0x18, 0x4f,0x2c, - 0x4e,0xf5, 0x4f,0x14, 0x4e,0xf1, 0x4f,0x00, 0x4e,0xf7, 0x4f,0x08, 0x4f,0x1d, - 0x4f,0x02, 0x4f,0x05, 0x4f,0x22, 0x4f,0x13, 0x4f,0x04, 0x4e,0xf4, 0x4f,0x12, - 0x51,0xb1, 0x52,0x13, 0x52,0x09, 0x52,0x10, 0x52,0xa6, 0x53,0x22, 0x53,0x1f, - 0x53,0x4d, 0x53,0x8a, 0x54,0x07, 0x56,0xe1, 0x56,0xdf, 0x57,0x2e, 0x57,0x2a, - 0x57,0x34, 0x59,0x3c, 0x59,0x80, 0x59,0x7c, 0x59,0x85, 0x59,0x7b, 0x59,0x7e, - 0x59,0x77, 0x59,0x7f, 0x5b,0x56, 0x5c,0x15, 0x5c,0x25, 0x5c,0x7c, 0x5c,0x7a, - 0x5c,0x7b, 0x5c,0x7e, 0x5d,0xdf, 0x5e,0x75, 0x5e,0x84, 0x5f,0x02, 0x5f,0x1a, - 0x5f,0x74, 0x5f,0xd5, 0x5f,0xd4, 0x5f,0xcf, 0x62,0x5c, 0x62,0x5e, 0x62,0x64, - 0x62,0x61, 0x62,0x66, 0x62,0x62, 0x62,0x59, 0x62,0x60, 0x62,0x5a, 0x62,0x65, - 0x65,0xef, 0x65,0xee, 0x67,0x3e, 0x67,0x39, 0x67,0x38, 0x67,0x3b, 0x67,0x3a, - 0x67,0x3f, 0x67,0x3c, 0x67,0x33, 0x6c,0x18, 0x6c,0x46, 0x6c,0x52, 0x6c,0x5c, - 0x6c,0x4f, 0x6c,0x4a, 0x6c,0x54, 0x6c,0x4b, 0x6c,0x4c, 0x70,0x71, 0x72,0x5e, - 0x72,0xb4, 0x72,0xb5, 0x73,0x8e, 0x75,0x2a, 0x76,0x7f, 0x7a,0x75, 0x7f,0x51, - 0x82,0x78, 0x82,0x7c, 0x82,0x80, 0x82,0x7d, 0x82,0x7f, 0x86,0x4d, 0x89,0x7e, - 0x90,0x99, 0x90,0x97, 0x90,0x98, 0x90,0x9b, 0x90,0x94, 0x96,0x22, 0x96,0x24, - 0x96,0x20, 0x96,0x23, 0x4f,0x56, 0x4f,0x3b, 0x4f,0x62, 0x4f,0x49, 0x4f,0x53, - 0x4f,0x64, 0x4f,0x3e, 0x4f,0x67, 0x4f,0x52, 0x4f,0x5f, 0x4f,0x41, 0x4f,0x58, - 0x4f,0x2d, 0x4f,0x33, 0x4f,0x3f, 0x4f,0x61, 0x51,0x8f, 0x51,0xb9, 0x52,0x1c, - 0x52,0x1e, 0x52,0x21, 0x52,0xad, 0x52,0xae, 0x53,0x09, 0x53,0x63, 0x53,0x72, - 0x53,0x8e, 0x53,0x8f, 0x54,0x30, 0x54,0x37, 0x54,0x2a, 0x54,0x54, 0x54,0x45, - 0x54,0x19, 0x54,0x1c, 0x54,0x25, 0x54,0x18, 0x54,0x3d, 0x54,0x4f, 0x54,0x41, - 0x54,0x28, 0x54,0x24, 0x54,0x47, 0x56,0xee, 0x56,0xe7, 0x56,0xe5, 0x57,0x41, - 0x57,0x45, 0x57,0x4c, 0x57,0x49, 0x57,0x4b, 0x57,0x52, 0x59,0x06, 0x59,0x40, - 0x59,0xa6, 0x59,0x98, 0x59,0xa0, 0x59,0x97, 0x59,0x8e, 0x59,0xa2, 0x59,0x90, - 0x59,0x8f, 0x59,0xa7, 0x59,0xa1, 0x5b,0x8e, 0x5b,0x92, 0x5c,0x28, 0x5c,0x2a, - 0x5c,0x8d, 0x5c,0x8f, 0x5c,0x88, 0x5c,0x8b, 0x5c,0x89, 0x5c,0x92, 0x5c,0x8a, - 0x5c,0x86, 0x5c,0x93, 0x5c,0x95, 0x5d,0xe0, 0x5e,0x0a, 0x5e,0x0e, 0x5e,0x8b, - 0x5e,0x89, 0x5e,0x8c, 0x5e,0x88, 0x5e,0x8d, 0x5f,0x05, 0x5f,0x1d, 0x5f,0x78, - 0x5f,0x76, 0x5f,0xd2, 0x5f,0xd1, 0x5f,0xd0, 0x5f,0xed, 0x5f,0xe8, 0x5f,0xee, - 0x5f,0xf3, 0x5f,0xe1, 0x5f,0xe4, 0x5f,0xe3, 0x5f,0xfa, 0x5f,0xef, 0x5f,0xf7, - 0x5f,0xfb, 0x60,0x00, 0x5f,0xf4, 0x62,0x3a, 0x62,0x83, 0x62,0x8c, 0x62,0x8e, - 0x62,0x8f, 0x62,0x94, 0x62,0x87, 0x62,0x71, 0x62,0x7b, 0x62,0x7a, 0x62,0x70, - 0x62,0x81, 0x62,0x88, 0x62,0x77, 0x62,0x7d, 0x62,0x72, 0x62,0x74, 0x65,0x37, - 0x65,0xf0, 0x65,0xf4, 0x65,0xf3, 0x65,0xf2, 0x65,0xf5, 0x67,0x45, 0x67,0x47, - 0x67,0x59, 0x67,0x55, 0x67,0x4c, 0x67,0x48, 0x67,0x5d, 0x67,0x4d, 0x67,0x5a, - 0x67,0x4b, 0x6b,0xd0, 0x6c,0x19, 0x6c,0x1a, 0x6c,0x78, 0x6c,0x67, 0x6c,0x6b, - 0x6c,0x84, 0x6c,0x8b, 0x6c,0x8f, 0x6c,0x71, 0x6c,0x6f, 0x6c,0x69, 0x6c,0x9a, - 0x6c,0x6d, 0x6c,0x87, 0x6c,0x95, 0x6c,0x9c, 0x6c,0x66, 0x6c,0x73, 0x6c,0x65, - 0x6c,0x7b, 0x6c,0x8e, 0x70,0x74, 0x70,0x7a, 0x72,0x63, 0x72,0xbf, 0x72,0xbd, - 0x72,0xc3, 0x72,0xc6, 0x72,0xc1, 0x72,0xba, 0x72,0xc5, 0x73,0x95, 0x73,0x97, - 0x73,0x93, 0x73,0x94, 0x73,0x92, 0x75,0x3a, 0x75,0x39, 0x75,0x94, 0x75,0x95, - 0x76,0x81, 0x79,0x3d, 0x80,0x34, 0x80,0x95, 0x80,0x99, 0x80,0x90, 0x80,0x92, - 0x80,0x9c, 0x82,0x90, 0x82,0x8f, 0x82,0x85, 0x82,0x8e, 0x82,0x91, 0x82,0x93, - 0x82,0x8a, 0x82,0x83, 0x82,0x84, 0x8c,0x78, 0x8f,0xc9, 0x8f,0xbf, 0x90,0x9f, - 0x90,0xa1, 0x90,0xa5, 0x90,0x9e, 0x90,0xa7, 0x90,0xa0, 0x96,0x30, 0x96,0x28, - 0x96,0x2f, 0x96,0x2d, 0x4e,0x33, 0x4f,0x98, 0x4f,0x7c, 0x4f,0x85, 0x4f,0x7d, - 0x4f,0x80, 0x4f,0x87, 0x4f,0x76, 0x4f,0x74, 0x4f,0x89, 0x4f,0x84, 0x4f,0x77, - 0x4f,0x4c, 0x4f,0x97, 0x4f,0x6a, 0x4f,0x9a, 0x4f,0x79, 0x4f,0x81, 0x4f,0x78, - 0x4f,0x90, 0x4f,0x9c, 0x4f,0x94, 0x4f,0x9e, 0x4f,0x92, 0x4f,0x82, 0x4f,0x95, - 0x4f,0x6b, 0x4f,0x6e, 0x51,0x9e, 0x51,0xbc, 0x51,0xbe, 0x52,0x35, 0x52,0x32, - 0x52,0x33, 0x52,0x46, 0x52,0x31, 0x52,0xbc, 0x53,0x0a, 0x53,0x0b, 0x53,0x3c, - 0x53,0x92, 0x53,0x94, 0x54,0x87, 0x54,0x7f, 0x54,0x81, 0x54,0x91, 0x54,0x82, - 0x54,0x88, 0x54,0x6b, 0x54,0x7a, 0x54,0x7e, 0x54,0x65, 0x54,0x6c, 0x54,0x74, - 0x54,0x66, 0x54,0x8d, 0x54,0x6f, 0x54,0x61, 0x54,0x60, 0x54,0x98, 0x54,0x63, - 0x54,0x67, 0x54,0x64, 0x56,0xf7, 0x56,0xf9, 0x57,0x6f, 0x57,0x72, 0x57,0x6d, - 0x57,0x6b, 0x57,0x71, 0x57,0x70, 0x57,0x76, 0x57,0x80, 0x57,0x75, 0x57,0x7b, - 0x57,0x73, 0x57,0x74, 0x57,0x62, 0x57,0x68, 0x57,0x7d, 0x59,0x0c, 0x59,0x45, - 0x59,0xb5, 0x59,0xba, 0x59,0xcf, 0x59,0xce, 0x59,0xb2, 0x59,0xcc, 0x59,0xc1, - 0x59,0xb6, 0x59,0xbc, 0x59,0xc3, 0x59,0xd6, 0x59,0xb1, 0x59,0xbd, 0x59,0xc0, - 0x59,0xc8, 0x59,0xb4, 0x59,0xc7, 0x5b,0x62, 0x5b,0x65, 0x5b,0x93, 0x5b,0x95, - 0x5c,0x44, 0x5c,0x47, 0x5c,0xae, 0x5c,0xa4, 0x5c,0xa0, 0x5c,0xb5, 0x5c,0xaf, - 0x5c,0xa8, 0x5c,0xac, 0x5c,0x9f, 0x5c,0xa3, 0x5c,0xad, 0x5c,0xa2, 0x5c,0xaa, - 0x5c,0xa7, 0x5c,0x9d, 0x5c,0xa5, 0x5c,0xb6, 0x5c,0xb0, 0x5c,0xa6, 0x5e,0x17, - 0x5e,0x14, 0x5e,0x19, 0x5f,0x28, 0x5f,0x22, 0x5f,0x23, 0x5f,0x24, 0x5f,0x54, - 0x5f,0x82, 0x5f,0x7e, 0x5f,0x7d, 0x5f,0xde, 0x5f,0xe5, 0x60,0x2d, 0x60,0x26, - 0x60,0x19, 0x60,0x32, 0x60,0x0b, 0x60,0x34, 0x60,0x0a, 0x60,0x17, 0x60,0x33, - 0x60,0x1a, 0x60,0x1e, 0x60,0x2c, 0x60,0x22, 0x60,0x0d, 0x60,0x10, 0x60,0x2e, - 0x60,0x13, 0x60,0x11, 0x60,0x0c, 0x60,0x09, 0x60,0x1c, 0x62,0x14, 0x62,0x3d, - 0x62,0xad, 0x62,0xb4, 0x62,0xd1, 0x62,0xbe, 0x62,0xaa, 0x62,0xb6, 0x62,0xca, - 0x62,0xae, 0x62,0xb3, 0x62,0xaf, 0x62,0xbb, 0x62,0xa9, 0x62,0xb0, 0x62,0xb8, - 0x65,0x3d, 0x65,0xa8, 0x65,0xbb, 0x66,0x09, 0x65,0xfc, 0x66,0x04, 0x66,0x12, - 0x66,0x08, 0x65,0xfb, 0x66,0x03, 0x66,0x0b, 0x66,0x0d, 0x66,0x05, 0x65,0xfd, - 0x66,0x11, 0x66,0x10, 0x66,0xf6, 0x67,0x0a, 0x67,0x85, 0x67,0x6c, 0x67,0x8e, - 0x67,0x92, 0x67,0x76, 0x67,0x7b, 0x67,0x98, 0x67,0x86, 0x67,0x84, 0x67,0x74, - 0x67,0x8d, 0x67,0x8c, 0x67,0x7a, 0x67,0x9f, 0x67,0x91, 0x67,0x99, 0x67,0x83, - 0x67,0x7d, 0x67,0x81, 0x67,0x78, 0x67,0x79, 0x67,0x94, 0x6b,0x25, 0x6b,0x80, - 0x6b,0x7e, 0x6b,0xde, 0x6c,0x1d, 0x6c,0x93, 0x6c,0xec, 0x6c,0xeb, 0x6c,0xee, - 0x6c,0xd9, 0x6c,0xb6, 0x6c,0xd4, 0x6c,0xad, 0x6c,0xe7, 0x6c,0xb7, 0x6c,0xd0, - 0x6c,0xc2, 0x6c,0xba, 0x6c,0xc3, 0x6c,0xc6, 0x6c,0xed, 0x6c,0xf2, 0x6c,0xd2, - 0x6c,0xdd, 0x6c,0xb4, 0x6c,0x8a, 0x6c,0x9d, 0x6c,0x80, 0x6c,0xde, 0x6c,0xc0, - 0x6d,0x30, 0x6c,0xcd, 0x6c,0xc7, 0x6c,0xb0, 0x6c,0xf9, 0x6c,0xcf, 0x6c,0xe9, - 0x6c,0xd1, 0x70,0x94, 0x70,0x98, 0x70,0x85, 0x70,0x93, 0x70,0x86, 0x70,0x84, - 0x70,0x91, 0x70,0x96, 0x70,0x82, 0x70,0x9a, 0x70,0x83, 0x72,0x6a, 0x72,0xd6, - 0x72,0xcb, 0x72,0xd8, 0x72,0xc9, 0x72,0xdc, 0x72,0xd2, 0x72,0xd4, 0x72,0xda, - 0x72,0xcc, 0x72,0xd1, 0x73,0xa4, 0x73,0xa1, 0x73,0xad, 0x73,0xa6, 0x73,0xa2, - 0x73,0xa0, 0x73,0xac, 0x73,0x9d, 0x74,0xdd, 0x74,0xe8, 0x75,0x3f, 0x75,0x40, - 0x75,0x3e, 0x75,0x8c, 0x75,0x98, 0x76,0xaf, 0x76,0xf3, 0x76,0xf1, 0x76,0xf0, - 0x76,0xf5, 0x77,0xf8, 0x77,0xfc, 0x77,0xf9, 0x77,0xfb, 0x77,0xfa, 0x77,0xf7, - 0x79,0x42, 0x79,0x3f, 0x79,0xc5, 0x7a,0x78, 0x7a,0x7b, 0x7a,0xfb, 0x7c,0x75, - 0x7c,0xfd, 0x80,0x35, 0x80,0x8f, 0x80,0xae, 0x80,0xa3, 0x80,0xb8, 0x80,0xb5, - 0x80,0xad, 0x82,0x20, 0x82,0xa0, 0x82,0xc0, 0x82,0xab, 0x82,0x9a, 0x82,0x98, - 0x82,0x9b, 0x82,0xb5, 0x82,0xa7, 0x82,0xae, 0x82,0xbc, 0x82,0x9e, 0x82,0xba, - 0x82,0xb4, 0x82,0xa8, 0x82,0xa1, 0x82,0xa9, 0x82,0xc2, 0x82,0xa4, 0x82,0xc3, - 0x82,0xb6, 0x82,0xa2, 0x86,0x70, 0x86,0x6f, 0x86,0x6d, 0x86,0x6e, 0x8c,0x56, - 0x8f,0xd2, 0x8f,0xcb, 0x8f,0xd3, 0x8f,0xcd, 0x8f,0xd6, 0x8f,0xd5, 0x8f,0xd7, - 0x90,0xb2, 0x90,0xb4, 0x90,0xaf, 0x90,0xb3, 0x90,0xb0, 0x96,0x39, 0x96,0x3d, - 0x96,0x3c, 0x96,0x3a, 0x96,0x43, 0x4f,0xcd, 0x4f,0xc5, 0x4f,0xd3, 0x4f,0xb2, - 0x4f,0xc9, 0x4f,0xcb, 0x4f,0xc1, 0x4f,0xd4, 0x4f,0xdc, 0x4f,0xd9, 0x4f,0xbb, - 0x4f,0xb3, 0x4f,0xdb, 0x4f,0xc7, 0x4f,0xd6, 0x4f,0xba, 0x4f,0xc0, 0x4f,0xb9, - 0x4f,0xec, 0x52,0x44, 0x52,0x49, 0x52,0xc0, 0x52,0xc2, 0x53,0x3d, 0x53,0x7c, - 0x53,0x97, 0x53,0x96, 0x53,0x99, 0x53,0x98, 0x54,0xba, 0x54,0xa1, 0x54,0xad, - 0x54,0xa5, 0x54,0xcf, 0x54,0xc3, 0x83,0x0d, 0x54,0xb7, 0x54,0xae, 0x54,0xd6, - 0x54,0xb6, 0x54,0xc5, 0x54,0xc6, 0x54,0xa0, 0x54,0x70, 0x54,0xbc, 0x54,0xa2, - 0x54,0xbe, 0x54,0x72, 0x54,0xde, 0x54,0xb0, 0x57,0xb5, 0x57,0x9e, 0x57,0x9f, - 0x57,0xa4, 0x57,0x8c, 0x57,0x97, 0x57,0x9d, 0x57,0x9b, 0x57,0x94, 0x57,0x98, - 0x57,0x8f, 0x57,0x99, 0x57,0xa5, 0x57,0x9a, 0x57,0x95, 0x58,0xf4, 0x59,0x0d, - 0x59,0x53, 0x59,0xe1, 0x59,0xde, 0x59,0xee, 0x5a,0x00, 0x59,0xf1, 0x59,0xdd, - 0x59,0xfa, 0x59,0xfd, 0x59,0xfc, 0x59,0xf6, 0x59,0xe4, 0x59,0xf2, 0x59,0xf7, - 0x59,0xdb, 0x59,0xe9, 0x59,0xf3, 0x59,0xf5, 0x59,0xe0, 0x59,0xfe, 0x59,0xf4, - 0x59,0xed, 0x5b,0xa8, 0x5c,0x4c, 0x5c,0xd0, 0x5c,0xd8, 0x5c,0xcc, 0x5c,0xd7, - 0x5c,0xcb, 0x5c,0xdb, 0x5c,0xde, 0x5c,0xda, 0x5c,0xc9, 0x5c,0xc7, 0x5c,0xca, - 0x5c,0xd6, 0x5c,0xd3, 0x5c,0xd4, 0x5c,0xcf, 0x5c,0xc8, 0x5c,0xc6, 0x5c,0xce, - 0x5c,0xdf, 0x5c,0xf8, 0x5d,0xf9, 0x5e,0x21, 0x5e,0x22, 0x5e,0x23, 0x5e,0x20, - 0x5e,0x24, 0x5e,0xb0, 0x5e,0xa4, 0x5e,0xa2, 0x5e,0x9b, 0x5e,0xa3, 0x5e,0xa5, - 0x5f,0x07, 0x5f,0x2e, 0x5f,0x56, 0x5f,0x86, 0x60,0x37, 0x60,0x39, 0x60,0x54, - 0x60,0x72, 0x60,0x5e, 0x60,0x45, 0x60,0x53, 0x60,0x47, 0x60,0x49, 0x60,0x5b, - 0x60,0x4c, 0x60,0x40, 0x60,0x42, 0x60,0x5f, 0x60,0x24, 0x60,0x44, 0x60,0x58, - 0x60,0x66, 0x60,0x6e, 0x62,0x42, 0x62,0x43, 0x62,0xcf, 0x63,0x0d, 0x63,0x0b, - 0x62,0xf5, 0x63,0x0e, 0x63,0x03, 0x62,0xeb, 0x62,0xf9, 0x63,0x0f, 0x63,0x0c, - 0x62,0xf8, 0x62,0xf6, 0x63,0x00, 0x63,0x13, 0x63,0x14, 0x62,0xfa, 0x63,0x15, - 0x62,0xfb, 0x62,0xf0, 0x65,0x41, 0x65,0x43, 0x65,0xaa, 0x65,0xbf, 0x66,0x36, - 0x66,0x21, 0x66,0x32, 0x66,0x35, 0x66,0x1c, 0x66,0x26, 0x66,0x22, 0x66,0x33, - 0x66,0x2b, 0x66,0x3a, 0x66,0x1d, 0x66,0x34, 0x66,0x39, 0x66,0x2e, 0x67,0x0f, - 0x67,0x10, 0x67,0xc1, 0x67,0xf2, 0x67,0xc8, 0x67,0xba, 0x67,0xdc, 0x67,0xbb, - 0x67,0xf8, 0x67,0xd8, 0x67,0xc0, 0x67,0xb7, 0x67,0xc5, 0x67,0xeb, 0x67,0xe4, - 0x67,0xdf, 0x67,0xb5, 0x67,0xcd, 0x67,0xb3, 0x67,0xf7, 0x67,0xf6, 0x67,0xee, - 0x67,0xe3, 0x67,0xc2, 0x67,0xb9, 0x67,0xce, 0x67,0xe7, 0x67,0xf0, 0x67,0xb2, - 0x67,0xfc, 0x67,0xc6, 0x67,0xed, 0x67,0xcc, 0x67,0xae, 0x67,0xe6, 0x67,0xdb, - 0x67,0xfa, 0x67,0xc9, 0x67,0xca, 0x67,0xc3, 0x67,0xea, 0x67,0xcb, 0x6b,0x28, - 0x6b,0x82, 0x6b,0x84, 0x6b,0xb6, 0x6b,0xd6, 0x6b,0xd8, 0x6b,0xe0, 0x6c,0x20, - 0x6c,0x21, 0x6d,0x28, 0x6d,0x34, 0x6d,0x2d, 0x6d,0x1f, 0x6d,0x3c, 0x6d,0x3f, - 0x6d,0x12, 0x6d,0x0a, 0x6c,0xda, 0x6d,0x33, 0x6d,0x04, 0x6d,0x19, 0x6d,0x3a, - 0x6d,0x1a, 0x6d,0x11, 0x6d,0x00, 0x6d,0x1d, 0x6d,0x42, 0x6d,0x01, 0x6d,0x18, - 0x6d,0x37, 0x6d,0x03, 0x6d,0x0f, 0x6d,0x40, 0x6d,0x07, 0x6d,0x20, 0x6d,0x2c, - 0x6d,0x08, 0x6d,0x22, 0x6d,0x09, 0x6d,0x10, 0x70,0xb7, 0x70,0x9f, 0x70,0xbe, - 0x70,0xb1, 0x70,0xb0, 0x70,0xa1, 0x70,0xb4, 0x70,0xb5, 0x70,0xa9, 0x72,0x41, - 0x72,0x49, 0x72,0x4a, 0x72,0x6c, 0x72,0x70, 0x72,0x73, 0x72,0x6e, 0x72,0xca, - 0x72,0xe4, 0x72,0xe8, 0x72,0xeb, 0x72,0xdf, 0x72,0xea, 0x72,0xe6, 0x72,0xe3, - 0x73,0x85, 0x73,0xcc, 0x73,0xc2, 0x73,0xc8, 0x73,0xc5, 0x73,0xb9, 0x73,0xb6, - 0x73,0xb5, 0x73,0xb4, 0x73,0xeb, 0x73,0xbf, 0x73,0xc7, 0x73,0xbe, 0x73,0xc3, - 0x73,0xc6, 0x73,0xb8, 0x73,0xcb, 0x74,0xec, 0x74,0xee, 0x75,0x2e, 0x75,0x47, - 0x75,0x48, 0x75,0xa7, 0x75,0xaa, 0x76,0x79, 0x76,0xc4, 0x77,0x08, 0x77,0x03, - 0x77,0x04, 0x77,0x05, 0x77,0x0a, 0x76,0xf7, 0x76,0xfb, 0x76,0xfa, 0x77,0xe7, - 0x77,0xe8, 0x78,0x06, 0x78,0x11, 0x78,0x12, 0x78,0x05, 0x78,0x10, 0x78,0x0f, - 0x78,0x0e, 0x78,0x09, 0x78,0x03, 0x78,0x13, 0x79,0x4a, 0x79,0x4c, 0x79,0x4b, - 0x79,0x45, 0x79,0x44, 0x79,0xd5, 0x79,0xcd, 0x79,0xcf, 0x79,0xd6, 0x79,0xce, - 0x7a,0x80, 0x7a,0x7e, 0x7a,0xd1, 0x7b,0x00, 0x7b,0x01, 0x7c,0x7a, 0x7c,0x78, - 0x7c,0x79, 0x7c,0x7f, 0x7c,0x80, 0x7c,0x81, 0x7d,0x03, 0x7d,0x08, 0x7d,0x01, - 0x7f,0x58, 0x7f,0x91, 0x7f,0x8d, 0x7f,0xbe, 0x80,0x07, 0x80,0x0e, 0x80,0x0f, - 0x80,0x14, 0x80,0x37, 0x80,0xd8, 0x80,0xc7, 0x80,0xe0, 0x80,0xd1, 0x80,0xc8, - 0x80,0xc2, 0x80,0xd0, 0x80,0xc5, 0x80,0xe3, 0x80,0xd9, 0x80,0xdc, 0x80,0xca, - 0x80,0xd5, 0x80,0xc9, 0x80,0xcf, 0x80,0xd7, 0x80,0xe6, 0x80,0xcd, 0x81,0xff, - 0x82,0x21, 0x82,0x94, 0x82,0xd9, 0x82,0xfe, 0x82,0xf9, 0x83,0x07, 0x82,0xe8, - 0x83,0x00, 0x82,0xd5, 0x83,0x3a, 0x82,0xeb, 0x82,0xd6, 0x82,0xf4, 0x82,0xec, - 0x82,0xe1, 0x82,0xf2, 0x82,0xf5, 0x83,0x0c, 0x82,0xfb, 0x82,0xf6, 0x82,0xf0, - 0x82,0xea, 0x82,0xe4, 0x82,0xe0, 0x82,0xfa, 0x82,0xf3, 0x82,0xed, 0x86,0x77, - 0x86,0x74, 0x86,0x7c, 0x86,0x73, 0x88,0x41, 0x88,0x4e, 0x88,0x67, 0x88,0x6a, - 0x88,0x69, 0x89,0xd3, 0x8a,0x04, 0x8a,0x07, 0x8d,0x72, 0x8f,0xe3, 0x8f,0xe1, - 0x8f,0xee, 0x8f,0xe0, 0x90,0xf1, 0x90,0xbd, 0x90,0xbf, 0x90,0xd5, 0x90,0xc5, - 0x90,0xbe, 0x90,0xc7, 0x90,0xcb, 0x90,0xc8, 0x91,0xd4, 0x91,0xd3, 0x96,0x54, - 0x96,0x4f, 0x96,0x51, 0x96,0x53, 0x96,0x4a, 0x96,0x4e, 0x50,0x1e, 0x50,0x05, - 0x50,0x07, 0x50,0x13, 0x50,0x22, 0x50,0x30, 0x50,0x1b, 0x4f,0xf5, 0x4f,0xf4, - 0x50,0x33, 0x50,0x37, 0x50,0x2c, 0x4f,0xf6, 0x4f,0xf7, 0x50,0x17, 0x50,0x1c, - 0x50,0x20, 0x50,0x27, 0x50,0x35, 0x50,0x2f, 0x50,0x31, 0x50,0x0e, 0x51,0x5a, - 0x51,0x94, 0x51,0x93, 0x51,0xca, 0x51,0xc4, 0x51,0xc5, 0x51,0xc8, 0x51,0xce, - 0x52,0x61, 0x52,0x5a, 0x52,0x52, 0x52,0x5e, 0x52,0x5f, 0x52,0x55, 0x52,0x62, - 0x52,0xcd, 0x53,0x0e, 0x53,0x9e, 0x55,0x26, 0x54,0xe2, 0x55,0x17, 0x55,0x12, - 0x54,0xe7, 0x54,0xf3, 0x54,0xe4, 0x55,0x1a, 0x54,0xff, 0x55,0x04, 0x55,0x08, - 0x54,0xeb, 0x55,0x11, 0x55,0x05, 0x54,0xf1, 0x55,0x0a, 0x54,0xfb, 0x54,0xf7, - 0x54,0xf8, 0x54,0xe0, 0x55,0x0e, 0x55,0x03, 0x55,0x0b, 0x57,0x01, 0x57,0x02, - 0x57,0xcc, 0x58,0x32, 0x57,0xd5, 0x57,0xd2, 0x57,0xba, 0x57,0xc6, 0x57,0xbd, - 0x57,0xbc, 0x57,0xb8, 0x57,0xb6, 0x57,0xbf, 0x57,0xc7, 0x57,0xd0, 0x57,0xb9, - 0x57,0xc1, 0x59,0x0e, 0x59,0x4a, 0x5a,0x19, 0x5a,0x16, 0x5a,0x2d, 0x5a,0x2e, - 0x5a,0x15, 0x5a,0x0f, 0x5a,0x17, 0x5a,0x0a, 0x5a,0x1e, 0x5a,0x33, 0x5b,0x6c, - 0x5b,0xa7, 0x5b,0xad, 0x5b,0xac, 0x5c,0x03, 0x5c,0x56, 0x5c,0x54, 0x5c,0xec, - 0x5c,0xff, 0x5c,0xee, 0x5c,0xf1, 0x5c,0xf7, 0x5d,0x00, 0x5c,0xf9, 0x5e,0x29, - 0x5e,0x28, 0x5e,0xa8, 0x5e,0xae, 0x5e,0xaa, 0x5e,0xac, 0x5f,0x33, 0x5f,0x30, - 0x5f,0x67, 0x60,0x5d, 0x60,0x5a, 0x60,0x67, 0x60,0x41, 0x60,0xa2, 0x60,0x88, - 0x60,0x80, 0x60,0x92, 0x60,0x81, 0x60,0x9d, 0x60,0x83, 0x60,0x95, 0x60,0x9b, - 0x60,0x97, 0x60,0x87, 0x60,0x9c, 0x60,0x8e, 0x62,0x19, 0x62,0x46, 0x62,0xf2, - 0x63,0x10, 0x63,0x56, 0x63,0x2c, 0x63,0x44, 0x63,0x45, 0x63,0x36, 0x63,0x43, - 0x63,0xe4, 0x63,0x39, 0x63,0x4b, 0x63,0x4a, 0x63,0x3c, 0x63,0x29, 0x63,0x41, - 0x63,0x34, 0x63,0x58, 0x63,0x54, 0x63,0x59, 0x63,0x2d, 0x63,0x47, 0x63,0x33, - 0x63,0x5a, 0x63,0x51, 0x63,0x38, 0x63,0x57, 0x63,0x40, 0x63,0x48, 0x65,0x4a, - 0x65,0x46, 0x65,0xc6, 0x65,0xc3, 0x65,0xc4, 0x65,0xc2, 0x66,0x4a, 0x66,0x5f, - 0x66,0x47, 0x66,0x51, 0x67,0x12, 0x67,0x13, 0x68,0x1f, 0x68,0x1a, 0x68,0x49, - 0x68,0x32, 0x68,0x33, 0x68,0x3b, 0x68,0x4b, 0x68,0x4f, 0x68,0x16, 0x68,0x31, - 0x68,0x1c, 0x68,0x35, 0x68,0x2b, 0x68,0x2d, 0x68,0x2f, 0x68,0x4e, 0x68,0x44, - 0x68,0x34, 0x68,0x1d, 0x68,0x12, 0x68,0x14, 0x68,0x26, 0x68,0x28, 0x68,0x2e, - 0x68,0x4d, 0x68,0x3a, 0x68,0x25, 0x68,0x20, 0x6b,0x2c, 0x6b,0x2f, 0x6b,0x2d, - 0x6b,0x31, 0x6b,0x34, 0x6b,0x6d, 0x80,0x82, 0x6b,0x88, 0x6b,0xe6, 0x6b,0xe4, - 0x6b,0xe8, 0x6b,0xe3, 0x6b,0xe2, 0x6b,0xe7, 0x6c,0x25, 0x6d,0x7a, 0x6d,0x63, - 0x6d,0x64, 0x6d,0x76, 0x6d,0x0d, 0x6d,0x61, 0x6d,0x92, 0x6d,0x58, 0x6d,0x62, - 0x6d,0x6d, 0x6d,0x6f, 0x6d,0x91, 0x6d,0x8d, 0x6d,0xef, 0x6d,0x7f, 0x6d,0x86, - 0x6d,0x5e, 0x6d,0x67, 0x6d,0x60, 0x6d,0x97, 0x6d,0x70, 0x6d,0x7c, 0x6d,0x5f, - 0x6d,0x82, 0x6d,0x98, 0x6d,0x2f, 0x6d,0x68, 0x6d,0x8b, 0x6d,0x7e, 0x6d,0x80, - 0x6d,0x84, 0x6d,0x16, 0x6d,0x83, 0x6d,0x7b, 0x6d,0x7d, 0x6d,0x75, 0x6d,0x90, - 0x70,0xdc, 0x70,0xd3, 0x70,0xd1, 0x70,0xdd, 0x70,0xcb, 0x7f,0x39, 0x70,0xe2, - 0x70,0xd7, 0x70,0xd2, 0x70,0xde, 0x70,0xe0, 0x70,0xd4, 0x70,0xcd, 0x70,0xc5, - 0x70,0xc6, 0x70,0xc7, 0x70,0xda, 0x70,0xce, 0x70,0xe1, 0x72,0x42, 0x72,0x78, - 0x72,0x77, 0x72,0x76, 0x73,0x00, 0x72,0xfa, 0x72,0xf4, 0x72,0xfe, 0x72,0xf6, - 0x72,0xf3, 0x72,0xfb, 0x73,0x01, 0x73,0xd3, 0x73,0xd9, 0x73,0xe5, 0x73,0xd6, - 0x73,0xbc, 0x73,0xe7, 0x73,0xe3, 0x73,0xe9, 0x73,0xdc, 0x73,0xd2, 0x73,0xdb, - 0x73,0xd4, 0x73,0xdd, 0x73,0xda, 0x73,0xd7, 0x73,0xd8, 0x73,0xe8, 0x74,0xde, - 0x74,0xdf, 0x74,0xf4, 0x74,0xf5, 0x75,0x21, 0x75,0x5b, 0x75,0x5f, 0x75,0xb0, - 0x75,0xc1, 0x75,0xbb, 0x75,0xc4, 0x75,0xc0, 0x75,0xbf, 0x75,0xb6, 0x75,0xba, - 0x76,0x8a, 0x76,0xc9, 0x77,0x1d, 0x77,0x1b, 0x77,0x10, 0x77,0x13, 0x77,0x12, - 0x77,0x23, 0x77,0x11, 0x77,0x15, 0x77,0x19, 0x77,0x1a, 0x77,0x22, 0x77,0x27, - 0x78,0x23, 0x78,0x2c, 0x78,0x22, 0x78,0x35, 0x78,0x2f, 0x78,0x28, 0x78,0x2e, - 0x78,0x2b, 0x78,0x21, 0x78,0x29, 0x78,0x33, 0x78,0x2a, 0x78,0x31, 0x79,0x54, - 0x79,0x5b, 0x79,0x4f, 0x79,0x5c, 0x79,0x53, 0x79,0x52, 0x79,0x51, 0x79,0xeb, - 0x79,0xec, 0x79,0xe0, 0x79,0xee, 0x79,0xed, 0x79,0xea, 0x79,0xdc, 0x79,0xde, - 0x79,0xdd, 0x7a,0x86, 0x7a,0x89, 0x7a,0x85, 0x7a,0x8b, 0x7a,0x8c, 0x7a,0x8a, - 0x7a,0x87, 0x7a,0xd8, 0x7b,0x10, 0x7b,0x04, 0x7b,0x13, 0x7b,0x05, 0x7b,0x0f, - 0x7b,0x08, 0x7b,0x0a, 0x7b,0x0e, 0x7b,0x09, 0x7b,0x12, 0x7c,0x84, 0x7c,0x91, - 0x7c,0x8a, 0x7c,0x8c, 0x7c,0x88, 0x7c,0x8d, 0x7c,0x85, 0x7d,0x1e, 0x7d,0x1d, - 0x7d,0x11, 0x7d,0x0e, 0x7d,0x18, 0x7d,0x16, 0x7d,0x13, 0x7d,0x1f, 0x7d,0x12, - 0x7d,0x0f, 0x7d,0x0c, 0x7f,0x5c, 0x7f,0x61, 0x7f,0x5e, 0x7f,0x60, 0x7f,0x5d, - 0x7f,0x5b, 0x7f,0x96, 0x7f,0x92, 0x7f,0xc3, 0x7f,0xc2, 0x7f,0xc0, 0x80,0x16, - 0x80,0x3e, 0x80,0x39, 0x80,0xfa, 0x80,0xf2, 0x80,0xf9, 0x80,0xf5, 0x81,0x01, - 0x80,0xfb, 0x81,0x00, 0x82,0x01, 0x82,0x2f, 0x82,0x25, 0x83,0x33, 0x83,0x2d, - 0x83,0x44, 0x83,0x19, 0x83,0x51, 0x83,0x25, 0x83,0x56, 0x83,0x3f, 0x83,0x41, - 0x83,0x26, 0x83,0x1c, 0x83,0x22, 0x83,0x42, 0x83,0x4e, 0x83,0x1b, 0x83,0x2a, - 0x83,0x08, 0x83,0x3c, 0x83,0x4d, 0x83,0x16, 0x83,0x24, 0x83,0x20, 0x83,0x37, - 0x83,0x2f, 0x83,0x29, 0x83,0x47, 0x83,0x45, 0x83,0x4c, 0x83,0x53, 0x83,0x1e, - 0x83,0x2c, 0x83,0x4b, 0x83,0x27, 0x83,0x48, 0x86,0x53, 0x86,0x52, 0x86,0xa2, - 0x86,0xa8, 0x86,0x96, 0x86,0x8d, 0x86,0x91, 0x86,0x9e, 0x86,0x87, 0x86,0x97, - 0x86,0x86, 0x86,0x8b, 0x86,0x9a, 0x86,0x85, 0x86,0xa5, 0x86,0x99, 0x86,0xa1, - 0x86,0xa7, 0x86,0x95, 0x86,0x98, 0x86,0x8e, 0x86,0x9d, 0x86,0x90, 0x86,0x94, - 0x88,0x43, 0x88,0x44, 0x88,0x6d, 0x88,0x75, 0x88,0x76, 0x88,0x72, 0x88,0x80, - 0x88,0x71, 0x88,0x7f, 0x88,0x6f, 0x88,0x83, 0x88,0x7e, 0x88,0x74, 0x88,0x7c, - 0x8a,0x12, 0x8c,0x47, 0x8c,0x57, 0x8c,0x7b, 0x8c,0xa4, 0x8c,0xa3, 0x8d,0x76, - 0x8d,0x78, 0x8d,0xb5, 0x8d,0xb7, 0x8d,0xb6, 0x8e,0xd1, 0x8e,0xd3, 0x8f,0xfe, - 0x8f,0xf5, 0x90,0x02, 0x8f,0xff, 0x8f,0xfb, 0x90,0x04, 0x8f,0xfc, 0x8f,0xf6, - 0x90,0xd6, 0x90,0xe0, 0x90,0xd9, 0x90,0xda, 0x90,0xe3, 0x90,0xdf, 0x90,0xe5, - 0x90,0xd8, 0x90,0xdb, 0x90,0xd7, 0x90,0xdc, 0x90,0xe4, 0x91,0x50, 0x91,0x4e, - 0x91,0x4f, 0x91,0xd5, 0x91,0xe2, 0x91,0xda, 0x96,0x5c, 0x96,0x5f, 0x96,0xbc, - 0x98,0xe3, 0x9a,0xdf, 0x9b,0x2f, 0x4e,0x7f, 0x50,0x70, 0x50,0x6a, 0x50,0x61, - 0x50,0x5e, 0x50,0x60, 0x50,0x53, 0x50,0x4b, 0x50,0x5d, 0x50,0x72, 0x50,0x48, - 0x50,0x4d, 0x50,0x41, 0x50,0x5b, 0x50,0x4a, 0x50,0x62, 0x50,0x15, 0x50,0x45, - 0x50,0x5f, 0x50,0x69, 0x50,0x6b, 0x50,0x63, 0x50,0x64, 0x50,0x46, 0x50,0x40, - 0x50,0x6e, 0x50,0x73, 0x50,0x57, 0x50,0x51, 0x51,0xd0, 0x52,0x6b, 0x52,0x6d, - 0x52,0x6c, 0x52,0x6e, 0x52,0xd6, 0x52,0xd3, 0x53,0x2d, 0x53,0x9c, 0x55,0x75, - 0x55,0x76, 0x55,0x3c, 0x55,0x4d, 0x55,0x50, 0x55,0x34, 0x55,0x2a, 0x55,0x51, - 0x55,0x62, 0x55,0x36, 0x55,0x35, 0x55,0x30, 0x55,0x52, 0x55,0x45, 0x55,0x0c, - 0x55,0x32, 0x55,0x65, 0x55,0x4e, 0x55,0x39, 0x55,0x48, 0x55,0x2d, 0x55,0x3b, - 0x55,0x40, 0x55,0x4b, 0x57,0x0a, 0x57,0x07, 0x57,0xfb, 0x58,0x14, 0x57,0xe2, - 0x57,0xf6, 0x57,0xdc, 0x57,0xf4, 0x58,0x00, 0x57,0xed, 0x57,0xfd, 0x58,0x08, - 0x57,0xf8, 0x58,0x0b, 0x57,0xf3, 0x57,0xcf, 0x58,0x07, 0x57,0xee, 0x57,0xe3, - 0x57,0xf2, 0x57,0xe5, 0x57,0xec, 0x57,0xe1, 0x58,0x0e, 0x57,0xfc, 0x58,0x10, - 0x57,0xe7, 0x58,0x01, 0x58,0x0c, 0x57,0xf1, 0x57,0xe9, 0x57,0xf0, 0x58,0x0d, - 0x58,0x04, 0x59,0x5c, 0x5a,0x60, 0x5a,0x58, 0x5a,0x55, 0x5a,0x67, 0x5a,0x5e, - 0x5a,0x38, 0x5a,0x35, 0x5a,0x6d, 0x5a,0x50, 0x5a,0x5f, 0x5a,0x65, 0x5a,0x6c, - 0x5a,0x53, 0x5a,0x64, 0x5a,0x57, 0x5a,0x43, 0x5a,0x5d, 0x5a,0x52, 0x5a,0x44, - 0x5a,0x5b, 0x5a,0x48, 0x5a,0x8e, 0x5a,0x3e, 0x5a,0x4d, 0x5a,0x39, 0x5a,0x4c, - 0x5a,0x70, 0x5a,0x69, 0x5a,0x47, 0x5a,0x51, 0x5a,0x56, 0x5a,0x42, 0x5a,0x5c, - 0x5b,0x72, 0x5b,0x6e, 0x5b,0xc1, 0x5b,0xc0, 0x5c,0x59, 0x5d,0x1e, 0x5d,0x0b, - 0x5d,0x1d, 0x5d,0x1a, 0x5d,0x20, 0x5d,0x0c, 0x5d,0x28, 0x5d,0x0d, 0x5d,0x26, - 0x5d,0x25, 0x5d,0x0f, 0x5d,0x30, 0x5d,0x12, 0x5d,0x23, 0x5d,0x1f, 0x5d,0x2e, - 0x5e,0x3e, 0x5e,0x34, 0x5e,0xb1, 0x5e,0xb4, 0x5e,0xb9, 0x5e,0xb2, 0x5e,0xb3, - 0x5f,0x36, 0x5f,0x38, 0x5f,0x9b, 0x5f,0x96, 0x5f,0x9f, 0x60,0x8a, 0x60,0x90, - 0x60,0x86, 0x60,0xbe, 0x60,0xb0, 0x60,0xba, 0x60,0xd3, 0x60,0xd4, 0x60,0xcf, - 0x60,0xe4, 0x60,0xd9, 0x60,0xdd, 0x60,0xc8, 0x60,0xb1, 0x60,0xdb, 0x60,0xb7, - 0x60,0xca, 0x60,0xbf, 0x60,0xc3, 0x60,0xcd, 0x60,0xc0, 0x63,0x32, 0x63,0x65, - 0x63,0x8a, 0x63,0x82, 0x63,0x7d, 0x63,0xbd, 0x63,0x9e, 0x63,0xad, 0x63,0x9d, - 0x63,0x97, 0x63,0xab, 0x63,0x8e, 0x63,0x6f, 0x63,0x87, 0x63,0x90, 0x63,0x6e, - 0x63,0xaf, 0x63,0x75, 0x63,0x9c, 0x63,0x6d, 0x63,0xae, 0x63,0x7c, 0x63,0xa4, - 0x63,0x3b, 0x63,0x9f, 0x63,0x78, 0x63,0x85, 0x63,0x81, 0x63,0x91, 0x63,0x8d, - 0x63,0x70, 0x65,0x53, 0x65,0xcd, 0x66,0x65, 0x66,0x61, 0x66,0x5b, 0x66,0x59, - 0x66,0x5c, 0x66,0x62, 0x67,0x18, 0x68,0x79, 0x68,0x87, 0x68,0x90, 0x68,0x9c, - 0x68,0x6d, 0x68,0x6e, 0x68,0xae, 0x68,0xab, 0x69,0x56, 0x68,0x6f, 0x68,0xa3, - 0x68,0xac, 0x68,0xa9, 0x68,0x75, 0x68,0x74, 0x68,0xb2, 0x68,0x8f, 0x68,0x77, - 0x68,0x92, 0x68,0x7c, 0x68,0x6b, 0x68,0x72, 0x68,0xaa, 0x68,0x80, 0x68,0x71, - 0x68,0x7e, 0x68,0x9b, 0x68,0x96, 0x68,0x8b, 0x68,0xa0, 0x68,0x89, 0x68,0xa4, - 0x68,0x78, 0x68,0x7b, 0x68,0x91, 0x68,0x8c, 0x68,0x8a, 0x68,0x7d, 0x6b,0x36, - 0x6b,0x33, 0x6b,0x37, 0x6b,0x38, 0x6b,0x91, 0x6b,0x8f, 0x6b,0x8d, 0x6b,0x8e, - 0x6b,0x8c, 0x6c,0x2a, 0x6d,0xc0, 0x6d,0xab, 0x6d,0xb4, 0x6d,0xb3, 0x6e,0x74, - 0x6d,0xac, 0x6d,0xe9, 0x6d,0xe2, 0x6d,0xb7, 0x6d,0xf6, 0x6d,0xd4, 0x6e,0x00, - 0x6d,0xc8, 0x6d,0xe0, 0x6d,0xdf, 0x6d,0xd6, 0x6d,0xbe, 0x6d,0xe5, 0x6d,0xdc, - 0x6d,0xdd, 0x6d,0xdb, 0x6d,0xf4, 0x6d,0xca, 0x6d,0xbd, 0x6d,0xed, 0x6d,0xf0, - 0x6d,0xba, 0x6d,0xd5, 0x6d,0xc2, 0x6d,0xcf, 0x6d,0xc9, 0x6d,0xd0, 0x6d,0xf2, - 0x6d,0xd3, 0x6d,0xfd, 0x6d,0xd7, 0x6d,0xcd, 0x6d,0xe3, 0x6d,0xbb, 0x70,0xfa, - 0x71,0x0d, 0x70,0xf7, 0x71,0x17, 0x70,0xf4, 0x71,0x0c, 0x70,0xf0, 0x71,0x04, - 0x70,0xf3, 0x71,0x10, 0x70,0xfc, 0x70,0xff, 0x71,0x06, 0x71,0x13, 0x71,0x00, - 0x70,0xf8, 0x70,0xf6, 0x71,0x0b, 0x71,0x02, 0x71,0x0e, 0x72,0x7e, 0x72,0x7b, - 0x72,0x7c, 0x72,0x7f, 0x73,0x1d, 0x73,0x17, 0x73,0x07, 0x73,0x11, 0x73,0x18, - 0x73,0x0a, 0x73,0x08, 0x72,0xff, 0x73,0x0f, 0x73,0x1e, 0x73,0x88, 0x73,0xf6, - 0x73,0xf8, 0x73,0xf5, 0x74,0x04, 0x74,0x01, 0x73,0xfd, 0x74,0x07, 0x74,0x00, - 0x73,0xfa, 0x73,0xfc, 0x73,0xff, 0x74,0x0c, 0x74,0x0b, 0x73,0xf4, 0x74,0x08, - 0x75,0x64, 0x75,0x63, 0x75,0xce, 0x75,0xd2, 0x75,0xcf, 0x75,0xcb, 0x75,0xcc, - 0x75,0xd1, 0x75,0xd0, 0x76,0x8f, 0x76,0x89, 0x76,0xd3, 0x77,0x39, 0x77,0x2f, - 0x77,0x2d, 0x77,0x31, 0x77,0x32, 0x77,0x34, 0x77,0x33, 0x77,0x3d, 0x77,0x25, - 0x77,0x3b, 0x77,0x35, 0x78,0x48, 0x78,0x52, 0x78,0x49, 0x78,0x4d, 0x78,0x4a, - 0x78,0x4c, 0x78,0x26, 0x78,0x45, 0x78,0x50, 0x79,0x64, 0x79,0x67, 0x79,0x69, - 0x79,0x6a, 0x79,0x63, 0x79,0x6b, 0x79,0x61, 0x79,0xbb, 0x79,0xfa, 0x79,0xf8, - 0x79,0xf6, 0x79,0xf7, 0x7a,0x8f, 0x7a,0x94, 0x7a,0x90, 0x7b,0x35, 0x7b,0x47, - 0x7b,0x34, 0x7b,0x25, 0x7b,0x30, 0x7b,0x22, 0x7b,0x24, 0x7b,0x33, 0x7b,0x18, - 0x7b,0x2a, 0x7b,0x1d, 0x7b,0x31, 0x7b,0x2b, 0x7b,0x2d, 0x7b,0x2f, 0x7b,0x32, - 0x7b,0x38, 0x7b,0x1a, 0x7b,0x23, 0x7c,0x94, 0x7c,0x98, 0x7c,0x96, 0x7c,0xa3, - 0x7d,0x35, 0x7d,0x3d, 0x7d,0x38, 0x7d,0x36, 0x7d,0x3a, 0x7d,0x45, 0x7d,0x2c, - 0x7d,0x29, 0x7d,0x41, 0x7d,0x47, 0x7d,0x3e, 0x7d,0x3f, 0x7d,0x4a, 0x7d,0x3b, - 0x7d,0x28, 0x7f,0x63, 0x7f,0x95, 0x7f,0x9c, 0x7f,0x9d, 0x7f,0x9b, 0x7f,0xca, - 0x7f,0xcb, 0x7f,0xcd, 0x7f,0xd0, 0x7f,0xd1, 0x7f,0xc7, 0x7f,0xcf, 0x7f,0xc9, - 0x80,0x1f, 0x80,0x1e, 0x80,0x1b, 0x80,0x47, 0x80,0x43, 0x80,0x48, 0x81,0x18, - 0x81,0x25, 0x81,0x19, 0x81,0x1b, 0x81,0x2d, 0x81,0x1f, 0x81,0x2c, 0x81,0x1e, - 0x81,0x21, 0x81,0x15, 0x81,0x27, 0x81,0x1d, 0x81,0x22, 0x82,0x11, 0x82,0x38, - 0x82,0x33, 0x82,0x3a, 0x82,0x34, 0x82,0x32, 0x82,0x74, 0x83,0x90, 0x83,0xa3, - 0x83,0xa8, 0x83,0x8d, 0x83,0x7a, 0x83,0x73, 0x83,0xa4, 0x83,0x74, 0x83,0x8f, - 0x83,0x81, 0x83,0x95, 0x83,0x99, 0x83,0x75, 0x83,0x94, 0x83,0xa9, 0x83,0x7d, - 0x83,0x83, 0x83,0x8c, 0x83,0x9d, 0x83,0x9b, 0x83,0xaa, 0x83,0x8b, 0x83,0x7e, - 0x83,0xa5, 0x83,0xaf, 0x83,0x88, 0x83,0x97, 0x83,0xb0, 0x83,0x7f, 0x83,0xa6, - 0x83,0x87, 0x83,0xae, 0x83,0x76, 0x83,0x9a, 0x86,0x59, 0x86,0x56, 0x86,0xbf, - 0x86,0xb7, 0x86,0xc2, 0x86,0xc1, 0x86,0xc5, 0x86,0xba, 0x86,0xb0, 0x86,0xc8, - 0x86,0xb9, 0x86,0xb3, 0x86,0xb8, 0x86,0xcc, 0x86,0xb4, 0x86,0xbb, 0x86,0xbc, - 0x86,0xc3, 0x86,0xbd, 0x86,0xbe, 0x88,0x52, 0x88,0x89, 0x88,0x95, 0x88,0xa8, - 0x88,0xa2, 0x88,0xaa, 0x88,0x9a, 0x88,0x91, 0x88,0xa1, 0x88,0x9f, 0x88,0x98, - 0x88,0xa7, 0x88,0x99, 0x88,0x9b, 0x88,0x97, 0x88,0xa4, 0x88,0xac, 0x88,0x8c, - 0x88,0x93, 0x88,0x8e, 0x89,0x82, 0x89,0xd6, 0x89,0xd9, 0x89,0xd5, 0x8a,0x30, - 0x8a,0x27, 0x8a,0x2c, 0x8a,0x1e, 0x8c,0x39, 0x8c,0x3b, 0x8c,0x5c, 0x8c,0x5d, - 0x8c,0x7d, 0x8c,0xa5, 0x8d,0x7d, 0x8d,0x7b, 0x8d,0x79, 0x8d,0xbc, 0x8d,0xc2, - 0x8d,0xb9, 0x8d,0xbf, 0x8d,0xc1, 0x8e,0xd8, 0x8e,0xde, 0x8e,0xdd, 0x8e,0xdc, - 0x8e,0xd7, 0x8e,0xe0, 0x8e,0xe1, 0x90,0x24, 0x90,0x0b, 0x90,0x11, 0x90,0x1c, - 0x90,0x0c, 0x90,0x21, 0x90,0xef, 0x90,0xea, 0x90,0xf0, 0x90,0xf4, 0x90,0xf2, - 0x90,0xf3, 0x90,0xd4, 0x90,0xeb, 0x90,0xec, 0x90,0xe9, 0x91,0x56, 0x91,0x58, - 0x91,0x5a, 0x91,0x53, 0x91,0x55, 0x91,0xec, 0x91,0xf4, 0x91,0xf1, 0x91,0xf3, - 0x91,0xf8, 0x91,0xe4, 0x91,0xf9, 0x91,0xea, 0x91,0xeb, 0x91,0xf7, 0x91,0xe8, - 0x91,0xee, 0x95,0x7a, 0x95,0x86, 0x95,0x88, 0x96,0x7c, 0x96,0x6d, 0x96,0x6b, - 0x96,0x71, 0x96,0x6f, 0x96,0xbf, 0x97,0x6a, 0x98,0x04, 0x98,0xe5, 0x99,0x97, - 0x50,0x9b, 0x50,0x95, 0x50,0x94, 0x50,0x9e, 0x50,0x8b, 0x50,0xa3, 0x50,0x83, - 0x50,0x8c, 0x50,0x8e, 0x50,0x9d, 0x50,0x68, 0x50,0x9c, 0x50,0x92, 0x50,0x82, - 0x50,0x87, 0x51,0x5f, 0x51,0xd4, 0x53,0x12, 0x53,0x11, 0x53,0xa4, 0x53,0xa7, - 0x55,0x91, 0x55,0xa8, 0x55,0xa5, 0x55,0xad, 0x55,0x77, 0x56,0x45, 0x55,0xa2, - 0x55,0x93, 0x55,0x88, 0x55,0x8f, 0x55,0xb5, 0x55,0x81, 0x55,0xa3, 0x55,0x92, - 0x55,0xa4, 0x55,0x7d, 0x55,0x8c, 0x55,0xa6, 0x55,0x7f, 0x55,0x95, 0x55,0xa1, - 0x55,0x8e, 0x57,0x0c, 0x58,0x29, 0x58,0x37, 0x58,0x19, 0x58,0x1e, 0x58,0x27, - 0x58,0x23, 0x58,0x28, 0x57,0xf5, 0x58,0x48, 0x58,0x25, 0x58,0x1c, 0x58,0x1b, - 0x58,0x33, 0x58,0x3f, 0x58,0x36, 0x58,0x2e, 0x58,0x39, 0x58,0x38, 0x58,0x2d, - 0x58,0x2c, 0x58,0x3b, 0x59,0x61, 0x5a,0xaf, 0x5a,0x94, 0x5a,0x9f, 0x5a,0x7a, - 0x5a,0xa2, 0x5a,0x9e, 0x5a,0x78, 0x5a,0xa6, 0x5a,0x7c, 0x5a,0xa5, 0x5a,0xac, - 0x5a,0x95, 0x5a,0xae, 0x5a,0x37, 0x5a,0x84, 0x5a,0x8a, 0x5a,0x97, 0x5a,0x83, - 0x5a,0x8b, 0x5a,0xa9, 0x5a,0x7b, 0x5a,0x7d, 0x5a,0x8c, 0x5a,0x9c, 0x5a,0x8f, - 0x5a,0x93, 0x5a,0x9d, 0x5b,0xea, 0x5b,0xcd, 0x5b,0xcb, 0x5b,0xd4, 0x5b,0xd1, - 0x5b,0xca, 0x5b,0xce, 0x5c,0x0c, 0x5c,0x30, 0x5d,0x37, 0x5d,0x43, 0x5d,0x6b, - 0x5d,0x41, 0x5d,0x4b, 0x5d,0x3f, 0x5d,0x35, 0x5d,0x51, 0x5d,0x4e, 0x5d,0x55, - 0x5d,0x33, 0x5d,0x3a, 0x5d,0x52, 0x5d,0x3d, 0x5d,0x31, 0x5d,0x59, 0x5d,0x42, - 0x5d,0x39, 0x5d,0x49, 0x5d,0x38, 0x5d,0x3c, 0x5d,0x32, 0x5d,0x36, 0x5d,0x40, - 0x5d,0x45, 0x5e,0x44, 0x5e,0x41, 0x5f,0x58, 0x5f,0xa6, 0x5f,0xa5, 0x5f,0xab, - 0x60,0xc9, 0x60,0xb9, 0x60,0xcc, 0x60,0xe2, 0x60,0xce, 0x60,0xc4, 0x61,0x14, - 0x60,0xf2, 0x61,0x0a, 0x61,0x16, 0x61,0x05, 0x60,0xf5, 0x61,0x13, 0x60,0xf8, - 0x60,0xfc, 0x60,0xfe, 0x60,0xc1, 0x61,0x03, 0x61,0x18, 0x61,0x1d, 0x61,0x10, - 0x60,0xff, 0x61,0x04, 0x61,0x0b, 0x62,0x4a, 0x63,0x94, 0x63,0xb1, 0x63,0xb0, - 0x63,0xce, 0x63,0xe5, 0x63,0xe8, 0x63,0xef, 0x63,0xc3, 0x64,0x9d, 0x63,0xf3, - 0x63,0xca, 0x63,0xe0, 0x63,0xf6, 0x63,0xd5, 0x63,0xf2, 0x63,0xf5, 0x64,0x61, - 0x63,0xdf, 0x63,0xbe, 0x63,0xdd, 0x63,0xdc, 0x63,0xc4, 0x63,0xd8, 0x63,0xd3, - 0x63,0xc2, 0x63,0xc7, 0x63,0xcc, 0x63,0xcb, 0x63,0xc8, 0x63,0xf0, 0x63,0xd7, - 0x63,0xd9, 0x65,0x32, 0x65,0x67, 0x65,0x6a, 0x65,0x64, 0x65,0x5c, 0x65,0x68, - 0x65,0x65, 0x65,0x8c, 0x65,0x9d, 0x65,0x9e, 0x65,0xae, 0x65,0xd0, 0x65,0xd2, - 0x66,0x7c, 0x66,0x6c, 0x66,0x7b, 0x66,0x80, 0x66,0x71, 0x66,0x79, 0x66,0x6a, - 0x66,0x72, 0x67,0x01, 0x69,0x0c, 0x68,0xd3, 0x69,0x04, 0x68,0xdc, 0x69,0x2a, - 0x68,0xec, 0x68,0xea, 0x68,0xf1, 0x69,0x0f, 0x68,0xd6, 0x68,0xf7, 0x68,0xeb, - 0x68,0xe4, 0x68,0xf6, 0x69,0x13, 0x69,0x10, 0x68,0xf3, 0x68,0xe1, 0x69,0x07, - 0x68,0xcc, 0x69,0x08, 0x69,0x70, 0x68,0xb4, 0x69,0x11, 0x68,0xef, 0x68,0xc6, - 0x69,0x14, 0x68,0xf8, 0x68,0xd0, 0x68,0xfd, 0x68,0xfc, 0x68,0xe8, 0x69,0x0b, - 0x69,0x0a, 0x69,0x17, 0x68,0xce, 0x68,0xc8, 0x68,0xdd, 0x68,0xde, 0x68,0xe6, - 0x68,0xf4, 0x68,0xd1, 0x69,0x06, 0x68,0xd4, 0x68,0xe9, 0x69,0x15, 0x69,0x25, - 0x68,0xc7, 0x6b,0x39, 0x6b,0x3b, 0x6b,0x3f, 0x6b,0x3c, 0x6b,0x94, 0x6b,0x97, - 0x6b,0x99, 0x6b,0x95, 0x6b,0xbd, 0x6b,0xf0, 0x6b,0xf2, 0x6b,0xf3, 0x6c,0x30, - 0x6d,0xfc, 0x6e,0x46, 0x6e,0x47, 0x6e,0x1f, 0x6e,0x49, 0x6e,0x88, 0x6e,0x3c, - 0x6e,0x3d, 0x6e,0x45, 0x6e,0x62, 0x6e,0x2b, 0x6e,0x3f, 0x6e,0x41, 0x6e,0x5d, - 0x6e,0x73, 0x6e,0x1c, 0x6e,0x33, 0x6e,0x4b, 0x6e,0x40, 0x6e,0x51, 0x6e,0x3b, - 0x6e,0x03, 0x6e,0x2e, 0x6e,0x5e, 0x6e,0x68, 0x6e,0x5c, 0x6e,0x61, 0x6e,0x31, - 0x6e,0x28, 0x6e,0x60, 0x6e,0x71, 0x6e,0x6b, 0x6e,0x39, 0x6e,0x22, 0x6e,0x30, - 0x6e,0x53, 0x6e,0x65, 0x6e,0x27, 0x6e,0x78, 0x6e,0x64, 0x6e,0x77, 0x6e,0x55, - 0x6e,0x79, 0x6e,0x52, 0x6e,0x66, 0x6e,0x35, 0x6e,0x36, 0x6e,0x5a, 0x71,0x20, - 0x71,0x1e, 0x71,0x2f, 0x70,0xfb, 0x71,0x2e, 0x71,0x31, 0x71,0x23, 0x71,0x25, - 0x71,0x22, 0x71,0x32, 0x71,0x1f, 0x71,0x28, 0x71,0x3a, 0x71,0x1b, 0x72,0x4b, - 0x72,0x5a, 0x72,0x88, 0x72,0x89, 0x72,0x86, 0x72,0x85, 0x72,0x8b, 0x73,0x12, - 0x73,0x0b, 0x73,0x30, 0x73,0x22, 0x73,0x31, 0x73,0x33, 0x73,0x27, 0x73,0x32, - 0x73,0x2d, 0x73,0x26, 0x73,0x23, 0x73,0x35, 0x73,0x0c, 0x74,0x2e, 0x74,0x2c, - 0x74,0x30, 0x74,0x2b, 0x74,0x16, 0x74,0x1a, 0x74,0x21, 0x74,0x2d, 0x74,0x31, - 0x74,0x24, 0x74,0x23, 0x74,0x1d, 0x74,0x29, 0x74,0x20, 0x74,0x32, 0x74,0xfb, - 0x75,0x2f, 0x75,0x6f, 0x75,0x6c, 0x75,0xe7, 0x75,0xda, 0x75,0xe1, 0x75,0xe6, - 0x75,0xdd, 0x75,0xdf, 0x75,0xe4, 0x75,0xd7, 0x76,0x95, 0x76,0x92, 0x76,0xda, - 0x77,0x46, 0x77,0x47, 0x77,0x44, 0x77,0x4d, 0x77,0x45, 0x77,0x4a, 0x77,0x4e, - 0x77,0x4b, 0x77,0x4c, 0x77,0xde, 0x77,0xec, 0x78,0x60, 0x78,0x64, 0x78,0x65, - 0x78,0x5c, 0x78,0x6d, 0x78,0x71, 0x78,0x6a, 0x78,0x6e, 0x78,0x70, 0x78,0x69, - 0x78,0x68, 0x78,0x5e, 0x78,0x62, 0x79,0x74, 0x79,0x73, 0x79,0x72, 0x79,0x70, - 0x7a,0x02, 0x7a,0x0a, 0x7a,0x03, 0x7a,0x0c, 0x7a,0x04, 0x7a,0x99, 0x7a,0xe6, - 0x7a,0xe4, 0x7b,0x4a, 0x7b,0x3b, 0x7b,0x44, 0x7b,0x48, 0x7b,0x4c, 0x7b,0x4e, - 0x7b,0x40, 0x7b,0x58, 0x7b,0x45, 0x7c,0xa2, 0x7c,0x9e, 0x7c,0xa8, 0x7c,0xa1, - 0x7d,0x58, 0x7d,0x6f, 0x7d,0x63, 0x7d,0x53, 0x7d,0x56, 0x7d,0x67, 0x7d,0x6a, - 0x7d,0x4f, 0x7d,0x6d, 0x7d,0x5c, 0x7d,0x6b, 0x7d,0x52, 0x7d,0x54, 0x7d,0x69, - 0x7d,0x51, 0x7d,0x5f, 0x7d,0x4e, 0x7f,0x3e, 0x7f,0x3f, 0x7f,0x65, 0x7f,0x66, - 0x7f,0xa2, 0x7f,0xa0, 0x7f,0xa1, 0x7f,0xd7, 0x80,0x51, 0x80,0x4f, 0x80,0x50, - 0x80,0xfe, 0x80,0xd4, 0x81,0x43, 0x81,0x4a, 0x81,0x52, 0x81,0x4f, 0x81,0x47, - 0x81,0x3d, 0x81,0x4d, 0x81,0x3a, 0x81,0xe6, 0x81,0xee, 0x81,0xf7, 0x81,0xf8, - 0x81,0xf9, 0x82,0x04, 0x82,0x3c, 0x82,0x3d, 0x82,0x3f, 0x82,0x75, 0x83,0x3b, - 0x83,0xcf, 0x83,0xf9, 0x84,0x23, 0x83,0xc0, 0x83,0xe8, 0x84,0x12, 0x83,0xe7, - 0x83,0xe4, 0x83,0xfc, 0x83,0xf6, 0x84,0x10, 0x83,0xc6, 0x83,0xc8, 0x83,0xeb, - 0x83,0xe3, 0x83,0xbf, 0x84,0x01, 0x83,0xdd, 0x83,0xe5, 0x83,0xd8, 0x83,0xff, - 0x83,0xe1, 0x83,0xcb, 0x83,0xce, 0x83,0xd6, 0x83,0xf5, 0x83,0xc9, 0x84,0x09, - 0x84,0x0f, 0x83,0xde, 0x84,0x11, 0x84,0x06, 0x83,0xc2, 0x83,0xf3, 0x83,0xd5, - 0x83,0xfa, 0x83,0xc7, 0x83,0xd1, 0x83,0xea, 0x84,0x13, 0x83,0xc3, 0x83,0xec, - 0x83,0xee, 0x83,0xc4, 0x83,0xfb, 0x83,0xd7, 0x83,0xe2, 0x84,0x1b, 0x83,0xdb, - 0x83,0xfe, 0x86,0xd8, 0x86,0xe2, 0x86,0xe6, 0x86,0xd3, 0x86,0xe3, 0x86,0xda, - 0x86,0xea, 0x86,0xdd, 0x86,0xeb, 0x86,0xdc, 0x86,0xec, 0x86,0xe9, 0x86,0xd7, - 0x86,0xe8, 0x86,0xd1, 0x88,0x48, 0x88,0x56, 0x88,0x55, 0x88,0xba, 0x88,0xd7, - 0x88,0xb9, 0x88,0xb8, 0x88,0xc0, 0x88,0xbe, 0x88,0xb6, 0x88,0xbc, 0x88,0xb7, - 0x88,0xbd, 0x88,0xb2, 0x89,0x01, 0x88,0xc9, 0x89,0x95, 0x89,0x98, 0x89,0x97, - 0x89,0xdd, 0x89,0xda, 0x89,0xdb, 0x8a,0x4e, 0x8a,0x4d, 0x8a,0x39, 0x8a,0x59, - 0x8a,0x40, 0x8a,0x57, 0x8a,0x58, 0x8a,0x44, 0x8a,0x45, 0x8a,0x52, 0x8a,0x48, - 0x8a,0x51, 0x8a,0x4a, 0x8a,0x4c, 0x8a,0x4f, 0x8c,0x5f, 0x8c,0x81, 0x8c,0x80, - 0x8c,0xba, 0x8c,0xbe, 0x8c,0xb0, 0x8c,0xb9, 0x8c,0xb5, 0x8d,0x84, 0x8d,0x80, - 0x8d,0x89, 0x8d,0xd8, 0x8d,0xd3, 0x8d,0xcd, 0x8d,0xc7, 0x8d,0xd6, 0x8d,0xdc, - 0x8d,0xcf, 0x8d,0xd5, 0x8d,0xd9, 0x8d,0xc8, 0x8d,0xd7, 0x8d,0xc5, 0x8e,0xef, - 0x8e,0xf7, 0x8e,0xfa, 0x8e,0xf9, 0x8e,0xe6, 0x8e,0xee, 0x8e,0xe5, 0x8e,0xf5, - 0x8e,0xe7, 0x8e,0xe8, 0x8e,0xf6, 0x8e,0xeb, 0x8e,0xf1, 0x8e,0xec, 0x8e,0xf4, - 0x8e,0xe9, 0x90,0x2d, 0x90,0x34, 0x90,0x2f, 0x91,0x06, 0x91,0x2c, 0x91,0x04, - 0x90,0xff, 0x90,0xfc, 0x91,0x08, 0x90,0xf9, 0x90,0xfb, 0x91,0x01, 0x91,0x00, - 0x91,0x07, 0x91,0x05, 0x91,0x03, 0x91,0x61, 0x91,0x64, 0x91,0x5f, 0x91,0x62, - 0x91,0x60, 0x92,0x01, 0x92,0x0a, 0x92,0x25, 0x92,0x03, 0x92,0x1a, 0x92,0x26, - 0x92,0x0f, 0x92,0x0c, 0x92,0x00, 0x92,0x12, 0x91,0xff, 0x91,0xfd, 0x92,0x06, - 0x92,0x04, 0x92,0x27, 0x92,0x02, 0x92,0x1c, 0x92,0x24, 0x92,0x19, 0x92,0x17, - 0x92,0x05, 0x92,0x16, 0x95,0x7b, 0x95,0x8d, 0x95,0x8c, 0x95,0x90, 0x96,0x87, - 0x96,0x7e, 0x96,0x88, 0x96,0x89, 0x96,0x83, 0x96,0x80, 0x96,0xc2, 0x96,0xc8, - 0x96,0xc3, 0x96,0xf1, 0x96,0xf0, 0x97,0x6c, 0x97,0x70, 0x97,0x6e, 0x98,0x07, - 0x98,0xa9, 0x98,0xeb, 0x9c,0xe6, 0x9e,0xf9, 0x4e,0x83, 0x4e,0x84, 0x4e,0xb6, - 0x50,0xbd, 0x50,0xbf, 0x50,0xc6, 0x50,0xae, 0x50,0xc4, 0x50,0xca, 0x50,0xb4, - 0x50,0xc8, 0x50,0xc2, 0x50,0xb0, 0x50,0xc1, 0x50,0xba, 0x50,0xb1, 0x50,0xcb, - 0x50,0xc9, 0x50,0xb6, 0x50,0xb8, 0x51,0xd7, 0x52,0x7a, 0x52,0x78, 0x52,0x7b, - 0x52,0x7c, 0x55,0xc3, 0x55,0xdb, 0x55,0xcc, 0x55,0xd0, 0x55,0xcb, 0x55,0xca, - 0x55,0xdd, 0x55,0xc0, 0x55,0xd4, 0x55,0xc4, 0x55,0xe9, 0x55,0xbf, 0x55,0xd2, - 0x55,0x8d, 0x55,0xcf, 0x55,0xd5, 0x55,0xe2, 0x55,0xd6, 0x55,0xc8, 0x55,0xf2, - 0x55,0xcd, 0x55,0xd9, 0x55,0xc2, 0x57,0x14, 0x58,0x53, 0x58,0x68, 0x58,0x64, - 0x58,0x4f, 0x58,0x4d, 0x58,0x49, 0x58,0x6f, 0x58,0x55, 0x58,0x4e, 0x58,0x5d, - 0x58,0x59, 0x58,0x65, 0x58,0x5b, 0x58,0x3d, 0x58,0x63, 0x58,0x71, 0x58,0xfc, - 0x5a,0xc7, 0x5a,0xc4, 0x5a,0xcb, 0x5a,0xba, 0x5a,0xb8, 0x5a,0xb1, 0x5a,0xb5, - 0x5a,0xb0, 0x5a,0xbf, 0x5a,0xc8, 0x5a,0xbb, 0x5a,0xc6, 0x5a,0xb7, 0x5a,0xc0, - 0x5a,0xca, 0x5a,0xb4, 0x5a,0xb6, 0x5a,0xcd, 0x5a,0xb9, 0x5a,0x90, 0x5b,0xd6, - 0x5b,0xd8, 0x5b,0xd9, 0x5c,0x1f, 0x5c,0x33, 0x5d,0x71, 0x5d,0x63, 0x5d,0x4a, - 0x5d,0x65, 0x5d,0x72, 0x5d,0x6c, 0x5d,0x5e, 0x5d,0x68, 0x5d,0x67, 0x5d,0x62, - 0x5d,0xf0, 0x5e,0x4f, 0x5e,0x4e, 0x5e,0x4a, 0x5e,0x4d, 0x5e,0x4b, 0x5e,0xc5, - 0x5e,0xcc, 0x5e,0xc6, 0x5e,0xcb, 0x5e,0xc7, 0x5f,0x40, 0x5f,0xaf, 0x5f,0xad, - 0x60,0xf7, 0x61,0x49, 0x61,0x4a, 0x61,0x2b, 0x61,0x45, 0x61,0x36, 0x61,0x32, - 0x61,0x2e, 0x61,0x46, 0x61,0x2f, 0x61,0x4f, 0x61,0x29, 0x61,0x40, 0x62,0x20, - 0x91,0x68, 0x62,0x23, 0x62,0x25, 0x62,0x24, 0x63,0xc5, 0x63,0xf1, 0x63,0xeb, - 0x64,0x10, 0x64,0x12, 0x64,0x09, 0x64,0x20, 0x64,0x24, 0x64,0x33, 0x64,0x43, - 0x64,0x1f, 0x64,0x15, 0x64,0x18, 0x64,0x39, 0x64,0x37, 0x64,0x22, 0x64,0x23, - 0x64,0x0c, 0x64,0x26, 0x64,0x30, 0x64,0x28, 0x64,0x41, 0x64,0x35, 0x64,0x2f, - 0x64,0x0a, 0x64,0x1a, 0x64,0x40, 0x64,0x25, 0x64,0x27, 0x64,0x0b, 0x63,0xe7, - 0x64,0x1b, 0x64,0x2e, 0x64,0x21, 0x64,0x0e, 0x65,0x6f, 0x65,0x92, 0x65,0xd3, - 0x66,0x86, 0x66,0x8c, 0x66,0x95, 0x66,0x90, 0x66,0x8b, 0x66,0x8a, 0x66,0x99, - 0x66,0x94, 0x66,0x78, 0x67,0x20, 0x69,0x66, 0x69,0x5f, 0x69,0x38, 0x69,0x4e, - 0x69,0x62, 0x69,0x71, 0x69,0x3f, 0x69,0x45, 0x69,0x6a, 0x69,0x39, 0x69,0x42, - 0x69,0x57, 0x69,0x59, 0x69,0x7a, 0x69,0x48, 0x69,0x49, 0x69,0x35, 0x69,0x6c, - 0x69,0x33, 0x69,0x3d, 0x69,0x65, 0x68,0xf0, 0x69,0x78, 0x69,0x34, 0x69,0x69, - 0x69,0x40, 0x69,0x6f, 0x69,0x44, 0x69,0x76, 0x69,0x58, 0x69,0x41, 0x69,0x74, - 0x69,0x4c, 0x69,0x3b, 0x69,0x4b, 0x69,0x37, 0x69,0x5c, 0x69,0x4f, 0x69,0x51, - 0x69,0x32, 0x69,0x52, 0x69,0x2f, 0x69,0x7b, 0x69,0x3c, 0x6b,0x46, 0x6b,0x45, - 0x6b,0x43, 0x6b,0x42, 0x6b,0x48, 0x6b,0x41, 0x6b,0x9b, 0xfa,0x0d, 0x6b,0xfb, - 0x6b,0xfc, 0x6b,0xf9, 0x6b,0xf7, 0x6b,0xf8, 0x6e,0x9b, 0x6e,0xd6, 0x6e,0xc8, - 0x6e,0x8f, 0x6e,0xc0, 0x6e,0x9f, 0x6e,0x93, 0x6e,0x94, 0x6e,0xa0, 0x6e,0xb1, - 0x6e,0xb9, 0x6e,0xc6, 0x6e,0xd2, 0x6e,0xbd, 0x6e,0xc1, 0x6e,0x9e, 0x6e,0xc9, - 0x6e,0xb7, 0x6e,0xb0, 0x6e,0xcd, 0x6e,0xa6, 0x6e,0xcf, 0x6e,0xb2, 0x6e,0xbe, - 0x6e,0xc3, 0x6e,0xdc, 0x6e,0xd8, 0x6e,0x99, 0x6e,0x92, 0x6e,0x8e, 0x6e,0x8d, - 0x6e,0xa4, 0x6e,0xa1, 0x6e,0xbf, 0x6e,0xb3, 0x6e,0xd0, 0x6e,0xca, 0x6e,0x97, - 0x6e,0xae, 0x6e,0xa3, 0x71,0x47, 0x71,0x54, 0x71,0x52, 0x71,0x63, 0x71,0x60, - 0x71,0x41, 0x71,0x5d, 0x71,0x62, 0x71,0x72, 0x71,0x78, 0x71,0x6a, 0x71,0x61, - 0x71,0x42, 0x71,0x58, 0x71,0x43, 0x71,0x4b, 0x71,0x70, 0x71,0x5f, 0x71,0x50, - 0x71,0x53, 0x71,0x44, 0x71,0x4d, 0x71,0x5a, 0x72,0x4f, 0x72,0x8d, 0x72,0x8c, - 0x72,0x91, 0x72,0x90, 0x72,0x8e, 0x73,0x3c, 0x73,0x42, 0x73,0x3b, 0x73,0x3a, - 0x73,0x40, 0x73,0x4a, 0x73,0x49, 0x74,0x44, 0x74,0x4a, 0x74,0x4b, 0x74,0x52, - 0x74,0x51, 0x74,0x57, 0x74,0x40, 0x74,0x4f, 0x74,0x50, 0x74,0x4e, 0x74,0x42, - 0x74,0x46, 0x74,0x4d, 0x74,0x54, 0x74,0xe1, 0x74,0xff, 0x74,0xfe, 0x74,0xfd, - 0x75,0x1d, 0x75,0x79, 0x75,0x77, 0x69,0x83, 0x75,0xef, 0x76,0x0f, 0x76,0x03, - 0x75,0xf7, 0x75,0xfe, 0x75,0xfc, 0x75,0xf9, 0x75,0xf8, 0x76,0x10, 0x75,0xfb, - 0x75,0xf6, 0x75,0xed, 0x75,0xf5, 0x75,0xfd, 0x76,0x99, 0x76,0xb5, 0x76,0xdd, - 0x77,0x55, 0x77,0x5f, 0x77,0x60, 0x77,0x52, 0x77,0x56, 0x77,0x5a, 0x77,0x69, - 0x77,0x67, 0x77,0x54, 0x77,0x59, 0x77,0x6d, 0x77,0xe0, 0x78,0x87, 0x78,0x9a, - 0x78,0x94, 0x78,0x8f, 0x78,0x84, 0x78,0x95, 0x78,0x85, 0x78,0x86, 0x78,0xa1, - 0x78,0x83, 0x78,0x79, 0x78,0x99, 0x78,0x80, 0x78,0x96, 0x78,0x7b, 0x79,0x7c, - 0x79,0x82, 0x79,0x7d, 0x79,0x79, 0x7a,0x11, 0x7a,0x18, 0x7a,0x19, 0x7a,0x12, - 0x7a,0x17, 0x7a,0x15, 0x7a,0x22, 0x7a,0x13, 0x7a,0x1b, 0x7a,0x10, 0x7a,0xa3, - 0x7a,0xa2, 0x7a,0x9e, 0x7a,0xeb, 0x7b,0x66, 0x7b,0x64, 0x7b,0x6d, 0x7b,0x74, - 0x7b,0x69, 0x7b,0x72, 0x7b,0x65, 0x7b,0x73, 0x7b,0x71, 0x7b,0x70, 0x7b,0x61, - 0x7b,0x78, 0x7b,0x76, 0x7b,0x63, 0x7c,0xb2, 0x7c,0xb4, 0x7c,0xaf, 0x7d,0x88, - 0x7d,0x86, 0x7d,0x80, 0x7d,0x8d, 0x7d,0x7f, 0x7d,0x85, 0x7d,0x7a, 0x7d,0x8e, - 0x7d,0x7b, 0x7d,0x83, 0x7d,0x7c, 0x7d,0x8c, 0x7d,0x94, 0x7d,0x84, 0x7d,0x7d, - 0x7d,0x92, 0x7f,0x6d, 0x7f,0x6b, 0x7f,0x67, 0x7f,0x68, 0x7f,0x6c, 0x7f,0xa6, - 0x7f,0xa5, 0x7f,0xa7, 0x7f,0xdb, 0x7f,0xdc, 0x80,0x21, 0x81,0x64, 0x81,0x60, - 0x81,0x77, 0x81,0x5c, 0x81,0x69, 0x81,0x5b, 0x81,0x62, 0x81,0x72, 0x67,0x21, - 0x81,0x5e, 0x81,0x76, 0x81,0x67, 0x81,0x6f, 0x81,0x44, 0x81,0x61, 0x82,0x1d, - 0x82,0x49, 0x82,0x44, 0x82,0x40, 0x82,0x42, 0x82,0x45, 0x84,0xf1, 0x84,0x3f, - 0x84,0x56, 0x84,0x76, 0x84,0x79, 0x84,0x8f, 0x84,0x8d, 0x84,0x65, 0x84,0x51, - 0x84,0x40, 0x84,0x86, 0x84,0x67, 0x84,0x30, 0x84,0x4d, 0x84,0x7d, 0x84,0x5a, - 0x84,0x59, 0x84,0x74, 0x84,0x73, 0x84,0x5d, 0x85,0x07, 0x84,0x5e, 0x84,0x37, - 0x84,0x3a, 0x84,0x34, 0x84,0x7a, 0x84,0x43, 0x84,0x78, 0x84,0x32, 0x84,0x45, - 0x84,0x29, 0x83,0xd9, 0x84,0x4b, 0x84,0x2f, 0x84,0x42, 0x84,0x2d, 0x84,0x5f, - 0x84,0x70, 0x84,0x39, 0x84,0x4e, 0x84,0x4c, 0x84,0x52, 0x84,0x6f, 0x84,0xc5, - 0x84,0x8e, 0x84,0x3b, 0x84,0x47, 0x84,0x36, 0x84,0x33, 0x84,0x68, 0x84,0x7e, - 0x84,0x44, 0x84,0x2b, 0x84,0x60, 0x84,0x54, 0x84,0x6e, 0x84,0x50, 0x87,0x0b, - 0x87,0x04, 0x86,0xf7, 0x87,0x0c, 0x86,0xfa, 0x86,0xd6, 0x86,0xf5, 0x87,0x4d, - 0x86,0xf8, 0x87,0x0e, 0x87,0x09, 0x87,0x01, 0x86,0xf6, 0x87,0x0d, 0x87,0x05, - 0x88,0xd6, 0x88,0xcb, 0x88,0xcd, 0x88,0xce, 0x88,0xde, 0x88,0xdb, 0x88,0xda, - 0x88,0xcc, 0x88,0xd0, 0x89,0x85, 0x89,0x9b, 0x89,0xdf, 0x89,0xe5, 0x89,0xe4, - 0x89,0xe1, 0x89,0xe0, 0x89,0xe2, 0x89,0xdc, 0x89,0xe6, 0x8a,0x76, 0x8a,0x86, - 0x8a,0x7f, 0x8a,0x61, 0x8a,0x3f, 0x8a,0x77, 0x8a,0x82, 0x8a,0x84, 0x8a,0x75, - 0x8a,0x83, 0x8a,0x81, 0x8a,0x74, 0x8a,0x7a, 0x8c,0x3c, 0x8c,0x4b, 0x8c,0x4a, - 0x8c,0x65, 0x8c,0x64, 0x8c,0x66, 0x8c,0x86, 0x8c,0x84, 0x8c,0x85, 0x8c,0xcc, - 0x8d,0x68, 0x8d,0x69, 0x8d,0x91, 0x8d,0x8c, 0x8d,0x8e, 0x8d,0x8f, 0x8d,0x8d, - 0x8d,0x93, 0x8d,0x94, 0x8d,0x90, 0x8d,0x92, 0x8d,0xf0, 0x8d,0xe0, 0x8d,0xec, - 0x8d,0xf1, 0x8d,0xee, 0x8d,0xd0, 0x8d,0xe9, 0x8d,0xe3, 0x8d,0xe2, 0x8d,0xe7, - 0x8d,0xf2, 0x8d,0xeb, 0x8d,0xf4, 0x8f,0x06, 0x8e,0xff, 0x8f,0x01, 0x8f,0x00, - 0x8f,0x05, 0x8f,0x07, 0x8f,0x08, 0x8f,0x02, 0x8f,0x0b, 0x90,0x52, 0x90,0x3f, - 0x90,0x44, 0x90,0x49, 0x90,0x3d, 0x91,0x10, 0x91,0x0d, 0x91,0x0f, 0x91,0x11, - 0x91,0x16, 0x91,0x14, 0x91,0x0b, 0x91,0x0e, 0x91,0x6e, 0x91,0x6f, 0x92,0x48, - 0x92,0x52, 0x92,0x30, 0x92,0x3a, 0x92,0x66, 0x92,0x33, 0x92,0x65, 0x92,0x5e, - 0x92,0x83, 0x92,0x2e, 0x92,0x4a, 0x92,0x46, 0x92,0x6d, 0x92,0x6c, 0x92,0x4f, - 0x92,0x60, 0x92,0x67, 0x92,0x6f, 0x92,0x36, 0x92,0x61, 0x92,0x70, 0x92,0x31, - 0x92,0x54, 0x92,0x63, 0x92,0x50, 0x92,0x72, 0x92,0x4e, 0x92,0x53, 0x92,0x4c, - 0x92,0x56, 0x92,0x32, 0x95,0x9f, 0x95,0x9c, 0x95,0x9e, 0x95,0x9b, 0x96,0x92, - 0x96,0x93, 0x96,0x91, 0x96,0x97, 0x96,0xce, 0x96,0xfa, 0x96,0xfd, 0x96,0xf8, - 0x96,0xf5, 0x97,0x73, 0x97,0x77, 0x97,0x78, 0x97,0x72, 0x98,0x0f, 0x98,0x0d, - 0x98,0x0e, 0x98,0xac, 0x98,0xf6, 0x98,0xf9, 0x99,0xaf, 0x99,0xb2, 0x99,0xb0, - 0x99,0xb5, 0x9a,0xad, 0x9a,0xab, 0x9b,0x5b, 0x9c,0xea, 0x9c,0xed, 0x9c,0xe7, - 0x9e,0x80, 0x9e,0xfd, 0x50,0xe6, 0x50,0xd4, 0x50,0xd7, 0x50,0xe8, 0x50,0xf3, - 0x50,0xdb, 0x50,0xea, 0x50,0xdd, 0x50,0xe4, 0x50,0xd3, 0x50,0xec, 0x50,0xf0, - 0x50,0xef, 0x50,0xe3, 0x50,0xe0, 0x51,0xd8, 0x52,0x80, 0x52,0x81, 0x52,0xe9, - 0x52,0xeb, 0x53,0x30, 0x53,0xac, 0x56,0x27, 0x56,0x15, 0x56,0x0c, 0x56,0x12, - 0x55,0xfc, 0x56,0x0f, 0x56,0x1c, 0x56,0x01, 0x56,0x13, 0x56,0x02, 0x55,0xfa, - 0x56,0x1d, 0x56,0x04, 0x55,0xff, 0x55,0xf9, 0x58,0x89, 0x58,0x7c, 0x58,0x90, - 0x58,0x98, 0x58,0x86, 0x58,0x81, 0x58,0x7f, 0x58,0x74, 0x58,0x8b, 0x58,0x7a, - 0x58,0x87, 0x58,0x91, 0x58,0x8e, 0x58,0x76, 0x58,0x82, 0x58,0x88, 0x58,0x7b, - 0x58,0x94, 0x58,0x8f, 0x58,0xfe, 0x59,0x6b, 0x5a,0xdc, 0x5a,0xee, 0x5a,0xe5, - 0x5a,0xd5, 0x5a,0xea, 0x5a,0xda, 0x5a,0xed, 0x5a,0xeb, 0x5a,0xf3, 0x5a,0xe2, - 0x5a,0xe0, 0x5a,0xdb, 0x5a,0xec, 0x5a,0xde, 0x5a,0xdd, 0x5a,0xd9, 0x5a,0xe8, - 0x5a,0xdf, 0x5b,0x77, 0x5b,0xe0, 0x5b,0xe3, 0x5c,0x63, 0x5d,0x82, 0x5d,0x80, - 0x5d,0x7d, 0x5d,0x86, 0x5d,0x7a, 0x5d,0x81, 0x5d,0x77, 0x5d,0x8a, 0x5d,0x89, - 0x5d,0x88, 0x5d,0x7e, 0x5d,0x7c, 0x5d,0x8d, 0x5d,0x79, 0x5d,0x7f, 0x5e,0x58, - 0x5e,0x59, 0x5e,0x53, 0x5e,0xd8, 0x5e,0xd1, 0x5e,0xd7, 0x5e,0xce, 0x5e,0xdc, - 0x5e,0xd5, 0x5e,0xd9, 0x5e,0xd2, 0x5e,0xd4, 0x5f,0x44, 0x5f,0x43, 0x5f,0x6f, - 0x5f,0xb6, 0x61,0x2c, 0x61,0x28, 0x61,0x41, 0x61,0x5e, 0x61,0x71, 0x61,0x73, - 0x61,0x52, 0x61,0x53, 0x61,0x72, 0x61,0x6c, 0x61,0x80, 0x61,0x74, 0x61,0x54, - 0x61,0x7a, 0x61,0x5b, 0x61,0x65, 0x61,0x3b, 0x61,0x6a, 0x61,0x61, 0x61,0x56, - 0x62,0x29, 0x62,0x27, 0x62,0x2b, 0x64,0x2b, 0x64,0x4d, 0x64,0x5b, 0x64,0x5d, - 0x64,0x74, 0x64,0x76, 0x64,0x72, 0x64,0x73, 0x64,0x7d, 0x64,0x75, 0x64,0x66, - 0x64,0xa6, 0x64,0x4e, 0x64,0x82, 0x64,0x5e, 0x64,0x5c, 0x64,0x4b, 0x64,0x53, - 0x64,0x60, 0x64,0x50, 0x64,0x7f, 0x64,0x3f, 0x64,0x6c, 0x64,0x6b, 0x64,0x59, - 0x64,0x65, 0x64,0x77, 0x65,0x73, 0x65,0xa0, 0x66,0xa1, 0x66,0xa0, 0x66,0x9f, - 0x67,0x05, 0x67,0x04, 0x67,0x22, 0x69,0xb1, 0x69,0xb6, 0x69,0xc9, 0x69,0xa0, - 0x69,0xce, 0x69,0x96, 0x69,0xb0, 0x69,0xac, 0x69,0xbc, 0x69,0x91, 0x69,0x99, - 0x69,0x8e, 0x69,0xa7, 0x69,0x8d, 0x69,0xa9, 0x69,0xbe, 0x69,0xaf, 0x69,0xbf, - 0x69,0xc4, 0x69,0xbd, 0x69,0xa4, 0x69,0xd4, 0x69,0xb9, 0x69,0xca, 0x69,0x9a, - 0x69,0xcf, 0x69,0xb3, 0x69,0x93, 0x69,0xaa, 0x69,0xa1, 0x69,0x9e, 0x69,0xd9, - 0x69,0x97, 0x69,0x90, 0x69,0xc2, 0x69,0xb5, 0x69,0xa5, 0x69,0xc6, 0x6b,0x4a, - 0x6b,0x4d, 0x6b,0x4b, 0x6b,0x9e, 0x6b,0x9f, 0x6b,0xa0, 0x6b,0xc3, 0x6b,0xc4, - 0x6b,0xfe, 0x6e,0xce, 0x6e,0xf5, 0x6e,0xf1, 0x6f,0x03, 0x6f,0x25, 0x6e,0xf8, - 0x6f,0x37, 0x6e,0xfb, 0x6f,0x2e, 0x6f,0x09, 0x6f,0x4e, 0x6f,0x19, 0x6f,0x1a, - 0x6f,0x27, 0x6f,0x18, 0x6f,0x3b, 0x6f,0x12, 0x6e,0xed, 0x6f,0x0a, 0x6f,0x36, - 0x6f,0x73, 0x6e,0xf9, 0x6e,0xee, 0x6f,0x2d, 0x6f,0x40, 0x6f,0x30, 0x6f,0x3c, - 0x6f,0x35, 0x6e,0xeb, 0x6f,0x07, 0x6f,0x0e, 0x6f,0x43, 0x6f,0x05, 0x6e,0xfd, - 0x6e,0xf6, 0x6f,0x39, 0x6f,0x1c, 0x6e,0xfc, 0x6f,0x3a, 0x6f,0x1f, 0x6f,0x0d, - 0x6f,0x1e, 0x6f,0x08, 0x6f,0x21, 0x71,0x87, 0x71,0x90, 0x71,0x89, 0x71,0x80, - 0x71,0x85, 0x71,0x82, 0x71,0x8f, 0x71,0x7b, 0x71,0x86, 0x71,0x81, 0x71,0x97, - 0x72,0x44, 0x72,0x53, 0x72,0x97, 0x72,0x95, 0x72,0x93, 0x73,0x43, 0x73,0x4d, - 0x73,0x51, 0x73,0x4c, 0x74,0x62, 0x74,0x73, 0x74,0x71, 0x74,0x75, 0x74,0x72, - 0x74,0x67, 0x74,0x6e, 0x75,0x00, 0x75,0x02, 0x75,0x03, 0x75,0x7d, 0x75,0x90, - 0x76,0x16, 0x76,0x08, 0x76,0x0c, 0x76,0x15, 0x76,0x11, 0x76,0x0a, 0x76,0x14, - 0x76,0xb8, 0x77,0x81, 0x77,0x7c, 0x77,0x85, 0x77,0x82, 0x77,0x6e, 0x77,0x80, - 0x77,0x6f, 0x77,0x7e, 0x77,0x83, 0x78,0xb2, 0x78,0xaa, 0x78,0xb4, 0x78,0xad, - 0x78,0xa8, 0x78,0x7e, 0x78,0xab, 0x78,0x9e, 0x78,0xa5, 0x78,0xa0, 0x78,0xac, - 0x78,0xa2, 0x78,0xa4, 0x79,0x98, 0x79,0x8a, 0x79,0x8b, 0x79,0x96, 0x79,0x95, - 0x79,0x94, 0x79,0x93, 0x79,0x97, 0x79,0x88, 0x79,0x92, 0x79,0x90, 0x7a,0x2b, - 0x7a,0x4a, 0x7a,0x30, 0x7a,0x2f, 0x7a,0x28, 0x7a,0x26, 0x7a,0xa8, 0x7a,0xab, - 0x7a,0xac, 0x7a,0xee, 0x7b,0x88, 0x7b,0x9c, 0x7b,0x8a, 0x7b,0x91, 0x7b,0x90, - 0x7b,0x96, 0x7b,0x8d, 0x7b,0x8c, 0x7b,0x9b, 0x7b,0x8e, 0x7b,0x85, 0x7b,0x98, - 0x52,0x84, 0x7b,0x99, 0x7b,0xa4, 0x7b,0x82, 0x7c,0xbb, 0x7c,0xbf, 0x7c,0xbc, - 0x7c,0xba, 0x7d,0xa7, 0x7d,0xb7, 0x7d,0xc2, 0x7d,0xa3, 0x7d,0xaa, 0x7d,0xc1, - 0x7d,0xc0, 0x7d,0xc5, 0x7d,0x9d, 0x7d,0xce, 0x7d,0xc4, 0x7d,0xc6, 0x7d,0xcb, - 0x7d,0xcc, 0x7d,0xaf, 0x7d,0xb9, 0x7d,0x96, 0x7d,0xbc, 0x7d,0x9f, 0x7d,0xa6, - 0x7d,0xae, 0x7d,0xa9, 0x7d,0xa1, 0x7d,0xc9, 0x7f,0x73, 0x7f,0xe2, 0x7f,0xe3, - 0x7f,0xe5, 0x7f,0xde, 0x80,0x24, 0x80,0x5d, 0x80,0x5c, 0x81,0x89, 0x81,0x86, - 0x81,0x83, 0x81,0x87, 0x81,0x8d, 0x81,0x8c, 0x81,0x8b, 0x82,0x15, 0x84,0x97, - 0x84,0xa4, 0x84,0xa1, 0x84,0x9f, 0x84,0xba, 0x84,0xce, 0x84,0xc2, 0x84,0xac, - 0x84,0xae, 0x84,0xab, 0x84,0xb9, 0x84,0xb4, 0x84,0xc1, 0x84,0xcd, 0x84,0xaa, - 0x84,0x9a, 0x84,0xb1, 0x84,0xd0, 0x84,0x9d, 0x84,0xa7, 0x84,0xbb, 0x84,0xa2, - 0x84,0x94, 0x84,0xc7, 0x84,0xcc, 0x84,0x9b, 0x84,0xa9, 0x84,0xaf, 0x84,0xa8, - 0x84,0xd6, 0x84,0x98, 0x84,0xb6, 0x84,0xcf, 0x84,0xa0, 0x84,0xd7, 0x84,0xd4, - 0x84,0xd2, 0x84,0xdb, 0x84,0xb0, 0x84,0x91, 0x86,0x61, 0x87,0x33, 0x87,0x23, - 0x87,0x28, 0x87,0x6b, 0x87,0x40, 0x87,0x2e, 0x87,0x1e, 0x87,0x21, 0x87,0x19, - 0x87,0x1b, 0x87,0x43, 0x87,0x2c, 0x87,0x41, 0x87,0x3e, 0x87,0x46, 0x87,0x20, - 0x87,0x32, 0x87,0x2a, 0x87,0x2d, 0x87,0x3c, 0x87,0x12, 0x87,0x3a, 0x87,0x31, - 0x87,0x35, 0x87,0x42, 0x87,0x26, 0x87,0x27, 0x87,0x38, 0x87,0x24, 0x87,0x1a, - 0x87,0x30, 0x87,0x11, 0x88,0xf7, 0x88,0xe7, 0x88,0xf1, 0x88,0xf2, 0x88,0xfa, - 0x88,0xfe, 0x88,0xee, 0x88,0xfc, 0x88,0xf6, 0x88,0xfb, 0x88,0xf0, 0x88,0xec, - 0x88,0xeb, 0x89,0x9d, 0x89,0xa1, 0x89,0x9f, 0x89,0x9e, 0x89,0xe9, 0x89,0xeb, - 0x89,0xe8, 0x8a,0xab, 0x8a,0x99, 0x8a,0x8b, 0x8a,0x92, 0x8a,0x8f, 0x8a,0x96, - 0x8c,0x3d, 0x8c,0x68, 0x8c,0x69, 0x8c,0xd5, 0x8c,0xcf, 0x8c,0xd7, 0x8d,0x96, - 0x8e,0x09, 0x8e,0x02, 0x8d,0xff, 0x8e,0x0d, 0x8d,0xfd, 0x8e,0x0a, 0x8e,0x03, - 0x8e,0x07, 0x8e,0x06, 0x8e,0x05, 0x8d,0xfe, 0x8e,0x00, 0x8e,0x04, 0x8f,0x10, - 0x8f,0x11, 0x8f,0x0e, 0x8f,0x0d, 0x91,0x23, 0x91,0x1c, 0x91,0x20, 0x91,0x22, - 0x91,0x1f, 0x91,0x1d, 0x91,0x1a, 0x91,0x24, 0x91,0x21, 0x91,0x1b, 0x91,0x7a, - 0x91,0x72, 0x91,0x79, 0x91,0x73, 0x92,0xa5, 0x92,0xa4, 0x92,0x76, 0x92,0x9b, - 0x92,0x7a, 0x92,0xa0, 0x92,0x94, 0x92,0xaa, 0x92,0x8d, 0x92,0xa6, 0x92,0x9a, - 0x92,0xab, 0x92,0x79, 0x92,0x97, 0x92,0x7f, 0x92,0xa3, 0x92,0xee, 0x92,0x8e, - 0x92,0x82, 0x92,0x95, 0x92,0xa2, 0x92,0x7d, 0x92,0x88, 0x92,0xa1, 0x92,0x8a, - 0x92,0x86, 0x92,0x8c, 0x92,0x99, 0x92,0xa7, 0x92,0x7e, 0x92,0x87, 0x92,0xa9, - 0x92,0x9d, 0x92,0x8b, 0x92,0x2d, 0x96,0x9e, 0x96,0xa1, 0x96,0xff, 0x97,0x58, - 0x97,0x7d, 0x97,0x7a, 0x97,0x7e, 0x97,0x83, 0x97,0x80, 0x97,0x82, 0x97,0x7b, - 0x97,0x84, 0x97,0x81, 0x97,0x7f, 0x97,0xce, 0x97,0xcd, 0x98,0x16, 0x98,0xad, - 0x98,0xae, 0x99,0x02, 0x99,0x00, 0x99,0x07, 0x99,0x9d, 0x99,0x9c, 0x99,0xc3, - 0x99,0xb9, 0x99,0xbb, 0x99,0xba, 0x99,0xc2, 0x99,0xbd, 0x99,0xc7, 0x9a,0xb1, - 0x9a,0xe3, 0x9a,0xe7, 0x9b,0x3e, 0x9b,0x3f, 0x9b,0x60, 0x9b,0x61, 0x9b,0x5f, - 0x9c,0xf1, 0x9c,0xf2, 0x9c,0xf5, 0x9e,0xa7, 0x50,0xff, 0x51,0x03, 0x51,0x30, - 0x50,0xf8, 0x51,0x06, 0x51,0x07, 0x50,0xf6, 0x50,0xfe, 0x51,0x0b, 0x51,0x0c, - 0x50,0xfd, 0x51,0x0a, 0x52,0x8b, 0x52,0x8c, 0x52,0xf1, 0x52,0xef, 0x56,0x48, - 0x56,0x42, 0x56,0x4c, 0x56,0x35, 0x56,0x41, 0x56,0x4a, 0x56,0x49, 0x56,0x46, - 0x56,0x58, 0x56,0x5a, 0x56,0x40, 0x56,0x33, 0x56,0x3d, 0x56,0x2c, 0x56,0x3e, - 0x56,0x38, 0x56,0x2a, 0x56,0x3a, 0x57,0x1a, 0x58,0xab, 0x58,0x9d, 0x58,0xb1, - 0x58,0xa0, 0x58,0xa3, 0x58,0xaf, 0x58,0xac, 0x58,0xa5, 0x58,0xa1, 0x58,0xff, - 0x5a,0xff, 0x5a,0xf4, 0x5a,0xfd, 0x5a,0xf7, 0x5a,0xf6, 0x5b,0x03, 0x5a,0xf8, - 0x5b,0x02, 0x5a,0xf9, 0x5b,0x01, 0x5b,0x07, 0x5b,0x05, 0x5b,0x0f, 0x5c,0x67, - 0x5d,0x99, 0x5d,0x97, 0x5d,0x9f, 0x5d,0x92, 0x5d,0xa2, 0x5d,0x93, 0x5d,0x95, - 0x5d,0xa0, 0x5d,0x9c, 0x5d,0xa1, 0x5d,0x9a, 0x5d,0x9e, 0x5e,0x69, 0x5e,0x5d, - 0x5e,0x60, 0x5e,0x5c, 0x7d,0xf3, 0x5e,0xdb, 0x5e,0xde, 0x5e,0xe1, 0x5f,0x49, - 0x5f,0xb2, 0x61,0x8b, 0x61,0x83, 0x61,0x79, 0x61,0xb1, 0x61,0xb0, 0x61,0xa2, - 0x61,0x89, 0x61,0x9b, 0x61,0x93, 0x61,0xaf, 0x61,0xad, 0x61,0x9f, 0x61,0x92, - 0x61,0xaa, 0x61,0xa1, 0x61,0x8d, 0x61,0x66, 0x61,0xb3, 0x62,0x2d, 0x64,0x6e, - 0x64,0x70, 0x64,0x96, 0x64,0xa0, 0x64,0x85, 0x64,0x97, 0x64,0x9c, 0x64,0x8f, - 0x64,0x8b, 0x64,0x8a, 0x64,0x8c, 0x64,0xa3, 0x64,0x9f, 0x64,0x68, 0x64,0xb1, - 0x64,0x98, 0x65,0x76, 0x65,0x7a, 0x65,0x79, 0x65,0x7b, 0x65,0xb2, 0x65,0xb3, - 0x66,0xb5, 0x66,0xb0, 0x66,0xa9, 0x66,0xb2, 0x66,0xb7, 0x66,0xaa, 0x66,0xaf, - 0x6a,0x00, 0x6a,0x06, 0x6a,0x17, 0x69,0xe5, 0x69,0xf8, 0x6a,0x15, 0x69,0xf1, - 0x69,0xe4, 0x6a,0x20, 0x69,0xff, 0x69,0xec, 0x69,0xe2, 0x6a,0x1b, 0x6a,0x1d, - 0x69,0xfe, 0x6a,0x27, 0x69,0xf2, 0x69,0xee, 0x6a,0x14, 0x69,0xf7, 0x69,0xe7, - 0x6a,0x40, 0x6a,0x08, 0x69,0xe6, 0x69,0xfb, 0x6a,0x0d, 0x69,0xfc, 0x69,0xeb, - 0x6a,0x09, 0x6a,0x04, 0x6a,0x18, 0x6a,0x25, 0x6a,0x0f, 0x69,0xf6, 0x6a,0x26, - 0x6a,0x07, 0x69,0xf4, 0x6a,0x16, 0x6b,0x51, 0x6b,0xa5, 0x6b,0xa3, 0x6b,0xa2, - 0x6b,0xa6, 0x6c,0x01, 0x6c,0x00, 0x6b,0xff, 0x6c,0x02, 0x6f,0x41, 0x6f,0x26, - 0x6f,0x7e, 0x6f,0x87, 0x6f,0xc6, 0x6f,0x92, 0x6f,0x8d, 0x6f,0x89, 0x6f,0x8c, - 0x6f,0x62, 0x6f,0x4f, 0x6f,0x85, 0x6f,0x5a, 0x6f,0x96, 0x6f,0x76, 0x6f,0x6c, - 0x6f,0x82, 0x6f,0x55, 0x6f,0x72, 0x6f,0x52, 0x6f,0x50, 0x6f,0x57, 0x6f,0x94, - 0x6f,0x93, 0x6f,0x5d, 0x6f,0x00, 0x6f,0x61, 0x6f,0x6b, 0x6f,0x7d, 0x6f,0x67, - 0x6f,0x90, 0x6f,0x53, 0x6f,0x8b, 0x6f,0x69, 0x6f,0x7f, 0x6f,0x95, 0x6f,0x63, - 0x6f,0x77, 0x6f,0x6a, 0x6f,0x7b, 0x71,0xb2, 0x71,0xaf, 0x71,0x9b, 0x71,0xb0, - 0x71,0xa0, 0x71,0x9a, 0x71,0xa9, 0x71,0xb5, 0x71,0x9d, 0x71,0xa5, 0x71,0x9e, - 0x71,0xa4, 0x71,0xa1, 0x71,0xaa, 0x71,0x9c, 0x71,0xa7, 0x71,0xb3, 0x72,0x98, - 0x72,0x9a, 0x73,0x58, 0x73,0x52, 0x73,0x5e, 0x73,0x5f, 0x73,0x60, 0x73,0x5d, - 0x73,0x5b, 0x73,0x61, 0x73,0x5a, 0x73,0x59, 0x73,0x62, 0x74,0x87, 0x74,0x89, - 0x74,0x8a, 0x74,0x86, 0x74,0x81, 0x74,0x7d, 0x74,0x85, 0x74,0x88, 0x74,0x7c, - 0x74,0x79, 0x75,0x08, 0x75,0x07, 0x75,0x7e, 0x76,0x25, 0x76,0x1e, 0x76,0x19, - 0x76,0x1d, 0x76,0x1c, 0x76,0x23, 0x76,0x1a, 0x76,0x28, 0x76,0x1b, 0x76,0x9c, - 0x76,0x9d, 0x76,0x9e, 0x76,0x9b, 0x77,0x8d, 0x77,0x8f, 0x77,0x89, 0x77,0x88, - 0x78,0xcd, 0x78,0xbb, 0x78,0xcf, 0x78,0xcc, 0x78,0xd1, 0x78,0xce, 0x78,0xd4, - 0x78,0xc8, 0x78,0xc3, 0x78,0xc4, 0x78,0xc9, 0x79,0x9a, 0x79,0xa1, 0x79,0xa0, - 0x79,0x9c, 0x79,0xa2, 0x79,0x9b, 0x6b,0x76, 0x7a,0x39, 0x7a,0xb2, 0x7a,0xb4, - 0x7a,0xb3, 0x7b,0xb7, 0x7b,0xcb, 0x7b,0xbe, 0x7b,0xac, 0x7b,0xce, 0x7b,0xaf, - 0x7b,0xb9, 0x7b,0xca, 0x7b,0xb5, 0x7c,0xc5, 0x7c,0xc8, 0x7c,0xcc, 0x7c,0xcb, - 0x7d,0xf7, 0x7d,0xdb, 0x7d,0xea, 0x7d,0xe7, 0x7d,0xd7, 0x7d,0xe1, 0x7e,0x03, - 0x7d,0xfa, 0x7d,0xe6, 0x7d,0xf6, 0x7d,0xf1, 0x7d,0xf0, 0x7d,0xee, 0x7d,0xdf, - 0x7f,0x76, 0x7f,0xac, 0x7f,0xb0, 0x7f,0xad, 0x7f,0xed, 0x7f,0xeb, 0x7f,0xea, - 0x7f,0xec, 0x7f,0xe6, 0x7f,0xe8, 0x80,0x64, 0x80,0x67, 0x81,0xa3, 0x81,0x9f, - 0x81,0x9e, 0x81,0x95, 0x81,0xa2, 0x81,0x99, 0x81,0x97, 0x82,0x16, 0x82,0x4f, - 0x82,0x53, 0x82,0x52, 0x82,0x50, 0x82,0x4e, 0x82,0x51, 0x85,0x24, 0x85,0x3b, - 0x85,0x0f, 0x85,0x00, 0x85,0x29, 0x85,0x0e, 0x85,0x09, 0x85,0x0d, 0x85,0x1f, - 0x85,0x0a, 0x85,0x27, 0x85,0x1c, 0x84,0xfb, 0x85,0x2b, 0x84,0xfa, 0x85,0x08, - 0x85,0x0c, 0x84,0xf4, 0x85,0x2a, 0x84,0xf2, 0x85,0x15, 0x84,0xf7, 0x84,0xeb, - 0x84,0xf3, 0x84,0xfc, 0x85,0x12, 0x84,0xea, 0x84,0xe9, 0x85,0x16, 0x84,0xfe, - 0x85,0x28, 0x85,0x1d, 0x85,0x2e, 0x85,0x02, 0x84,0xfd, 0x85,0x1e, 0x84,0xf6, - 0x85,0x31, 0x85,0x26, 0x84,0xe7, 0x84,0xe8, 0x84,0xf0, 0x84,0xef, 0x84,0xf9, - 0x85,0x18, 0x85,0x20, 0x85,0x30, 0x85,0x0b, 0x85,0x19, 0x85,0x2f, 0x86,0x62, - 0x87,0x56, 0x87,0x63, 0x87,0x64, 0x87,0x77, 0x87,0xe1, 0x87,0x73, 0x87,0x58, - 0x87,0x54, 0x87,0x5b, 0x87,0x52, 0x87,0x61, 0x87,0x5a, 0x87,0x51, 0x87,0x5e, - 0x87,0x6d, 0x87,0x6a, 0x87,0x50, 0x87,0x4e, 0x87,0x5f, 0x87,0x5d, 0x87,0x6f, - 0x87,0x6c, 0x87,0x7a, 0x87,0x6e, 0x87,0x5c, 0x87,0x65, 0x87,0x4f, 0x87,0x7b, - 0x87,0x75, 0x87,0x62, 0x87,0x67, 0x87,0x69, 0x88,0x5a, 0x89,0x05, 0x89,0x0c, - 0x89,0x14, 0x89,0x0b, 0x89,0x17, 0x89,0x18, 0x89,0x19, 0x89,0x06, 0x89,0x16, - 0x89,0x11, 0x89,0x0e, 0x89,0x09, 0x89,0xa2, 0x89,0xa4, 0x89,0xa3, 0x89,0xed, - 0x89,0xf0, 0x89,0xec, 0x8a,0xcf, 0x8a,0xc6, 0x8a,0xb8, 0x8a,0xd3, 0x8a,0xd1, - 0x8a,0xd4, 0x8a,0xd5, 0x8a,0xbb, 0x8a,0xd7, 0x8a,0xbe, 0x8a,0xc0, 0x8a,0xc5, - 0x8a,0xd8, 0x8a,0xc3, 0x8a,0xba, 0x8a,0xbd, 0x8a,0xd9, 0x8c,0x3e, 0x8c,0x4d, - 0x8c,0x8f, 0x8c,0xe5, 0x8c,0xdf, 0x8c,0xd9, 0x8c,0xe8, 0x8c,0xda, 0x8c,0xdd, - 0x8c,0xe7, 0x8d,0xa0, 0x8d,0x9c, 0x8d,0xa1, 0x8d,0x9b, 0x8e,0x20, 0x8e,0x23, - 0x8e,0x25, 0x8e,0x24, 0x8e,0x2e, 0x8e,0x15, 0x8e,0x1b, 0x8e,0x16, 0x8e,0x11, - 0x8e,0x19, 0x8e,0x26, 0x8e,0x27, 0x8e,0x14, 0x8e,0x12, 0x8e,0x18, 0x8e,0x13, - 0x8e,0x1c, 0x8e,0x17, 0x8e,0x1a, 0x8f,0x2c, 0x8f,0x24, 0x8f,0x18, 0x8f,0x1a, - 0x8f,0x20, 0x8f,0x23, 0x8f,0x16, 0x8f,0x17, 0x90,0x73, 0x90,0x70, 0x90,0x6f, - 0x90,0x67, 0x90,0x6b, 0x91,0x2f, 0x91,0x2b, 0x91,0x29, 0x91,0x2a, 0x91,0x32, - 0x91,0x26, 0x91,0x2e, 0x91,0x85, 0x91,0x86, 0x91,0x8a, 0x91,0x81, 0x91,0x82, - 0x91,0x84, 0x91,0x80, 0x92,0xd0, 0x92,0xc3, 0x92,0xc4, 0x92,0xc0, 0x92,0xd9, - 0x92,0xb6, 0x92,0xcf, 0x92,0xf1, 0x92,0xdf, 0x92,0xd8, 0x92,0xe9, 0x92,0xd7, - 0x92,0xdd, 0x92,0xcc, 0x92,0xef, 0x92,0xc2, 0x92,0xe8, 0x92,0xca, 0x92,0xc8, - 0x92,0xce, 0x92,0xe6, 0x92,0xcd, 0x92,0xd5, 0x92,0xc9, 0x92,0xe0, 0x92,0xde, - 0x92,0xe7, 0x92,0xd1, 0x92,0xd3, 0x92,0xb5, 0x92,0xe1, 0x92,0xc6, 0x92,0xb4, - 0x95,0x7c, 0x95,0xac, 0x95,0xab, 0x95,0xae, 0x95,0xb0, 0x96,0xa4, 0x96,0xa2, - 0x96,0xd3, 0x97,0x05, 0x97,0x08, 0x97,0x02, 0x97,0x5a, 0x97,0x8a, 0x97,0x8e, - 0x97,0x88, 0x97,0xd0, 0x97,0xcf, 0x98,0x1e, 0x98,0x1d, 0x98,0x26, 0x98,0x29, - 0x98,0x28, 0x98,0x20, 0x98,0x1b, 0x98,0x27, 0x98,0xb2, 0x99,0x08, 0x98,0xfa, - 0x99,0x11, 0x99,0x14, 0x99,0x16, 0x99,0x17, 0x99,0x15, 0x99,0xdc, 0x99,0xcd, - 0x99,0xcf, 0x99,0xd3, 0x99,0xd4, 0x99,0xce, 0x99,0xc9, 0x99,0xd6, 0x99,0xd8, - 0x99,0xcb, 0x99,0xd7, 0x99,0xcc, 0x9a,0xb3, 0x9a,0xec, 0x9a,0xeb, 0x9a,0xf3, - 0x9a,0xf2, 0x9a,0xf1, 0x9b,0x46, 0x9b,0x43, 0x9b,0x67, 0x9b,0x74, 0x9b,0x71, - 0x9b,0x66, 0x9b,0x76, 0x9b,0x75, 0x9b,0x70, 0x9b,0x68, 0x9b,0x64, 0x9b,0x6c, - 0x9c,0xfc, 0x9c,0xfa, 0x9c,0xfd, 0x9c,0xff, 0x9c,0xf7, 0x9d,0x07, 0x9d,0x00, - 0x9c,0xf9, 0x9c,0xfb, 0x9d,0x08, 0x9d,0x05, 0x9d,0x04, 0x9e,0x83, 0x9e,0xd3, - 0x9f,0x0f, 0x9f,0x10, 0x51,0x1c, 0x51,0x13, 0x51,0x17, 0x51,0x1a, 0x51,0x11, - 0x51,0xde, 0x53,0x34, 0x53,0xe1, 0x56,0x70, 0x56,0x60, 0x56,0x6e, 0x56,0x73, - 0x56,0x66, 0x56,0x63, 0x56,0x6d, 0x56,0x72, 0x56,0x5e, 0x56,0x77, 0x57,0x1c, - 0x57,0x1b, 0x58,0xc8, 0x58,0xbd, 0x58,0xc9, 0x58,0xbf, 0x58,0xba, 0x58,0xc2, - 0x58,0xbc, 0x58,0xc6, 0x5b,0x17, 0x5b,0x19, 0x5b,0x1b, 0x5b,0x21, 0x5b,0x14, - 0x5b,0x13, 0x5b,0x10, 0x5b,0x16, 0x5b,0x28, 0x5b,0x1a, 0x5b,0x20, 0x5b,0x1e, - 0x5b,0xef, 0x5d,0xac, 0x5d,0xb1, 0x5d,0xa9, 0x5d,0xa7, 0x5d,0xb5, 0x5d,0xb0, - 0x5d,0xae, 0x5d,0xaa, 0x5d,0xa8, 0x5d,0xb2, 0x5d,0xad, 0x5d,0xaf, 0x5d,0xb4, - 0x5e,0x67, 0x5e,0x68, 0x5e,0x66, 0x5e,0x6f, 0x5e,0xe9, 0x5e,0xe7, 0x5e,0xe6, - 0x5e,0xe8, 0x5e,0xe5, 0x5f,0x4b, 0x5f,0xbc, 0x61,0x9d, 0x61,0xa8, 0x61,0x96, - 0x61,0xc5, 0x61,0xb4, 0x61,0xc6, 0x61,0xc1, 0x61,0xcc, 0x61,0xba, 0x61,0xbf, - 0x61,0xb8, 0x61,0x8c, 0x64,0xd7, 0x64,0xd6, 0x64,0xd0, 0x64,0xcf, 0x64,0xc9, - 0x64,0xbd, 0x64,0x89, 0x64,0xc3, 0x64,0xdb, 0x64,0xf3, 0x64,0xd9, 0x65,0x33, - 0x65,0x7f, 0x65,0x7c, 0x65,0xa2, 0x66,0xc8, 0x66,0xbe, 0x66,0xc0, 0x66,0xca, - 0x66,0xcb, 0x66,0xcf, 0x66,0xbd, 0x66,0xbb, 0x66,0xba, 0x66,0xcc, 0x67,0x23, - 0x6a,0x34, 0x6a,0x66, 0x6a,0x49, 0x6a,0x67, 0x6a,0x32, 0x6a,0x68, 0x6a,0x3e, - 0x6a,0x5d, 0x6a,0x6d, 0x6a,0x76, 0x6a,0x5b, 0x6a,0x51, 0x6a,0x28, 0x6a,0x5a, - 0x6a,0x3b, 0x6a,0x3f, 0x6a,0x41, 0x6a,0x6a, 0x6a,0x64, 0x6a,0x50, 0x6a,0x4f, - 0x6a,0x54, 0x6a,0x6f, 0x6a,0x69, 0x6a,0x60, 0x6a,0x3c, 0x6a,0x5e, 0x6a,0x56, - 0x6a,0x55, 0x6a,0x4d, 0x6a,0x4e, 0x6a,0x46, 0x6b,0x55, 0x6b,0x54, 0x6b,0x56, - 0x6b,0xa7, 0x6b,0xaa, 0x6b,0xab, 0x6b,0xc8, 0x6b,0xc7, 0x6c,0x04, 0x6c,0x03, - 0x6c,0x06, 0x6f,0xad, 0x6f,0xcb, 0x6f,0xa3, 0x6f,0xc7, 0x6f,0xbc, 0x6f,0xce, - 0x6f,0xc8, 0x6f,0x5e, 0x6f,0xc4, 0x6f,0xbd, 0x6f,0x9e, 0x6f,0xca, 0x6f,0xa8, - 0x70,0x04, 0x6f,0xa5, 0x6f,0xae, 0x6f,0xba, 0x6f,0xac, 0x6f,0xaa, 0x6f,0xcf, - 0x6f,0xbf, 0x6f,0xb8, 0x6f,0xa2, 0x6f,0xc9, 0x6f,0xab, 0x6f,0xcd, 0x6f,0xaf, - 0x6f,0xb2, 0x6f,0xb0, 0x71,0xc5, 0x71,0xc2, 0x71,0xbf, 0x71,0xb8, 0x71,0xd6, - 0x71,0xc0, 0x71,0xc1, 0x71,0xcb, 0x71,0xd4, 0x71,0xca, 0x71,0xc7, 0x71,0xcf, - 0x71,0xbd, 0x71,0xd8, 0x71,0xbc, 0x71,0xc6, 0x71,0xda, 0x71,0xdb, 0x72,0x9d, - 0x72,0x9e, 0x73,0x69, 0x73,0x66, 0x73,0x67, 0x73,0x6c, 0x73,0x65, 0x73,0x6b, - 0x73,0x6a, 0x74,0x7f, 0x74,0x9a, 0x74,0xa0, 0x74,0x94, 0x74,0x92, 0x74,0x95, - 0x74,0xa1, 0x75,0x0b, 0x75,0x80, 0x76,0x2f, 0x76,0x2d, 0x76,0x31, 0x76,0x3d, - 0x76,0x33, 0x76,0x3c, 0x76,0x35, 0x76,0x32, 0x76,0x30, 0x76,0xbb, 0x76,0xe6, - 0x77,0x9a, 0x77,0x9d, 0x77,0xa1, 0x77,0x9c, 0x77,0x9b, 0x77,0xa2, 0x77,0xa3, - 0x77,0x95, 0x77,0x99, 0x77,0x97, 0x78,0xdd, 0x78,0xe9, 0x78,0xe5, 0x78,0xea, - 0x78,0xde, 0x78,0xe3, 0x78,0xdb, 0x78,0xe1, 0x78,0xe2, 0x78,0xed, 0x78,0xdf, - 0x78,0xe0, 0x79,0xa4, 0x7a,0x44, 0x7a,0x48, 0x7a,0x47, 0x7a,0xb6, 0x7a,0xb8, - 0x7a,0xb5, 0x7a,0xb1, 0x7a,0xb7, 0x7b,0xde, 0x7b,0xe3, 0x7b,0xe7, 0x7b,0xdd, - 0x7b,0xd5, 0x7b,0xe5, 0x7b,0xda, 0x7b,0xe8, 0x7b,0xf9, 0x7b,0xd4, 0x7b,0xea, - 0x7b,0xe2, 0x7b,0xdc, 0x7b,0xeb, 0x7b,0xd8, 0x7b,0xdf, 0x7c,0xd2, 0x7c,0xd4, - 0x7c,0xd7, 0x7c,0xd0, 0x7c,0xd1, 0x7e,0x12, 0x7e,0x21, 0x7e,0x17, 0x7e,0x0c, - 0x7e,0x1f, 0x7e,0x20, 0x7e,0x13, 0x7e,0x0e, 0x7e,0x1c, 0x7e,0x15, 0x7e,0x1a, - 0x7e,0x22, 0x7e,0x0b, 0x7e,0x0f, 0x7e,0x16, 0x7e,0x0d, 0x7e,0x14, 0x7e,0x25, - 0x7e,0x24, 0x7f,0x43, 0x7f,0x7b, 0x7f,0x7c, 0x7f,0x7a, 0x7f,0xb1, 0x7f,0xef, - 0x80,0x2a, 0x80,0x29, 0x80,0x6c, 0x81,0xb1, 0x81,0xa6, 0x81,0xae, 0x81,0xb9, - 0x81,0xb5, 0x81,0xab, 0x81,0xb0, 0x81,0xac, 0x81,0xb4, 0x81,0xb2, 0x81,0xb7, - 0x81,0xa7, 0x81,0xf2, 0x82,0x55, 0x82,0x56, 0x82,0x57, 0x85,0x56, 0x85,0x45, - 0x85,0x6b, 0x85,0x4d, 0x85,0x53, 0x85,0x61, 0x85,0x58, 0x85,0x40, 0x85,0x46, - 0x85,0x64, 0x85,0x41, 0x85,0x62, 0x85,0x44, 0x85,0x51, 0x85,0x47, 0x85,0x63, - 0x85,0x3e, 0x85,0x5b, 0x85,0x71, 0x85,0x4e, 0x85,0x6e, 0x85,0x75, 0x85,0x55, - 0x85,0x67, 0x85,0x60, 0x85,0x8c, 0x85,0x66, 0x85,0x5d, 0x85,0x54, 0x85,0x65, - 0x85,0x6c, 0x86,0x63, 0x86,0x65, 0x86,0x64, 0x87,0x9b, 0x87,0x8f, 0x87,0x97, - 0x87,0x93, 0x87,0x92, 0x87,0x88, 0x87,0x81, 0x87,0x96, 0x87,0x98, 0x87,0x79, - 0x87,0x87, 0x87,0xa3, 0x87,0x85, 0x87,0x90, 0x87,0x91, 0x87,0x9d, 0x87,0x84, - 0x87,0x94, 0x87,0x9c, 0x87,0x9a, 0x87,0x89, 0x89,0x1e, 0x89,0x26, 0x89,0x30, - 0x89,0x2d, 0x89,0x2e, 0x89,0x27, 0x89,0x31, 0x89,0x22, 0x89,0x29, 0x89,0x23, - 0x89,0x2f, 0x89,0x2c, 0x89,0x1f, 0x89,0xf1, 0x8a,0xe0, 0x8a,0xe2, 0x8a,0xf2, - 0x8a,0xf4, 0x8a,0xf5, 0x8a,0xdd, 0x8b,0x14, 0x8a,0xe4, 0x8a,0xdf, 0x8a,0xf0, - 0x8a,0xc8, 0x8a,0xde, 0x8a,0xe1, 0x8a,0xe8, 0x8a,0xff, 0x8a,0xef, 0x8a,0xfb, - 0x8c,0x91, 0x8c,0x92, 0x8c,0x90, 0x8c,0xf5, 0x8c,0xee, 0x8c,0xf1, 0x8c,0xf0, - 0x8c,0xf3, 0x8d,0x6c, 0x8d,0x6e, 0x8d,0xa5, 0x8d,0xa7, 0x8e,0x33, 0x8e,0x3e, - 0x8e,0x38, 0x8e,0x40, 0x8e,0x45, 0x8e,0x36, 0x8e,0x3c, 0x8e,0x3d, 0x8e,0x41, - 0x8e,0x30, 0x8e,0x3f, 0x8e,0xbd, 0x8f,0x36, 0x8f,0x2e, 0x8f,0x35, 0x8f,0x32, - 0x8f,0x39, 0x8f,0x37, 0x8f,0x34, 0x90,0x76, 0x90,0x79, 0x90,0x7b, 0x90,0x86, - 0x90,0xfa, 0x91,0x33, 0x91,0x35, 0x91,0x36, 0x91,0x93, 0x91,0x90, 0x91,0x91, - 0x91,0x8d, 0x91,0x8f, 0x93,0x27, 0x93,0x1e, 0x93,0x08, 0x93,0x1f, 0x93,0x06, - 0x93,0x0f, 0x93,0x7a, 0x93,0x38, 0x93,0x3c, 0x93,0x1b, 0x93,0x23, 0x93,0x12, - 0x93,0x01, 0x93,0x46, 0x93,0x2d, 0x93,0x0e, 0x93,0x0d, 0x92,0xcb, 0x93,0x1d, - 0x92,0xfa, 0x93,0x25, 0x93,0x13, 0x92,0xf9, 0x92,0xf7, 0x93,0x34, 0x93,0x02, - 0x93,0x24, 0x92,0xff, 0x93,0x29, 0x93,0x39, 0x93,0x35, 0x93,0x2a, 0x93,0x14, - 0x93,0x0c, 0x93,0x0b, 0x92,0xfe, 0x93,0x09, 0x93,0x00, 0x92,0xfb, 0x93,0x16, - 0x95,0xbc, 0x95,0xcd, 0x95,0xbe, 0x95,0xb9, 0x95,0xba, 0x95,0xb6, 0x95,0xbf, - 0x95,0xb5, 0x95,0xbd, 0x96,0xa9, 0x96,0xd4, 0x97,0x0b, 0x97,0x12, 0x97,0x10, - 0x97,0x99, 0x97,0x97, 0x97,0x94, 0x97,0xf0, 0x97,0xf8, 0x98,0x35, 0x98,0x2f, - 0x98,0x32, 0x99,0x24, 0x99,0x1f, 0x99,0x27, 0x99,0x29, 0x99,0x9e, 0x99,0xee, - 0x99,0xec, 0x99,0xe5, 0x99,0xe4, 0x99,0xf0, 0x99,0xe3, 0x99,0xea, 0x99,0xe9, - 0x99,0xe7, 0x9a,0xb9, 0x9a,0xbf, 0x9a,0xb4, 0x9a,0xbb, 0x9a,0xf6, 0x9a,0xfa, - 0x9a,0xf9, 0x9a,0xf7, 0x9b,0x33, 0x9b,0x80, 0x9b,0x85, 0x9b,0x87, 0x9b,0x7c, - 0x9b,0x7e, 0x9b,0x7b, 0x9b,0x82, 0x9b,0x93, 0x9b,0x92, 0x9b,0x90, 0x9b,0x7a, - 0x9b,0x95, 0x9b,0x7d, 0x9b,0x88, 0x9d,0x25, 0x9d,0x17, 0x9d,0x20, 0x9d,0x1e, - 0x9d,0x14, 0x9d,0x29, 0x9d,0x1d, 0x9d,0x18, 0x9d,0x22, 0x9d,0x10, 0x9d,0x19, - 0x9d,0x1f, 0x9e,0x88, 0x9e,0x86, 0x9e,0x87, 0x9e,0xae, 0x9e,0xad, 0x9e,0xd5, - 0x9e,0xd6, 0x9e,0xfa, 0x9f,0x12, 0x9f,0x3d, 0x51,0x26, 0x51,0x25, 0x51,0x22, - 0x51,0x24, 0x51,0x20, 0x51,0x29, 0x52,0xf4, 0x56,0x93, 0x56,0x8c, 0x56,0x8d, - 0x56,0x86, 0x56,0x84, 0x56,0x83, 0x56,0x7e, 0x56,0x82, 0x56,0x7f, 0x56,0x81, - 0x58,0xd6, 0x58,0xd4, 0x58,0xcf, 0x58,0xd2, 0x5b,0x2d, 0x5b,0x25, 0x5b,0x32, - 0x5b,0x23, 0x5b,0x2c, 0x5b,0x27, 0x5b,0x26, 0x5b,0x2f, 0x5b,0x2e, 0x5b,0x7b, - 0x5b,0xf1, 0x5b,0xf2, 0x5d,0xb7, 0x5e,0x6c, 0x5e,0x6a, 0x5f,0xbe, 0x5f,0xbb, - 0x61,0xc3, 0x61,0xb5, 0x61,0xbc, 0x61,0xe7, 0x61,0xe0, 0x61,0xe5, 0x61,0xe4, - 0x61,0xe8, 0x61,0xde, 0x64,0xef, 0x64,0xe9, 0x64,0xe3, 0x64,0xeb, 0x64,0xe4, - 0x64,0xe8, 0x65,0x81, 0x65,0x80, 0x65,0xb6, 0x65,0xda, 0x66,0xd2, 0x6a,0x8d, - 0x6a,0x96, 0x6a,0x81, 0x6a,0xa5, 0x6a,0x89, 0x6a,0x9f, 0x6a,0x9b, 0x6a,0xa1, - 0x6a,0x9e, 0x6a,0x87, 0x6a,0x93, 0x6a,0x8e, 0x6a,0x95, 0x6a,0x83, 0x6a,0xa8, - 0x6a,0xa4, 0x6a,0x91, 0x6a,0x7f, 0x6a,0xa6, 0x6a,0x9a, 0x6a,0x85, 0x6a,0x8c, - 0x6a,0x92, 0x6b,0x5b, 0x6b,0xad, 0x6c,0x09, 0x6f,0xcc, 0x6f,0xa9, 0x6f,0xf4, - 0x6f,0xd4, 0x6f,0xe3, 0x6f,0xdc, 0x6f,0xed, 0x6f,0xe7, 0x6f,0xe6, 0x6f,0xde, - 0x6f,0xf2, 0x6f,0xdd, 0x6f,0xe2, 0x6f,0xe8, 0x71,0xe1, 0x71,0xf1, 0x71,0xe8, - 0x71,0xf2, 0x71,0xe4, 0x71,0xf0, 0x71,0xe2, 0x73,0x73, 0x73,0x6e, 0x73,0x6f, - 0x74,0x97, 0x74,0xb2, 0x74,0xab, 0x74,0x90, 0x74,0xaa, 0x74,0xad, 0x74,0xb1, - 0x74,0xa5, 0x74,0xaf, 0x75,0x10, 0x75,0x11, 0x75,0x12, 0x75,0x0f, 0x75,0x84, - 0x76,0x43, 0x76,0x48, 0x76,0x49, 0x76,0x47, 0x76,0xa4, 0x76,0xe9, 0x77,0xb5, - 0x77,0xab, 0x77,0xb2, 0x77,0xb7, 0x77,0xb6, 0x77,0xb4, 0x77,0xb1, 0x77,0xa8, - 0x77,0xf0, 0x78,0xf3, 0x78,0xfd, 0x79,0x02, 0x78,0xfb, 0x78,0xfc, 0x78,0xf2, - 0x79,0x05, 0x78,0xf9, 0x78,0xfe, 0x79,0x04, 0x79,0xab, 0x79,0xa8, 0x7a,0x5c, - 0x7a,0x5b, 0x7a,0x56, 0x7a,0x58, 0x7a,0x54, 0x7a,0x5a, 0x7a,0xbe, 0x7a,0xc0, - 0x7a,0xc1, 0x7c,0x05, 0x7c,0x0f, 0x7b,0xf2, 0x7c,0x00, 0x7b,0xff, 0x7b,0xfb, - 0x7c,0x0e, 0x7b,0xf4, 0x7c,0x0b, 0x7b,0xf3, 0x7c,0x02, 0x7c,0x09, 0x7c,0x03, - 0x7c,0x01, 0x7b,0xf8, 0x7b,0xfd, 0x7c,0x06, 0x7b,0xf0, 0x7b,0xf1, 0x7c,0x10, - 0x7c,0x0a, 0x7c,0xe8, 0x7e,0x2d, 0x7e,0x3c, 0x7e,0x42, 0x7e,0x33, 0x98,0x48, - 0x7e,0x38, 0x7e,0x2a, 0x7e,0x49, 0x7e,0x40, 0x7e,0x47, 0x7e,0x29, 0x7e,0x4c, - 0x7e,0x30, 0x7e,0x3b, 0x7e,0x36, 0x7e,0x44, 0x7e,0x3a, 0x7f,0x45, 0x7f,0x7f, - 0x7f,0x7e, 0x7f,0x7d, 0x7f,0xf4, 0x7f,0xf2, 0x80,0x2c, 0x81,0xbb, 0x81,0xc4, - 0x81,0xcc, 0x81,0xca, 0x81,0xc5, 0x81,0xc7, 0x81,0xbc, 0x81,0xe9, 0x82,0x5b, - 0x82,0x5a, 0x82,0x5c, 0x85,0x83, 0x85,0x80, 0x85,0x8f, 0x85,0xa7, 0x85,0x95, - 0x85,0xa0, 0x85,0x8b, 0x85,0xa3, 0x85,0x7b, 0x85,0xa4, 0x85,0x9a, 0x85,0x9e, - 0x85,0x77, 0x85,0x7c, 0x85,0x89, 0x85,0xa1, 0x85,0x7a, 0x85,0x78, 0x85,0x57, - 0x85,0x8e, 0x85,0x96, 0x85,0x86, 0x85,0x8d, 0x85,0x99, 0x85,0x9d, 0x85,0x81, - 0x85,0xa2, 0x85,0x82, 0x85,0x88, 0x85,0x85, 0x85,0x79, 0x85,0x76, 0x85,0x98, - 0x85,0x90, 0x85,0x9f, 0x86,0x68, 0x87,0xbe, 0x87,0xaa, 0x87,0xad, 0x87,0xc5, - 0x87,0xb0, 0x87,0xac, 0x87,0xb9, 0x87,0xb5, 0x87,0xbc, 0x87,0xae, 0x87,0xc9, - 0x87,0xc3, 0x87,0xc2, 0x87,0xcc, 0x87,0xb7, 0x87,0xaf, 0x87,0xc4, 0x87,0xca, - 0x87,0xb4, 0x87,0xb6, 0x87,0xbf, 0x87,0xb8, 0x87,0xbd, 0x87,0xde, 0x87,0xb2, - 0x89,0x35, 0x89,0x33, 0x89,0x3c, 0x89,0x3e, 0x89,0x41, 0x89,0x52, 0x89,0x37, - 0x89,0x42, 0x89,0xad, 0x89,0xaf, 0x89,0xae, 0x89,0xf2, 0x89,0xf3, 0x8b,0x1e, - 0x8b,0x18, 0x8b,0x16, 0x8b,0x11, 0x8b,0x05, 0x8b,0x0b, 0x8b,0x22, 0x8b,0x0f, - 0x8b,0x12, 0x8b,0x15, 0x8b,0x07, 0x8b,0x0d, 0x8b,0x08, 0x8b,0x06, 0x8b,0x1c, - 0x8b,0x13, 0x8b,0x1a, 0x8c,0x4f, 0x8c,0x70, 0x8c,0x72, 0x8c,0x71, 0x8c,0x6f, - 0x8c,0x95, 0x8c,0x94, 0x8c,0xf9, 0x8d,0x6f, 0x8e,0x4e, 0x8e,0x4d, 0x8e,0x53, - 0x8e,0x50, 0x8e,0x4c, 0x8e,0x47, 0x8f,0x43, 0x8f,0x40, 0x90,0x85, 0x90,0x7e, - 0x91,0x38, 0x91,0x9a, 0x91,0xa2, 0x91,0x9b, 0x91,0x99, 0x91,0x9f, 0x91,0xa1, - 0x91,0x9d, 0x91,0xa0, 0x93,0xa1, 0x93,0x83, 0x93,0xaf, 0x93,0x64, 0x93,0x56, - 0x93,0x47, 0x93,0x7c, 0x93,0x58, 0x93,0x5c, 0x93,0x76, 0x93,0x49, 0x93,0x50, - 0x93,0x51, 0x93,0x60, 0x93,0x6d, 0x93,0x8f, 0x93,0x4c, 0x93,0x6a, 0x93,0x79, - 0x93,0x57, 0x93,0x55, 0x93,0x52, 0x93,0x4f, 0x93,0x71, 0x93,0x77, 0x93,0x7b, - 0x93,0x61, 0x93,0x5e, 0x93,0x63, 0x93,0x67, 0x93,0x80, 0x93,0x4e, 0x93,0x59, - 0x95,0xc7, 0x95,0xc0, 0x95,0xc9, 0x95,0xc3, 0x95,0xc5, 0x95,0xb7, 0x96,0xae, - 0x96,0xb0, 0x96,0xac, 0x97,0x20, 0x97,0x1f, 0x97,0x18, 0x97,0x1d, 0x97,0x19, - 0x97,0x9a, 0x97,0xa1, 0x97,0x9c, 0x97,0x9e, 0x97,0x9d, 0x97,0xd5, 0x97,0xd4, - 0x97,0xf1, 0x98,0x41, 0x98,0x44, 0x98,0x4a, 0x98,0x49, 0x98,0x45, 0x98,0x43, - 0x99,0x25, 0x99,0x2b, 0x99,0x2c, 0x99,0x2a, 0x99,0x33, 0x99,0x32, 0x99,0x2f, - 0x99,0x2d, 0x99,0x31, 0x99,0x30, 0x99,0x98, 0x99,0xa3, 0x99,0xa1, 0x9a,0x02, - 0x99,0xfa, 0x99,0xf4, 0x99,0xf7, 0x99,0xf9, 0x99,0xf8, 0x99,0xf6, 0x99,0xfb, - 0x99,0xfd, 0x99,0xfe, 0x99,0xfc, 0x9a,0x03, 0x9a,0xbe, 0x9a,0xfe, 0x9a,0xfd, - 0x9b,0x01, 0x9a,0xfc, 0x9b,0x48, 0x9b,0x9a, 0x9b,0xa8, 0x9b,0x9e, 0x9b,0x9b, - 0x9b,0xa6, 0x9b,0xa1, 0x9b,0xa5, 0x9b,0xa4, 0x9b,0x86, 0x9b,0xa2, 0x9b,0xa0, - 0x9b,0xaf, 0x9d,0x33, 0x9d,0x41, 0x9d,0x67, 0x9d,0x36, 0x9d,0x2e, 0x9d,0x2f, - 0x9d,0x31, 0x9d,0x38, 0x9d,0x30, 0x9d,0x45, 0x9d,0x42, 0x9d,0x43, 0x9d,0x3e, - 0x9d,0x37, 0x9d,0x40, 0x9d,0x3d, 0x7f,0xf5, 0x9d,0x2d, 0x9e,0x8a, 0x9e,0x89, - 0x9e,0x8d, 0x9e,0xb0, 0x9e,0xc8, 0x9e,0xda, 0x9e,0xfb, 0x9e,0xff, 0x9f,0x24, - 0x9f,0x23, 0x9f,0x22, 0x9f,0x54, 0x9f,0xa0, 0x51,0x31, 0x51,0x2d, 0x51,0x2e, - 0x56,0x98, 0x56,0x9c, 0x56,0x97, 0x56,0x9a, 0x56,0x9d, 0x56,0x99, 0x59,0x70, - 0x5b,0x3c, 0x5c,0x69, 0x5c,0x6a, 0x5d,0xc0, 0x5e,0x6d, 0x5e,0x6e, 0x61,0xd8, - 0x61,0xdf, 0x61,0xed, 0x61,0xee, 0x61,0xf1, 0x61,0xea, 0x61,0xf0, 0x61,0xeb, - 0x61,0xd6, 0x61,0xe9, 0x64,0xff, 0x65,0x04, 0x64,0xfd, 0x64,0xf8, 0x65,0x01, - 0x65,0x03, 0x64,0xfc, 0x65,0x94, 0x65,0xdb, 0x66,0xda, 0x66,0xdb, 0x66,0xd8, - 0x6a,0xc5, 0x6a,0xb9, 0x6a,0xbd, 0x6a,0xe1, 0x6a,0xc6, 0x6a,0xba, 0x6a,0xb6, - 0x6a,0xb7, 0x6a,0xc7, 0x6a,0xb4, 0x6a,0xad, 0x6b,0x5e, 0x6b,0xc9, 0x6c,0x0b, - 0x70,0x07, 0x70,0x0c, 0x70,0x0d, 0x70,0x01, 0x70,0x05, 0x70,0x14, 0x70,0x0e, - 0x6f,0xff, 0x70,0x00, 0x6f,0xfb, 0x70,0x26, 0x6f,0xfc, 0x6f,0xf7, 0x70,0x0a, - 0x72,0x01, 0x71,0xff, 0x71,0xf9, 0x72,0x03, 0x71,0xfd, 0x73,0x76, 0x74,0xb8, - 0x74,0xc0, 0x74,0xb5, 0x74,0xc1, 0x74,0xbe, 0x74,0xb6, 0x74,0xbb, 0x74,0xc2, - 0x75,0x14, 0x75,0x13, 0x76,0x5c, 0x76,0x64, 0x76,0x59, 0x76,0x50, 0x76,0x53, - 0x76,0x57, 0x76,0x5a, 0x76,0xa6, 0x76,0xbd, 0x76,0xec, 0x77,0xc2, 0x77,0xba, - 0x78,0xff, 0x79,0x0c, 0x79,0x13, 0x79,0x14, 0x79,0x09, 0x79,0x10, 0x79,0x12, - 0x79,0x11, 0x79,0xad, 0x79,0xac, 0x7a,0x5f, 0x7c,0x1c, 0x7c,0x29, 0x7c,0x19, - 0x7c,0x20, 0x7c,0x1f, 0x7c,0x2d, 0x7c,0x1d, 0x7c,0x26, 0x7c,0x28, 0x7c,0x22, - 0x7c,0x25, 0x7c,0x30, 0x7e,0x5c, 0x7e,0x50, 0x7e,0x56, 0x7e,0x63, 0x7e,0x58, - 0x7e,0x62, 0x7e,0x5f, 0x7e,0x51, 0x7e,0x60, 0x7e,0x57, 0x7e,0x53, 0x7f,0xb5, - 0x7f,0xb3, 0x7f,0xf7, 0x7f,0xf8, 0x80,0x75, 0x81,0xd1, 0x81,0xd2, 0x81,0xd0, - 0x82,0x5f, 0x82,0x5e, 0x85,0xb4, 0x85,0xc6, 0x85,0xc0, 0x85,0xc3, 0x85,0xc2, - 0x85,0xb3, 0x85,0xb5, 0x85,0xbd, 0x85,0xc7, 0x85,0xc4, 0x85,0xbf, 0x85,0xcb, - 0x85,0xce, 0x85,0xc8, 0x85,0xc5, 0x85,0xb1, 0x85,0xb6, 0x85,0xd2, 0x86,0x24, - 0x85,0xb8, 0x85,0xb7, 0x85,0xbe, 0x86,0x69, 0x87,0xe7, 0x87,0xe6, 0x87,0xe2, - 0x87,0xdb, 0x87,0xeb, 0x87,0xea, 0x87,0xe5, 0x87,0xdf, 0x87,0xf3, 0x87,0xe4, - 0x87,0xd4, 0x87,0xdc, 0x87,0xd3, 0x87,0xed, 0x87,0xd8, 0x87,0xe3, 0x87,0xa4, - 0x87,0xd7, 0x87,0xd9, 0x88,0x01, 0x87,0xf4, 0x87,0xe8, 0x87,0xdd, 0x89,0x53, - 0x89,0x4b, 0x89,0x4f, 0x89,0x4c, 0x89,0x46, 0x89,0x50, 0x89,0x51, 0x89,0x49, - 0x8b,0x2a, 0x8b,0x27, 0x8b,0x23, 0x8b,0x33, 0x8b,0x30, 0x8b,0x35, 0x8b,0x47, - 0x8b,0x2f, 0x8b,0x3c, 0x8b,0x3e, 0x8b,0x31, 0x8b,0x25, 0x8b,0x37, 0x8b,0x26, - 0x8b,0x36, 0x8b,0x2e, 0x8b,0x24, 0x8b,0x3b, 0x8b,0x3d, 0x8b,0x3a, 0x8c,0x42, - 0x8c,0x75, 0x8c,0x99, 0x8c,0x98, 0x8c,0x97, 0x8c,0xfe, 0x8d,0x04, 0x8d,0x02, - 0x8d,0x00, 0x8e,0x5c, 0x8e,0x62, 0x8e,0x60, 0x8e,0x57, 0x8e,0x56, 0x8e,0x5e, - 0x8e,0x65, 0x8e,0x67, 0x8e,0x5b, 0x8e,0x5a, 0x8e,0x61, 0x8e,0x5d, 0x8e,0x69, - 0x8e,0x54, 0x8f,0x46, 0x8f,0x47, 0x8f,0x48, 0x8f,0x4b, 0x91,0x28, 0x91,0x3a, - 0x91,0x3b, 0x91,0x3e, 0x91,0xa8, 0x91,0xa5, 0x91,0xa7, 0x91,0xaf, 0x91,0xaa, - 0x93,0xb5, 0x93,0x8c, 0x93,0x92, 0x93,0xb7, 0x93,0x9b, 0x93,0x9d, 0x93,0x89, - 0x93,0xa7, 0x93,0x8e, 0x93,0xaa, 0x93,0x9e, 0x93,0xa6, 0x93,0x95, 0x93,0x88, - 0x93,0x99, 0x93,0x9f, 0x93,0x8d, 0x93,0xb1, 0x93,0x91, 0x93,0xb2, 0x93,0xa4, - 0x93,0xa8, 0x93,0xb4, 0x93,0xa3, 0x93,0xa5, 0x95,0xd2, 0x95,0xd3, 0x95,0xd1, - 0x96,0xb3, 0x96,0xd7, 0x96,0xda, 0x5d,0xc2, 0x96,0xdf, 0x96,0xd8, 0x96,0xdd, - 0x97,0x23, 0x97,0x22, 0x97,0x25, 0x97,0xac, 0x97,0xae, 0x97,0xa8, 0x97,0xab, - 0x97,0xa4, 0x97,0xaa, 0x97,0xa2, 0x97,0xa5, 0x97,0xd7, 0x97,0xd9, 0x97,0xd6, - 0x97,0xd8, 0x97,0xfa, 0x98,0x50, 0x98,0x51, 0x98,0x52, 0x98,0xb8, 0x99,0x41, - 0x99,0x3c, 0x99,0x3a, 0x9a,0x0f, 0x9a,0x0b, 0x9a,0x09, 0x9a,0x0d, 0x9a,0x04, - 0x9a,0x11, 0x9a,0x0a, 0x9a,0x05, 0x9a,0x07, 0x9a,0x06, 0x9a,0xc0, 0x9a,0xdc, - 0x9b,0x08, 0x9b,0x04, 0x9b,0x05, 0x9b,0x29, 0x9b,0x35, 0x9b,0x4a, 0x9b,0x4c, - 0x9b,0x4b, 0x9b,0xc7, 0x9b,0xc6, 0x9b,0xc3, 0x9b,0xbf, 0x9b,0xc1, 0x9b,0xb5, - 0x9b,0xb8, 0x9b,0xd3, 0x9b,0xb6, 0x9b,0xc4, 0x9b,0xb9, 0x9b,0xbd, 0x9d,0x5c, - 0x9d,0x53, 0x9d,0x4f, 0x9d,0x4a, 0x9d,0x5b, 0x9d,0x4b, 0x9d,0x59, 0x9d,0x56, - 0x9d,0x4c, 0x9d,0x57, 0x9d,0x52, 0x9d,0x54, 0x9d,0x5f, 0x9d,0x58, 0x9d,0x5a, - 0x9e,0x8e, 0x9e,0x8c, 0x9e,0xdf, 0x9f,0x01, 0x9f,0x00, 0x9f,0x16, 0x9f,0x25, - 0x9f,0x2b, 0x9f,0x2a, 0x9f,0x29, 0x9f,0x28, 0x9f,0x4c, 0x9f,0x55, 0x51,0x34, - 0x51,0x35, 0x52,0x96, 0x52,0xf7, 0x53,0xb4, 0x56,0xab, 0x56,0xad, 0x56,0xa6, - 0x56,0xa7, 0x56,0xaa, 0x56,0xac, 0x58,0xda, 0x58,0xdd, 0x58,0xdb, 0x59,0x12, - 0x5b,0x3d, 0x5b,0x3e, 0x5b,0x3f, 0x5d,0xc3, 0x5e,0x70, 0x5f,0xbf, 0x61,0xfb, - 0x65,0x07, 0x65,0x10, 0x65,0x0d, 0x65,0x09, 0x65,0x0c, 0x65,0x0e, 0x65,0x84, - 0x65,0xde, 0x65,0xdd, 0x66,0xde, 0x6a,0xe7, 0x6a,0xe0, 0x6a,0xcc, 0x6a,0xd1, - 0x6a,0xd9, 0x6a,0xcb, 0x6a,0xdf, 0x6a,0xdc, 0x6a,0xd0, 0x6a,0xeb, 0x6a,0xcf, - 0x6a,0xcd, 0x6a,0xde, 0x6b,0x60, 0x6b,0xb0, 0x6c,0x0c, 0x70,0x19, 0x70,0x27, - 0x70,0x20, 0x70,0x16, 0x70,0x2b, 0x70,0x21, 0x70,0x22, 0x70,0x23, 0x70,0x29, - 0x70,0x17, 0x70,0x24, 0x70,0x1c, 0x70,0x2a, 0x72,0x0c, 0x72,0x0a, 0x72,0x07, - 0x72,0x02, 0x72,0x05, 0x72,0xa5, 0x72,0xa6, 0x72,0xa4, 0x72,0xa3, 0x72,0xa1, - 0x74,0xcb, 0x74,0xc5, 0x74,0xb7, 0x74,0xc3, 0x75,0x16, 0x76,0x60, 0x77,0xc9, - 0x77,0xca, 0x77,0xc4, 0x77,0xf1, 0x79,0x1d, 0x79,0x1b, 0x79,0x21, 0x79,0x1c, - 0x79,0x17, 0x79,0x1e, 0x79,0xb0, 0x7a,0x67, 0x7a,0x68, 0x7c,0x33, 0x7c,0x3c, - 0x7c,0x39, 0x7c,0x2c, 0x7c,0x3b, 0x7c,0xec, 0x7c,0xea, 0x7e,0x76, 0x7e,0x75, - 0x7e,0x78, 0x7e,0x70, 0x7e,0x77, 0x7e,0x6f, 0x7e,0x7a, 0x7e,0x72, 0x7e,0x74, - 0x7e,0x68, 0x7f,0x4b, 0x7f,0x4a, 0x7f,0x83, 0x7f,0x86, 0x7f,0xb7, 0x7f,0xfd, - 0x7f,0xfe, 0x80,0x78, 0x81,0xd7, 0x81,0xd5, 0x82,0x64, 0x82,0x61, 0x82,0x63, - 0x85,0xeb, 0x85,0xf1, 0x85,0xed, 0x85,0xd9, 0x85,0xe1, 0x85,0xe8, 0x85,0xda, - 0x85,0xd7, 0x85,0xec, 0x85,0xf2, 0x85,0xf8, 0x85,0xd8, 0x85,0xdf, 0x85,0xe3, - 0x85,0xdc, 0x85,0xd1, 0x85,0xf0, 0x85,0xe6, 0x85,0xef, 0x85,0xde, 0x85,0xe2, - 0x88,0x00, 0x87,0xfa, 0x88,0x03, 0x87,0xf6, 0x87,0xf7, 0x88,0x09, 0x88,0x0c, - 0x88,0x0b, 0x88,0x06, 0x87,0xfc, 0x88,0x08, 0x87,0xff, 0x88,0x0a, 0x88,0x02, - 0x89,0x62, 0x89,0x5a, 0x89,0x5b, 0x89,0x57, 0x89,0x61, 0x89,0x5c, 0x89,0x58, - 0x89,0x5d, 0x89,0x59, 0x89,0x88, 0x89,0xb7, 0x89,0xb6, 0x89,0xf6, 0x8b,0x50, - 0x8b,0x48, 0x8b,0x4a, 0x8b,0x40, 0x8b,0x53, 0x8b,0x56, 0x8b,0x54, 0x8b,0x4b, - 0x8b,0x55, 0x8b,0x51, 0x8b,0x42, 0x8b,0x52, 0x8b,0x57, 0x8c,0x43, 0x8c,0x77, - 0x8c,0x76, 0x8c,0x9a, 0x8d,0x06, 0x8d,0x07, 0x8d,0x09, 0x8d,0xac, 0x8d,0xaa, - 0x8d,0xad, 0x8d,0xab, 0x8e,0x6d, 0x8e,0x78, 0x8e,0x73, 0x8e,0x6a, 0x8e,0x6f, - 0x8e,0x7b, 0x8e,0xc2, 0x8f,0x52, 0x8f,0x51, 0x8f,0x4f, 0x8f,0x50, 0x8f,0x53, - 0x8f,0xb4, 0x91,0x40, 0x91,0x3f, 0x91,0xb0, 0x91,0xad, 0x93,0xde, 0x93,0xc7, - 0x93,0xcf, 0x93,0xc2, 0x93,0xda, 0x93,0xd0, 0x93,0xf9, 0x93,0xec, 0x93,0xcc, - 0x93,0xd9, 0x93,0xa9, 0x93,0xe6, 0x93,0xca, 0x93,0xd4, 0x93,0xee, 0x93,0xe3, - 0x93,0xd5, 0x93,0xc4, 0x93,0xce, 0x93,0xc0, 0x93,0xd2, 0x93,0xe7, 0x95,0x7d, - 0x95,0xda, 0x95,0xdb, 0x96,0xe1, 0x97,0x29, 0x97,0x2b, 0x97,0x2c, 0x97,0x28, - 0x97,0x26, 0x97,0xb3, 0x97,0xb7, 0x97,0xb6, 0x97,0xdd, 0x97,0xde, 0x97,0xdf, - 0x98,0x5c, 0x98,0x59, 0x98,0x5d, 0x98,0x57, 0x98,0xbf, 0x98,0xbd, 0x98,0xbb, - 0x98,0xbe, 0x99,0x48, 0x99,0x47, 0x99,0x43, 0x99,0xa6, 0x99,0xa7, 0x9a,0x1a, - 0x9a,0x15, 0x9a,0x25, 0x9a,0x1d, 0x9a,0x24, 0x9a,0x1b, 0x9a,0x22, 0x9a,0x20, - 0x9a,0x27, 0x9a,0x23, 0x9a,0x1e, 0x9a,0x1c, 0x9a,0x14, 0x9a,0xc2, 0x9b,0x0b, - 0x9b,0x0a, 0x9b,0x0e, 0x9b,0x0c, 0x9b,0x37, 0x9b,0xea, 0x9b,0xeb, 0x9b,0xe0, - 0x9b,0xde, 0x9b,0xe4, 0x9b,0xe6, 0x9b,0xe2, 0x9b,0xf0, 0x9b,0xd4, 0x9b,0xd7, - 0x9b,0xec, 0x9b,0xdc, 0x9b,0xd9, 0x9b,0xe5, 0x9b,0xd5, 0x9b,0xe1, 0x9b,0xda, - 0x9d,0x77, 0x9d,0x81, 0x9d,0x8a, 0x9d,0x84, 0x9d,0x88, 0x9d,0x71, 0x9d,0x80, - 0x9d,0x78, 0x9d,0x86, 0x9d,0x8b, 0x9d,0x8c, 0x9d,0x7d, 0x9d,0x6b, 0x9d,0x74, - 0x9d,0x75, 0x9d,0x70, 0x9d,0x69, 0x9d,0x85, 0x9d,0x73, 0x9d,0x7b, 0x9d,0x82, - 0x9d,0x6f, 0x9d,0x79, 0x9d,0x7f, 0x9d,0x87, 0x9d,0x68, 0x9e,0x94, 0x9e,0x91, - 0x9e,0xc0, 0x9e,0xfc, 0x9f,0x2d, 0x9f,0x40, 0x9f,0x41, 0x9f,0x4d, 0x9f,0x56, - 0x9f,0x57, 0x9f,0x58, 0x53,0x37, 0x56,0xb2, 0x56,0xb5, 0x56,0xb3, 0x58,0xe3, - 0x5b,0x45, 0x5d,0xc6, 0x5d,0xc7, 0x5e,0xee, 0x5e,0xef, 0x5f,0xc0, 0x5f,0xc1, - 0x61,0xf9, 0x65,0x17, 0x65,0x16, 0x65,0x15, 0x65,0x13, 0x65,0xdf, 0x66,0xe8, - 0x66,0xe3, 0x66,0xe4, 0x6a,0xf3, 0x6a,0xf0, 0x6a,0xea, 0x6a,0xe8, 0x6a,0xf9, - 0x6a,0xf1, 0x6a,0xee, 0x6a,0xef, 0x70,0x3c, 0x70,0x35, 0x70,0x2f, 0x70,0x37, - 0x70,0x34, 0x70,0x31, 0x70,0x42, 0x70,0x38, 0x70,0x3f, 0x70,0x3a, 0x70,0x39, - 0x70,0x40, 0x70,0x3b, 0x70,0x33, 0x70,0x41, 0x72,0x13, 0x72,0x14, 0x72,0xa8, - 0x73,0x7d, 0x73,0x7c, 0x74,0xba, 0x76,0xab, 0x76,0xaa, 0x76,0xbe, 0x76,0xed, - 0x77,0xcc, 0x77,0xce, 0x77,0xcf, 0x77,0xcd, 0x77,0xf2, 0x79,0x25, 0x79,0x23, - 0x79,0x27, 0x79,0x28, 0x79,0x24, 0x79,0x29, 0x79,0xb2, 0x7a,0x6e, 0x7a,0x6c, - 0x7a,0x6d, 0x7a,0xf7, 0x7c,0x49, 0x7c,0x48, 0x7c,0x4a, 0x7c,0x47, 0x7c,0x45, - 0x7c,0xee, 0x7e,0x7b, 0x7e,0x7e, 0x7e,0x81, 0x7e,0x80, 0x7f,0xba, 0x7f,0xff, - 0x80,0x79, 0x81,0xdb, 0x81,0xd9, 0x82,0x0b, 0x82,0x68, 0x82,0x69, 0x86,0x22, - 0x85,0xff, 0x86,0x01, 0x85,0xfe, 0x86,0x1b, 0x86,0x00, 0x85,0xf6, 0x86,0x04, - 0x86,0x09, 0x86,0x05, 0x86,0x0c, 0x85,0xfd, 0x88,0x19, 0x88,0x10, 0x88,0x11, - 0x88,0x17, 0x88,0x13, 0x88,0x16, 0x89,0x63, 0x89,0x66, 0x89,0xb9, 0x89,0xf7, - 0x8b,0x60, 0x8b,0x6a, 0x8b,0x5d, 0x8b,0x68, 0x8b,0x63, 0x8b,0x65, 0x8b,0x67, - 0x8b,0x6d, 0x8d,0xae, 0x8e,0x86, 0x8e,0x88, 0x8e,0x84, 0x8f,0x59, 0x8f,0x56, - 0x8f,0x57, 0x8f,0x55, 0x8f,0x58, 0x8f,0x5a, 0x90,0x8d, 0x91,0x43, 0x91,0x41, - 0x91,0xb7, 0x91,0xb5, 0x91,0xb2, 0x91,0xb3, 0x94,0x0b, 0x94,0x13, 0x93,0xfb, - 0x94,0x20, 0x94,0x0f, 0x94,0x14, 0x93,0xfe, 0x94,0x15, 0x94,0x10, 0x94,0x28, - 0x94,0x19, 0x94,0x0d, 0x93,0xf5, 0x94,0x00, 0x93,0xf7, 0x94,0x07, 0x94,0x0e, - 0x94,0x16, 0x94,0x12, 0x93,0xfa, 0x94,0x09, 0x93,0xf8, 0x94,0x0a, 0x93,0xff, - 0x93,0xfc, 0x94,0x0c, 0x93,0xf6, 0x94,0x11, 0x94,0x06, 0x95,0xde, 0x95,0xe0, - 0x95,0xdf, 0x97,0x2e, 0x97,0x2f, 0x97,0xb9, 0x97,0xbb, 0x97,0xfd, 0x97,0xfe, - 0x98,0x60, 0x98,0x62, 0x98,0x63, 0x98,0x5f, 0x98,0xc1, 0x98,0xc2, 0x99,0x50, - 0x99,0x4e, 0x99,0x59, 0x99,0x4c, 0x99,0x4b, 0x99,0x53, 0x9a,0x32, 0x9a,0x34, - 0x9a,0x31, 0x9a,0x2c, 0x9a,0x2a, 0x9a,0x36, 0x9a,0x29, 0x9a,0x2e, 0x9a,0x38, - 0x9a,0x2d, 0x9a,0xc7, 0x9a,0xca, 0x9a,0xc6, 0x9b,0x10, 0x9b,0x12, 0x9b,0x11, - 0x9c,0x0b, 0x9c,0x08, 0x9b,0xf7, 0x9c,0x05, 0x9c,0x12, 0x9b,0xf8, 0x9c,0x40, - 0x9c,0x07, 0x9c,0x0e, 0x9c,0x06, 0x9c,0x17, 0x9c,0x14, 0x9c,0x09, 0x9d,0x9f, - 0x9d,0x99, 0x9d,0xa4, 0x9d,0x9d, 0x9d,0x92, 0x9d,0x98, 0x9d,0x90, 0x9d,0x9b, - 0x9d,0xa0, 0x9d,0x94, 0x9d,0x9c, 0x9d,0xaa, 0x9d,0x97, 0x9d,0xa1, 0x9d,0x9a, - 0x9d,0xa2, 0x9d,0xa8, 0x9d,0x9e, 0x9d,0xa3, 0x9d,0xbf, 0x9d,0xa9, 0x9d,0x96, - 0x9d,0xa6, 0x9d,0xa7, 0x9e,0x99, 0x9e,0x9b, 0x9e,0x9a, 0x9e,0xe5, 0x9e,0xe4, - 0x9e,0xe7, 0x9e,0xe6, 0x9f,0x30, 0x9f,0x2e, 0x9f,0x5b, 0x9f,0x60, 0x9f,0x5e, - 0x9f,0x5d, 0x9f,0x59, 0x9f,0x91, 0x51,0x3a, 0x51,0x39, 0x52,0x98, 0x52,0x97, - 0x56,0xc3, 0x56,0xbd, 0x56,0xbe, 0x5b,0x48, 0x5b,0x47, 0x5d,0xcb, 0x5d,0xcf, - 0x5e,0xf1, 0x61,0xfd, 0x65,0x1b, 0x6b,0x02, 0x6a,0xfc, 0x6b,0x03, 0x6a,0xf8, - 0x6b,0x00, 0x70,0x43, 0x70,0x44, 0x70,0x4a, 0x70,0x48, 0x70,0x49, 0x70,0x45, - 0x70,0x46, 0x72,0x1d, 0x72,0x1a, 0x72,0x19, 0x73,0x7e, 0x75,0x17, 0x76,0x6a, - 0x77,0xd0, 0x79,0x2d, 0x79,0x31, 0x79,0x2f, 0x7c,0x54, 0x7c,0x53, 0x7c,0xf2, - 0x7e,0x8a, 0x7e,0x87, 0x7e,0x88, 0x7e,0x8b, 0x7e,0x86, 0x7e,0x8d, 0x7f,0x4d, - 0x7f,0xbb, 0x80,0x30, 0x81,0xdd, 0x86,0x18, 0x86,0x2a, 0x86,0x26, 0x86,0x1f, - 0x86,0x23, 0x86,0x1c, 0x86,0x19, 0x86,0x27, 0x86,0x2e, 0x86,0x21, 0x86,0x20, - 0x86,0x29, 0x86,0x1e, 0x86,0x25, 0x88,0x29, 0x88,0x1d, 0x88,0x1b, 0x88,0x20, - 0x88,0x24, 0x88,0x1c, 0x88,0x2b, 0x88,0x4a, 0x89,0x6d, 0x89,0x69, 0x89,0x6e, - 0x89,0x6b, 0x89,0xfa, 0x8b,0x79, 0x8b,0x78, 0x8b,0x45, 0x8b,0x7a, 0x8b,0x7b, - 0x8d,0x10, 0x8d,0x14, 0x8d,0xaf, 0x8e,0x8e, 0x8e,0x8c, 0x8f,0x5e, 0x8f,0x5b, - 0x8f,0x5d, 0x91,0x46, 0x91,0x44, 0x91,0x45, 0x91,0xb9, 0x94,0x3f, 0x94,0x3b, - 0x94,0x36, 0x94,0x29, 0x94,0x3d, 0x94,0x3c, 0x94,0x30, 0x94,0x39, 0x94,0x2a, - 0x94,0x37, 0x94,0x2c, 0x94,0x40, 0x94,0x31, 0x95,0xe5, 0x95,0xe4, 0x95,0xe3, - 0x97,0x35, 0x97,0x3a, 0x97,0xbf, 0x97,0xe1, 0x98,0x64, 0x98,0xc9, 0x98,0xc6, - 0x98,0xc0, 0x99,0x58, 0x99,0x56, 0x9a,0x39, 0x9a,0x3d, 0x9a,0x46, 0x9a,0x44, - 0x9a,0x42, 0x9a,0x41, 0x9a,0x3a, 0x9a,0x3f, 0x9a,0xcd, 0x9b,0x15, 0x9b,0x17, - 0x9b,0x18, 0x9b,0x16, 0x9b,0x3a, 0x9b,0x52, 0x9c,0x2b, 0x9c,0x1d, 0x9c,0x1c, - 0x9c,0x2c, 0x9c,0x23, 0x9c,0x28, 0x9c,0x29, 0x9c,0x24, 0x9c,0x21, 0x9d,0xb7, - 0x9d,0xb6, 0x9d,0xbc, 0x9d,0xc1, 0x9d,0xc7, 0x9d,0xca, 0x9d,0xcf, 0x9d,0xbe, - 0x9d,0xc5, 0x9d,0xc3, 0x9d,0xbb, 0x9d,0xb5, 0x9d,0xce, 0x9d,0xb9, 0x9d,0xba, - 0x9d,0xac, 0x9d,0xc8, 0x9d,0xb1, 0x9d,0xad, 0x9d,0xcc, 0x9d,0xb3, 0x9d,0xcd, - 0x9d,0xb2, 0x9e,0x7a, 0x9e,0x9c, 0x9e,0xeb, 0x9e,0xee, 0x9e,0xed, 0x9f,0x1b, - 0x9f,0x18, 0x9f,0x1a, 0x9f,0x31, 0x9f,0x4e, 0x9f,0x65, 0x9f,0x64, 0x9f,0x92, - 0x4e,0xb9, 0x56,0xc6, 0x56,0xc5, 0x56,0xcb, 0x59,0x71, 0x5b,0x4b, 0x5b,0x4c, - 0x5d,0xd5, 0x5d,0xd1, 0x5e,0xf2, 0x65,0x21, 0x65,0x20, 0x65,0x26, 0x65,0x22, - 0x6b,0x0b, 0x6b,0x08, 0x6b,0x09, 0x6c,0x0d, 0x70,0x55, 0x70,0x56, 0x70,0x57, - 0x70,0x52, 0x72,0x1e, 0x72,0x1f, 0x72,0xa9, 0x73,0x7f, 0x74,0xd8, 0x74,0xd5, - 0x74,0xd9, 0x74,0xd7, 0x76,0x6d, 0x76,0xad, 0x79,0x35, 0x79,0xb4, 0x7a,0x70, - 0x7a,0x71, 0x7c,0x57, 0x7c,0x5c, 0x7c,0x59, 0x7c,0x5b, 0x7c,0x5a, 0x7c,0xf4, - 0x7c,0xf1, 0x7e,0x91, 0x7f,0x4f, 0x7f,0x87, 0x81,0xde, 0x82,0x6b, 0x86,0x34, - 0x86,0x35, 0x86,0x33, 0x86,0x2c, 0x86,0x32, 0x86,0x36, 0x88,0x2c, 0x88,0x28, - 0x88,0x26, 0x88,0x2a, 0x88,0x25, 0x89,0x71, 0x89,0xbf, 0x89,0xbe, 0x89,0xfb, - 0x8b,0x7e, 0x8b,0x84, 0x8b,0x82, 0x8b,0x86, 0x8b,0x85, 0x8b,0x7f, 0x8d,0x15, - 0x8e,0x95, 0x8e,0x94, 0x8e,0x9a, 0x8e,0x92, 0x8e,0x90, 0x8e,0x96, 0x8e,0x97, - 0x8f,0x60, 0x8f,0x62, 0x91,0x47, 0x94,0x4c, 0x94,0x50, 0x94,0x4a, 0x94,0x4b, - 0x94,0x4f, 0x94,0x47, 0x94,0x45, 0x94,0x48, 0x94,0x49, 0x94,0x46, 0x97,0x3f, - 0x97,0xe3, 0x98,0x6a, 0x98,0x69, 0x98,0xcb, 0x99,0x54, 0x99,0x5b, 0x9a,0x4e, - 0x9a,0x53, 0x9a,0x54, 0x9a,0x4c, 0x9a,0x4f, 0x9a,0x48, 0x9a,0x4a, 0x9a,0x49, - 0x9a,0x52, 0x9a,0x50, 0x9a,0xd0, 0x9b,0x19, 0x9b,0x2b, 0x9b,0x3b, 0x9b,0x56, - 0x9b,0x55, 0x9c,0x46, 0x9c,0x48, 0x9c,0x3f, 0x9c,0x44, 0x9c,0x39, 0x9c,0x33, - 0x9c,0x41, 0x9c,0x3c, 0x9c,0x37, 0x9c,0x34, 0x9c,0x32, 0x9c,0x3d, 0x9c,0x36, - 0x9d,0xdb, 0x9d,0xd2, 0x9d,0xde, 0x9d,0xda, 0x9d,0xcb, 0x9d,0xd0, 0x9d,0xdc, - 0x9d,0xd1, 0x9d,0xdf, 0x9d,0xe9, 0x9d,0xd9, 0x9d,0xd8, 0x9d,0xd6, 0x9d,0xf5, - 0x9d,0xd5, 0x9d,0xdd, 0x9e,0xb6, 0x9e,0xf0, 0x9f,0x35, 0x9f,0x33, 0x9f,0x32, - 0x9f,0x42, 0x9f,0x6b, 0x9f,0x95, 0x9f,0xa2, 0x51,0x3d, 0x52,0x99, 0x58,0xe8, - 0x58,0xe7, 0x59,0x72, 0x5b,0x4d, 0x5d,0xd8, 0x88,0x2f, 0x5f,0x4f, 0x62,0x01, - 0x62,0x03, 0x62,0x04, 0x65,0x29, 0x65,0x25, 0x65,0x96, 0x66,0xeb, 0x6b,0x11, - 0x6b,0x12, 0x6b,0x0f, 0x6b,0xca, 0x70,0x5b, 0x70,0x5a, 0x72,0x22, 0x73,0x82, - 0x73,0x81, 0x73,0x83, 0x76,0x70, 0x77,0xd4, 0x7c,0x67, 0x7c,0x66, 0x7e,0x95, - 0x82,0x6c, 0x86,0x3a, 0x86,0x40, 0x86,0x39, 0x86,0x3c, 0x86,0x31, 0x86,0x3b, - 0x86,0x3e, 0x88,0x30, 0x88,0x32, 0x88,0x2e, 0x88,0x33, 0x89,0x76, 0x89,0x74, - 0x89,0x73, 0x89,0xfe, 0x8b,0x8c, 0x8b,0x8e, 0x8b,0x8b, 0x8b,0x88, 0x8c,0x45, - 0x8d,0x19, 0x8e,0x98, 0x8f,0x64, 0x8f,0x63, 0x91,0xbc, 0x94,0x62, 0x94,0x55, - 0x94,0x5d, 0x94,0x57, 0x94,0x5e, 0x97,0xc4, 0x97,0xc5, 0x98,0x00, 0x9a,0x56, - 0x9a,0x59, 0x9b,0x1e, 0x9b,0x1f, 0x9b,0x20, 0x9c,0x52, 0x9c,0x58, 0x9c,0x50, - 0x9c,0x4a, 0x9c,0x4d, 0x9c,0x4b, 0x9c,0x55, 0x9c,0x59, 0x9c,0x4c, 0x9c,0x4e, - 0x9d,0xfb, 0x9d,0xf7, 0x9d,0xef, 0x9d,0xe3, 0x9d,0xeb, 0x9d,0xf8, 0x9d,0xe4, - 0x9d,0xf6, 0x9d,0xe1, 0x9d,0xee, 0x9d,0xe6, 0x9d,0xf2, 0x9d,0xf0, 0x9d,0xe2, - 0x9d,0xec, 0x9d,0xf4, 0x9d,0xf3, 0x9d,0xe8, 0x9d,0xed, 0x9e,0xc2, 0x9e,0xd0, - 0x9e,0xf2, 0x9e,0xf3, 0x9f,0x06, 0x9f,0x1c, 0x9f,0x38, 0x9f,0x37, 0x9f,0x36, - 0x9f,0x43, 0x9f,0x4f, 0x9f,0x71, 0x9f,0x70, 0x9f,0x6e, 0x9f,0x6f, 0x56,0xd3, - 0x56,0xcd, 0x5b,0x4e, 0x5c,0x6d, 0x65,0x2d, 0x66,0xed, 0x66,0xee, 0x6b,0x13, - 0x70,0x5f, 0x70,0x61, 0x70,0x5d, 0x70,0x60, 0x72,0x23, 0x74,0xdb, 0x74,0xe5, - 0x77,0xd5, 0x79,0x38, 0x79,0xb7, 0x79,0xb6, 0x7c,0x6a, 0x7e,0x97, 0x7f,0x89, - 0x82,0x6d, 0x86,0x43, 0x88,0x38, 0x88,0x37, 0x88,0x35, 0x88,0x4b, 0x8b,0x94, - 0x8b,0x95, 0x8e,0x9e, 0x8e,0x9f, 0x8e,0xa0, 0x8e,0x9d, 0x91,0xbe, 0x91,0xbd, - 0x91,0xc2, 0x94,0x6b, 0x94,0x68, 0x94,0x69, 0x96,0xe5, 0x97,0x46, 0x97,0x43, - 0x97,0x47, 0x97,0xc7, 0x97,0xe5, 0x9a,0x5e, 0x9a,0xd5, 0x9b,0x59, 0x9c,0x63, - 0x9c,0x67, 0x9c,0x66, 0x9c,0x62, 0x9c,0x5e, 0x9c,0x60, 0x9e,0x02, 0x9d,0xfe, - 0x9e,0x07, 0x9e,0x03, 0x9e,0x06, 0x9e,0x05, 0x9e,0x00, 0x9e,0x01, 0x9e,0x09, - 0x9d,0xff, 0x9d,0xfd, 0x9e,0x04, 0x9e,0xa0, 0x9f,0x1e, 0x9f,0x46, 0x9f,0x74, - 0x9f,0x75, 0x9f,0x76, 0x56,0xd4, 0x65,0x2e, 0x65,0xb8, 0x6b,0x18, 0x6b,0x19, - 0x6b,0x17, 0x6b,0x1a, 0x70,0x62, 0x72,0x26, 0x72,0xaa, 0x77,0xd8, 0x77,0xd9, - 0x79,0x39, 0x7c,0x69, 0x7c,0x6b, 0x7c,0xf6, 0x7e,0x9a, 0x7e,0x98, 0x7e,0x9b, - 0x7e,0x99, 0x81,0xe0, 0x81,0xe1, 0x86,0x46, 0x86,0x47, 0x86,0x48, 0x89,0x79, - 0x89,0x7a, 0x89,0x7c, 0x89,0x7b, 0x89,0xff, 0x8b,0x98, 0x8b,0x99, 0x8e,0xa5, - 0x8e,0xa4, 0x8e,0xa3, 0x94,0x6e, 0x94,0x6d, 0x94,0x6f, 0x94,0x71, 0x94,0x73, - 0x97,0x49, 0x98,0x72, 0x99,0x5f, 0x9c,0x68, 0x9c,0x6e, 0x9c,0x6d, 0x9e,0x0b, - 0x9e,0x0d, 0x9e,0x10, 0x9e,0x0f, 0x9e,0x12, 0x9e,0x11, 0x9e,0xa1, 0x9e,0xf5, - 0x9f,0x09, 0x9f,0x47, 0x9f,0x78, 0x9f,0x7b, 0x9f,0x7a, 0x9f,0x79, 0x57,0x1e, - 0x70,0x66, 0x7c,0x6f, 0x88,0x3c, 0x8d,0xb2, 0x8e,0xa6, 0x91,0xc3, 0x94,0x74, - 0x94,0x78, 0x94,0x76, 0x94,0x75, 0x9a,0x60, 0x9c,0x74, 0x9c,0x73, 0x9c,0x71, - 0x9c,0x75, 0x9e,0x14, 0x9e,0x13, 0x9e,0xf6, 0x9f,0x0a, 0x9f,0xa4, 0x70,0x68, - 0x70,0x65, 0x7c,0xf7, 0x86,0x6a, 0x88,0x3e, 0x88,0x3d, 0x88,0x3f, 0x8b,0x9e, - 0x8c,0x9c, 0x8e,0xa9, 0x8e,0xc9, 0x97,0x4b, 0x98,0x73, 0x98,0x74, 0x98,0xcc, - 0x99,0x61, 0x99,0xab, 0x9a,0x64, 0x9a,0x66, 0x9a,0x67, 0x9b,0x24, 0x9e,0x15, - 0x9e,0x17, 0x9f,0x48, 0x62,0x07, 0x6b,0x1e, 0x72,0x27, 0x86,0x4c, 0x8e,0xa8, - 0x94,0x82, 0x94,0x80, 0x94,0x81, 0x9a,0x69, 0x9a,0x68, 0x9b,0x2e, 0x9e,0x19, - 0x72,0x29, 0x86,0x4b, 0x8b,0x9f, 0x94,0x83, 0x9c,0x79, 0x9e,0xb7, 0x76,0x75, - 0x9a,0x6b, 0x9c,0x7a, 0x9e,0x1d, 0x70,0x69, 0x70,0x6a, 0x9e,0xa4, 0x9f,0x7e, - 0x9f,0x49, 0x9f,0x98, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, - 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, - 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, - 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, - 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, - 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, - 0xff,0xfd, -}; - -/* -const unsigned char gb2uTable[] = -{ - 0x30,0x00, 0x30,0x01, 0x30,0x02, 0x30,0xfb, 0x02,0xc9, 0x02,0xc7, 0x00,0xa8, - 0x30,0x03, 0x30,0x05, 0x20,0x15, 0xff,0x5e, 0x22,0x25, 0x20,0x26, 0x20,0x18, - 0x20,0x19, 0x20,0x1c, 0x20,0x1d, 0x30,0x14, 0x30,0x15, 0x30,0x08, 0x30,0x09, - 0x30,0x0a, 0x30,0x0b, 0x30,0x0c, 0x30,0x0d, 0x30,0x0e, 0x30,0x0f, 0x30,0x16, - 0x30,0x17, 0x30,0x10, 0x30,0x11, 0x00,0xb1, 0x00,0xd7, 0x00,0xf7, 0x22,0x36, - 0x22,0x27, 0x22,0x28, 0x22,0x11, 0x22,0x0f, 0x22,0x2a, 0x22,0x29, 0x22,0x08, - 0x22,0x37, 0x22,0x1a, 0x22,0xa5, 0x22,0x25, 0x22,0x20, 0x23,0x12, 0x22,0x99, - 0x22,0x2b, 0x22,0x2e, 0x22,0x61, 0x22,0x4c, 0x22,0x48, 0x22,0x3d, 0x22,0x1d, - 0x22,0x60, 0x22,0x6e, 0x22,0x6f, 0x22,0x64, 0x22,0x65, 0x22,0x1e, 0x22,0x35, - 0x22,0x34, 0x26,0x42, 0x26,0x40, 0x00,0xb0, 0x20,0x32, 0x20,0x33, 0x21,0x03, - 0xff,0x04, 0x00,0xa4, 0xff,0xe0, 0xff,0xe1, 0x20,0x30, 0x00,0xa7, 0x21,0x16, - 0x26,0x06, 0x26,0x05, 0x25,0xcb, 0x25,0xcf, 0x25,0xce, 0x25,0xc7, 0x25,0xc6, - 0x25,0xa1, 0x25,0xa0, 0x25,0xb3, 0x25,0xb2, 0x20,0x3b, 0x21,0x92, 0x21,0x90, - 0x21,0x91, 0x21,0x93, 0x30,0x13, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, - 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, - 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0x24,0x88, 0x24,0x89, - 0x24,0x8a, 0x24,0x8b, 0x24,0x8c, 0x24,0x8d, 0x24,0x8e, 0x24,0x8f, 0x24,0x90, - 0x24,0x91, 0x24,0x92, 0x24,0x93, 0x24,0x94, 0x24,0x95, 0x24,0x96, 0x24,0x97, - 0x24,0x98, 0x24,0x99, 0x24,0x9a, 0x24,0x9b, 0x24,0x74, 0x24,0x75, 0x24,0x76, - 0x24,0x77, 0x24,0x78, 0x24,0x79, 0x24,0x7a, 0x24,0x7b, 0x24,0x7c, 0x24,0x7d, - 0x24,0x7e, 0x24,0x7f, 0x24,0x80, 0x24,0x81, 0x24,0x82, 0x24,0x83, 0x24,0x84, - 0x24,0x85, 0x24,0x86, 0x24,0x87, 0x24,0x60, 0x24,0x61, 0x24,0x62, 0x24,0x63, - 0x24,0x64, 0x24,0x65, 0x24,0x66, 0x24,0x67, 0x24,0x68, 0x24,0x69, 0xff,0xfd, - 0xff,0xfd, 0x32,0x20, 0x32,0x21, 0x32,0x22, 0x32,0x23, 0x32,0x24, 0x32,0x25, - 0x32,0x26, 0x32,0x27, 0x32,0x28, 0x32,0x29, 0xff,0xfd, 0xff,0xfd, 0x21,0x60, - 0x21,0x61, 0x21,0x62, 0x21,0x63, 0x21,0x64, 0x21,0x65, 0x21,0x66, 0x21,0x67, - 0x21,0x68, 0x21,0x69, 0x21,0x6a, 0x21,0x6b, 0xff,0xfd, 0xff,0xfd, 0xff,0x01, - 0xff,0x02, 0xff,0x03, 0xff,0xe5, 0xff,0x05, 0xff,0x06, 0xff,0x07, 0xff,0x08, - 0xff,0x09, 0xff,0x0a, 0xff,0x0b, 0xff,0x0c, 0xff,0x0d, 0xff,0x0e, 0xff,0x0f, - 0xff,0x10, 0xff,0x11, 0xff,0x12, 0xff,0x13, 0xff,0x14, 0xff,0x15, 0xff,0x16, - 0xff,0x17, 0xff,0x18, 0xff,0x19, 0xff,0x1a, 0xff,0x1b, 0xff,0x1c, 0xff,0x1d, - 0xff,0x1e, 0xff,0x1f, 0xff,0x20, 0xff,0x21, 0xff,0x22, 0xff,0x23, 0xff,0x24, - 0xff,0x25, 0xff,0x26, 0xff,0x27, 0xff,0x28, 0xff,0x29, 0xff,0x2a, 0xff,0x2b, - 0xff,0x2c, 0xff,0x2d, 0xff,0x2e, 0xff,0x2f, 0xff,0x30, 0xff,0x31, 0xff,0x32, - 0xff,0x33, 0xff,0x34, 0xff,0x35, 0xff,0x36, 0xff,0x37, 0xff,0x38, 0xff,0x39, - 0xff,0x3a, 0xff,0x3b, 0xff,0x3c, 0xff,0x3d, 0xff,0x3e, 0xff,0x3f, 0xff,0x40, - 0xff,0x41, 0xff,0x42, 0xff,0x43, 0xff,0x44, 0xff,0x45, 0xff,0x46, 0xff,0x47, - 0xff,0x48, 0xff,0x49, 0xff,0x4a, 0xff,0x4b, 0xff,0x4c, 0xff,0x4d, 0xff,0x4e, - 0xff,0x4f, 0xff,0x50, 0xff,0x51, 0xff,0x52, 0xff,0x53, 0xff,0x54, 0xff,0x55, - 0xff,0x56, 0xff,0x57, 0xff,0x58, 0xff,0x59, 0xff,0x5a, 0xff,0x5b, 0xff,0x5c, - 0xff,0x5d, 0xff,0xe3, 0x30,0x41, 0x30,0x42, 0x30,0x43, 0x30,0x44, 0x30,0x45, - 0x30,0x46, 0x30,0x47, 0x30,0x48, 0x30,0x49, 0x30,0x4a, 0x30,0x4b, 0x30,0x4c, - 0x30,0x4d, 0x30,0x4e, 0x30,0x4f, 0x30,0x50, 0x30,0x51, 0x30,0x52, 0x30,0x53, - 0x30,0x54, 0x30,0x55, 0x30,0x56, 0x30,0x57, 0x30,0x58, 0x30,0x59, 0x30,0x5a, - 0x30,0x5b, 0x30,0x5c, 0x30,0x5d, 0x30,0x5e, 0x30,0x5f, 0x30,0x60, 0x30,0x61, - 0x30,0x62, 0x30,0x63, 0x30,0x64, 0x30,0x65, 0x30,0x66, 0x30,0x67, 0x30,0x68, - 0x30,0x69, 0x30,0x6a, 0x30,0x6b, 0x30,0x6c, 0x30,0x6d, 0x30,0x6e, 0x30,0x6f, - 0x30,0x70, 0x30,0x71, 0x30,0x72, 0x30,0x73, 0x30,0x74, 0x30,0x75, 0x30,0x76, - 0x30,0x77, 0x30,0x78, 0x30,0x79, 0x30,0x7a, 0x30,0x7b, 0x30,0x7c, 0x30,0x7d, - 0x30,0x7e, 0x30,0x7f, 0x30,0x80, 0x30,0x81, 0x30,0x82, 0x30,0x83, 0x30,0x84, - 0x30,0x85, 0x30,0x86, 0x30,0x87, 0x30,0x88, 0x30,0x89, 0x30,0x8a, 0x30,0x8b, - 0x30,0x8c, 0x30,0x8d, 0x30,0x8e, 0x30,0x8f, 0x30,0x90, 0x30,0x91, 0x30,0x92, - 0x30,0x93, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, - 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0x30,0xa1, 0x30,0xa2, - 0x30,0xa3, 0x30,0xa4, 0x30,0xa5, 0x30,0xa6, 0x30,0xa7, 0x30,0xa8, 0x30,0xa9, - 0x30,0xaa, 0x30,0xab, 0x30,0xac, 0x30,0xad, 0x30,0xae, 0x30,0xaf, 0x30,0xb0, - 0x30,0xb1, 0x30,0xb2, 0x30,0xb3, 0x30,0xb4, 0x30,0xb5, 0x30,0xb6, 0x30,0xb7, - 0x30,0xb8, 0x30,0xb9, 0x30,0xba, 0x30,0xbb, 0x30,0xbc, 0x30,0xbd, 0x30,0xbe, - 0x30,0xbf, 0x30,0xc0, 0x30,0xc1, 0x30,0xc2, 0x30,0xc3, 0x30,0xc4, 0x30,0xc5, - 0x30,0xc6, 0x30,0xc7, 0x30,0xc8, 0x30,0xc9, 0x30,0xca, 0x30,0xcb, 0x30,0xcc, - 0x30,0xcd, 0x30,0xce, 0x30,0xcf, 0x30,0xd0, 0x30,0xd1, 0x30,0xd2, 0x30,0xd3, - 0x30,0xd4, 0x30,0xd5, 0x30,0xd6, 0x30,0xd7, 0x30,0xd8, 0x30,0xd9, 0x30,0xda, - 0x30,0xdb, 0x30,0xdc, 0x30,0xdd, 0x30,0xde, 0x30,0xdf, 0x30,0xe0, 0x30,0xe1, - 0x30,0xe2, 0x30,0xe3, 0x30,0xe4, 0x30,0xe5, 0x30,0xe6, 0x30,0xe7, 0x30,0xe8, - 0x30,0xe9, 0x30,0xea, 0x30,0xeb, 0x30,0xec, 0x30,0xed, 0x30,0xee, 0x30,0xef, - 0x30,0xf0, 0x30,0xf1, 0x30,0xf2, 0x30,0xf3, 0x30,0xf4, 0x30,0xf5, 0x30,0xf6, - 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, - 0xff,0xfd, 0x03,0x91, 0x03,0x92, 0x03,0x93, 0x03,0x94, 0x03,0x95, 0x03,0x96, - 0x03,0x97, 0x03,0x98, 0x03,0x99, 0x03,0x9a, 0x03,0x9b, 0x03,0x9c, 0x03,0x9d, - 0x03,0x9e, 0x03,0x9f, 0x03,0xa0, 0x03,0xa1, 0x03,0xa3, 0x03,0xa4, 0x03,0xa5, - 0x03,0xa6, 0x03,0xa7, 0x03,0xa8, 0x03,0xa9, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, - 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0x03,0xb1, 0x03,0xb2, - 0x03,0xb3, 0x03,0xb4, 0x03,0xb5, 0x03,0xb6, 0x03,0xb7, 0x03,0xb8, 0x03,0xb9, - 0x03,0xba, 0x03,0xbb, 0x03,0xbc, 0x03,0xbd, 0x03,0xbe, 0x03,0xbf, 0x03,0xc0, - 0x03,0xc1, 0x03,0xc3, 0x03,0xc4, 0x03,0xc5, 0x03,0xc6, 0x03,0xc7, 0x03,0xc8, - 0x03,0xc9, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, - 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, - 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, - 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, - 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, - 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0x04,0x10, 0x04,0x11, 0x04,0x12, - 0x04,0x13, 0x04,0x14, 0x04,0x15, 0x04,0x01, 0x04,0x16, 0x04,0x17, 0x04,0x18, - 0x04,0x19, 0x04,0x1a, 0x04,0x1b, 0x04,0x1c, 0x04,0x1d, 0x04,0x1e, 0x04,0x1f, - 0x04,0x20, 0x04,0x21, 0x04,0x22, 0x04,0x23, 0x04,0x24, 0x04,0x25, 0x04,0x26, - 0x04,0x27, 0x04,0x28, 0x04,0x29, 0x04,0x2a, 0x04,0x2b, 0x04,0x2c, 0x04,0x2d, - 0x04,0x2e, 0x04,0x2f, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, - 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, - 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0x04,0x30, 0x04,0x31, 0x04,0x32, 0x04,0x33, - 0x04,0x34, 0x04,0x35, 0x04,0x51, 0x04,0x36, 0x04,0x37, 0x04,0x38, 0x04,0x39, - 0x04,0x3a, 0x04,0x3b, 0x04,0x3c, 0x04,0x3d, 0x04,0x3e, 0x04,0x3f, 0x04,0x40, - 0x04,0x41, 0x04,0x42, 0x04,0x43, 0x04,0x44, 0x04,0x45, 0x04,0x46, 0x04,0x47, - 0x04,0x48, 0x04,0x49, 0x04,0x4a, 0x04,0x4b, 0x04,0x4c, 0x04,0x4d, 0x04,0x4e, - 0x04,0x4f, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, - 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, - 0x01,0x01, 0x00,0xe1, 0x01,0xce, 0x00,0xe0, 0x01,0x13, 0x00,0xe9, 0x01,0x1b, - 0x00,0xe8, 0x01,0x2b, 0x00,0xed, 0x01,0xd0, 0x00,0xec, 0x01,0x4d, 0x00,0xf3, - 0x01,0xd2, 0x00,0xf2, 0x01,0x6b, 0x00,0xfa, 0x01,0xd4, 0x00,0xf9, 0x01,0xd6, - 0x01,0xd8, 0x01,0xda, 0x01,0xdc, 0x00,0xfc, 0x00,0xea, 0xff,0xfd, 0xff,0xfd, - 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, - 0xff,0xfd, 0x31,0x05, 0x31,0x06, 0x31,0x07, 0x31,0x08, 0x31,0x09, 0x31,0x0a, - 0x31,0x0b, 0x31,0x0c, 0x31,0x0d, 0x31,0x0e, 0x31,0x0f, 0x31,0x10, 0x31,0x11, - 0x31,0x12, 0x31,0x13, 0x31,0x14, 0x31,0x15, 0x31,0x16, 0x31,0x17, 0x31,0x18, - 0x31,0x19, 0x31,0x1a, 0x31,0x1b, 0x31,0x1c, 0x31,0x1d, 0x31,0x1e, 0x31,0x1f, - 0x31,0x20, 0x31,0x21, 0x31,0x22, 0x31,0x23, 0x31,0x24, 0x31,0x25, 0x31,0x26, - 0x31,0x27, 0x31,0x28, 0x31,0x29, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, - 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, - 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, - 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0x25,0x00, - 0x25,0x01, 0x25,0x02, 0x25,0x03, 0x25,0x04, 0x25,0x05, 0x25,0x06, 0x25,0x07, - 0x25,0x08, 0x25,0x09, 0x25,0x0a, 0x25,0x0b, 0x25,0x0c, 0x25,0x0d, 0x25,0x0e, - 0x25,0x0f, 0x25,0x10, 0x25,0x11, 0x25,0x12, 0x25,0x13, 0x25,0x14, 0x25,0x15, - 0x25,0x16, 0x25,0x17, 0x25,0x18, 0x25,0x19, 0x25,0x1a, 0x25,0x1b, 0x25,0x1c, - 0x25,0x1d, 0x25,0x1e, 0x25,0x1f, 0x25,0x20, 0x25,0x21, 0x25,0x22, 0x25,0x23, - 0x25,0x24, 0x25,0x25, 0x25,0x26, 0x25,0x27, 0x25,0x28, 0x25,0x29, 0x25,0x2a, - 0x25,0x2b, 0x25,0x2c, 0x25,0x2d, 0x25,0x2e, 0x25,0x2f, 0x25,0x30, 0x25,0x31, - 0x25,0x32, 0x25,0x33, 0x25,0x34, 0x25,0x35, 0x25,0x36, 0x25,0x37, 0x25,0x38, - 0x25,0x39, 0x25,0x3a, 0x25,0x3b, 0x25,0x3c, 0x25,0x3d, 0x25,0x3e, 0x25,0x3f, - 0x25,0x40, 0x25,0x41, 0x25,0x42, 0x25,0x43, 0x25,0x44, 0x25,0x45, 0x25,0x46, - 0x25,0x47, 0x25,0x48, 0x25,0x49, 0x25,0x4a, 0x25,0x4b, 0xff,0xfd, 0xff,0xfd, - 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, - 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0x55,0x4a, - 0x96,0x3f, 0x57,0xc3, 0x63,0x28, 0x54,0xce, 0x55,0x09, 0x54,0xc0, 0x76,0x91, - 0x76,0x4c, 0x85,0x3c, 0x77,0xee, 0x82,0x7e, 0x78,0x8d, 0x72,0x31, 0x96,0x98, - 0x97,0x8d, 0x6c,0x28, 0x5b,0x89, 0x4f,0xfa, 0x63,0x09, 0x66,0x97, 0x5c,0xb8, - 0x80,0xfa, 0x68,0x48, 0x80,0xae, 0x66,0x02, 0x76,0xce, 0x51,0xf9, 0x65,0x56, - 0x71,0xac, 0x7f,0xf1, 0x88,0x84, 0x50,0xb2, 0x59,0x65, 0x61,0xca, 0x6f,0xb3, - 0x82,0xad, 0x63,0x4c, 0x62,0x52, 0x53,0xed, 0x54,0x27, 0x7b,0x06, 0x51,0x6b, - 0x75,0xa4, 0x5d,0xf4, 0x62,0xd4, 0x8d,0xcb, 0x97,0x76, 0x62,0x8a, 0x80,0x19, - 0x57,0x5d, 0x97,0x38, 0x7f,0x62, 0x72,0x38, 0x76,0x7d, 0x67,0xcf, 0x76,0x7e, - 0x64,0x46, 0x4f,0x70, 0x8d,0x25, 0x62,0xdc, 0x7a,0x17, 0x65,0x91, 0x73,0xed, - 0x64,0x2c, 0x62,0x73, 0x82,0x2c, 0x98,0x81, 0x67,0x7f, 0x72,0x48, 0x62,0x6e, - 0x62,0xcc, 0x4f,0x34, 0x74,0xe3, 0x53,0x4a, 0x52,0x9e, 0x7e,0xca, 0x90,0xa6, - 0x5e,0x2e, 0x68,0x86, 0x69,0x9c, 0x81,0x80, 0x7e,0xd1, 0x68,0xd2, 0x78,0xc5, - 0x86,0x8c, 0x95,0x51, 0x50,0x8d, 0x8c,0x24, 0x82,0xde, 0x80,0xde, 0x53,0x05, - 0x89,0x12, 0x52,0x65, 0x85,0x84, 0x96,0xf9, 0x4f,0xdd, 0x58,0x21, 0x99,0x71, - 0x5b,0x9d, 0x62,0xb1, 0x62,0xa5, 0x66,0xb4, 0x8c,0x79, 0x9c,0x8d, 0x72,0x06, - 0x67,0x6f, 0x78,0x91, 0x60,0xb2, 0x53,0x51, 0x53,0x17, 0x8f,0x88, 0x80,0xcc, - 0x8d,0x1d, 0x94,0xa1, 0x50,0x0d, 0x72,0xc8, 0x59,0x07, 0x60,0xeb, 0x71,0x19, - 0x88,0xab, 0x59,0x54, 0x82,0xef, 0x67,0x2c, 0x7b,0x28, 0x5d,0x29, 0x7e,0xf7, - 0x75,0x2d, 0x6c,0xf5, 0x8e,0x66, 0x8f,0xf8, 0x90,0x3c, 0x9f,0x3b, 0x6b,0xd4, - 0x91,0x19, 0x7b,0x14, 0x5f,0x7c, 0x78,0xa7, 0x84,0xd6, 0x85,0x3d, 0x6b,0xd5, - 0x6b,0xd9, 0x6b,0xd6, 0x5e,0x01, 0x5e,0x87, 0x75,0xf9, 0x95,0xed, 0x65,0x5d, - 0x5f,0x0a, 0x5f,0xc5, 0x8f,0x9f, 0x58,0xc1, 0x81,0xc2, 0x90,0x7f, 0x96,0x5b, - 0x97,0xad, 0x8f,0xb9, 0x7f,0x16, 0x8d,0x2c, 0x62,0x41, 0x4f,0xbf, 0x53,0xd8, - 0x53,0x5e, 0x8f,0xa8, 0x8f,0xa9, 0x8f,0xab, 0x90,0x4d, 0x68,0x07, 0x5f,0x6a, - 0x81,0x98, 0x88,0x68, 0x9c,0xd6, 0x61,0x8b, 0x52,0x2b, 0x76,0x2a, 0x5f,0x6c, - 0x65,0x8c, 0x6f,0xd2, 0x6e,0xe8, 0x5b,0xbe, 0x64,0x48, 0x51,0x75, 0x51,0xb0, - 0x67,0xc4, 0x4e,0x19, 0x79,0xc9, 0x99,0x7c, 0x70,0xb3, 0x75,0xc5, 0x5e,0x76, - 0x73,0xbb, 0x83,0xe0, 0x64,0xad, 0x62,0xe8, 0x94,0xb5, 0x6c,0xe2, 0x53,0x5a, - 0x52,0xc3, 0x64,0x0f, 0x94,0xc2, 0x7b,0x94, 0x4f,0x2f, 0x5e,0x1b, 0x82,0x36, - 0x81,0x16, 0x81,0x8a, 0x6e,0x24, 0x6c,0xca, 0x9a,0x73, 0x63,0x55, 0x53,0x5c, - 0x54,0xfa, 0x88,0x65, 0x57,0xe0, 0x4e,0x0d, 0x5e,0x03, 0x6b,0x65, 0x7c,0x3f, - 0x90,0xe8, 0x60,0x16, 0x64,0xe6, 0x73,0x1c, 0x88,0xc1, 0x67,0x50, 0x62,0x4d, - 0x8d,0x22, 0x77,0x6c, 0x8e,0x29, 0x91,0xc7, 0x5f,0x69, 0x83,0xdc, 0x85,0x21, - 0x99,0x10, 0x53,0xc2, 0x86,0x95, 0x6b,0x8b, 0x60,0xed, 0x60,0xe8, 0x70,0x7f, - 0x82,0xcd, 0x82,0x31, 0x4e,0xd3, 0x6c,0xa7, 0x85,0xcf, 0x64,0xcd, 0x7c,0xd9, - 0x69,0xfd, 0x66,0xf9, 0x83,0x49, 0x53,0x95, 0x7b,0x56, 0x4f,0xa7, 0x51,0x8c, - 0x6d,0x4b, 0x5c,0x42, 0x8e,0x6d, 0x63,0xd2, 0x53,0xc9, 0x83,0x2c, 0x83,0x36, - 0x67,0xe5, 0x78,0xb4, 0x64,0x3d, 0x5b,0xdf, 0x5c,0x94, 0x5d,0xee, 0x8b,0xe7, - 0x62,0xc6, 0x67,0xf4, 0x8c,0x7a, 0x64,0x00, 0x63,0xba, 0x87,0x49, 0x99,0x8b, - 0x8c,0x17, 0x7f,0x20, 0x94,0xf2, 0x4e,0xa7, 0x96,0x10, 0x98,0xa4, 0x66,0x0c, - 0x73,0x16, 0x57,0x3a, 0x5c,0x1d, 0x5e,0x38, 0x95,0x7f, 0x50,0x7f, 0x80,0xa0, - 0x53,0x82, 0x65,0x5e, 0x75,0x45, 0x55,0x31, 0x50,0x21, 0x8d,0x85, 0x62,0x84, - 0x94,0x9e, 0x67,0x1d, 0x56,0x32, 0x6f,0x6e, 0x5d,0xe2, 0x54,0x35, 0x70,0x92, - 0x8f,0x66, 0x62,0x6f, 0x64,0xa4, 0x63,0xa3, 0x5f,0x7b, 0x6f,0x88, 0x90,0xf4, - 0x81,0xe3, 0x8f,0xb0, 0x5c,0x18, 0x66,0x68, 0x5f,0xf1, 0x6c,0x89, 0x96,0x48, - 0x8d,0x81, 0x88,0x6c, 0x64,0x91, 0x79,0xf0, 0x57,0xce, 0x6a,0x59, 0x62,0x10, - 0x54,0x48, 0x4e,0x58, 0x7a,0x0b, 0x60,0xe9, 0x6f,0x84, 0x8b,0xda, 0x62,0x7f, - 0x90,0x1e, 0x9a,0x8b, 0x79,0xe4, 0x54,0x03, 0x75,0xf4, 0x63,0x01, 0x53,0x19, - 0x6c,0x60, 0x8f,0xdf, 0x5f,0x1b, 0x9a,0x70, 0x80,0x3b, 0x9f,0x7f, 0x4f,0x88, - 0x5c,0x3a, 0x8d,0x64, 0x7f,0xc5, 0x65,0xa5, 0x70,0xbd, 0x51,0x45, 0x51,0xb2, - 0x86,0x6b, 0x5d,0x07, 0x5b,0xa0, 0x62,0xbd, 0x91,0x6c, 0x75,0x74, 0x8e,0x0c, - 0x7a,0x20, 0x61,0x01, 0x7b,0x79, 0x4e,0xc7, 0x7e,0xf8, 0x77,0x85, 0x4e,0x11, - 0x81,0xed, 0x52,0x1d, 0x51,0xfa, 0x6a,0x71, 0x53,0xa8, 0x8e,0x87, 0x95,0x04, - 0x96,0xcf, 0x6e,0xc1, 0x96,0x64, 0x69,0x5a, 0x78,0x40, 0x50,0xa8, 0x77,0xd7, - 0x64,0x10, 0x89,0xe6, 0x59,0x04, 0x63,0xe3, 0x5d,0xdd, 0x7a,0x7f, 0x69,0x3d, - 0x4f,0x20, 0x82,0x39, 0x55,0x98, 0x4e,0x32, 0x75,0xae, 0x7a,0x97, 0x5e,0x62, - 0x5e,0x8a, 0x95,0xef, 0x52,0x1b, 0x54,0x39, 0x70,0x8a, 0x63,0x76, 0x95,0x24, - 0x57,0x82, 0x66,0x25, 0x69,0x3f, 0x91,0x87, 0x55,0x07, 0x6d,0xf3, 0x7e,0xaf, - 0x88,0x22, 0x62,0x33, 0x7e,0xf0, 0x75,0xb5, 0x83,0x28, 0x78,0xc1, 0x96,0xcc, - 0x8f,0x9e, 0x61,0x48, 0x74,0xf7, 0x8b,0xcd, 0x6b,0x64, 0x52,0x3a, 0x8d,0x50, - 0x6b,0x21, 0x80,0x6a, 0x84,0x71, 0x56,0xf1, 0x53,0x06, 0x4e,0xce, 0x4e,0x1b, - 0x51,0xd1, 0x7c,0x97, 0x91,0x8b, 0x7c,0x07, 0x4f,0xc3, 0x8e,0x7f, 0x7b,0xe1, - 0x7a,0x9c, 0x64,0x67, 0x5d,0x14, 0x50,0xac, 0x81,0x06, 0x76,0x01, 0x7c,0xb9, - 0x6d,0xec, 0x7f,0xe0, 0x67,0x51, 0x5b,0x58, 0x5b,0xf8, 0x78,0xcb, 0x64,0xae, - 0x64,0x13, 0x63,0xaa, 0x63,0x2b, 0x95,0x19, 0x64,0x2d, 0x8f,0xbe, 0x7b,0x54, - 0x76,0x29, 0x62,0x53, 0x59,0x27, 0x54,0x46, 0x6b,0x79, 0x50,0xa3, 0x62,0x34, - 0x5e,0x26, 0x6b,0x86, 0x4e,0xe3, 0x8d,0x37, 0x88,0x8b, 0x5f,0x85, 0x90,0x2e, - 0x60,0x20, 0x80,0x3d, 0x62,0xc5, 0x4e,0x39, 0x53,0x55, 0x90,0xf8, 0x63,0xb8, - 0x80,0xc6, 0x65,0xe6, 0x6c,0x2e, 0x4f,0x46, 0x60,0xee, 0x6d,0xe1, 0x8b,0xde, - 0x5f,0x39, 0x86,0xcb, 0x5f,0x53, 0x63,0x21, 0x51,0x5a, 0x83,0x61, 0x68,0x63, - 0x52,0x00, 0x63,0x63, 0x8e,0x48, 0x50,0x12, 0x5c,0x9b, 0x79,0x77, 0x5b,0xfc, - 0x52,0x30, 0x7a,0x3b, 0x60,0xbc, 0x90,0x53, 0x76,0xd7, 0x5f,0xb7, 0x5f,0x97, - 0x76,0x84, 0x8e,0x6c, 0x70,0x6f, 0x76,0x7b, 0x7b,0x49, 0x77,0xaa, 0x51,0xf3, - 0x90,0x93, 0x58,0x24, 0x4f,0x4e, 0x6e,0xf4, 0x8f,0xea, 0x65,0x4c, 0x7b,0x1b, - 0x72,0xc4, 0x6d,0xa4, 0x7f,0xdf, 0x5a,0xe1, 0x62,0xb5, 0x5e,0x95, 0x57,0x30, - 0x84,0x82, 0x7b,0x2c, 0x5e,0x1d, 0x5f,0x1f, 0x90,0x12, 0x7f,0x14, 0x98,0xa0, - 0x63,0x82, 0x6e,0xc7, 0x78,0x98, 0x70,0xb9, 0x51,0x78, 0x97,0x5b, 0x57,0xab, - 0x75,0x35, 0x4f,0x43, 0x75,0x38, 0x5e,0x97, 0x60,0xe6, 0x59,0x60, 0x6d,0xc0, - 0x6b,0xbf, 0x78,0x89, 0x53,0xfc, 0x96,0xd5, 0x51,0xcb, 0x52,0x01, 0x63,0x89, - 0x54,0x0a, 0x94,0x93, 0x8c,0x03, 0x8d,0xcc, 0x72,0x39, 0x78,0x9f, 0x87,0x76, - 0x8f,0xed, 0x8c,0x0d, 0x53,0xe0, 0x4e,0x01, 0x76,0xef, 0x53,0xee, 0x94,0x89, - 0x98,0x76, 0x9f,0x0e, 0x95,0x2d, 0x5b,0x9a, 0x8b,0xa2, 0x4e,0x22, 0x4e,0x1c, - 0x51,0xac, 0x84,0x63, 0x61,0xc2, 0x52,0xa8, 0x68,0x0b, 0x4f,0x97, 0x60,0x6b, - 0x51,0xbb, 0x6d,0x1e, 0x51,0x5c, 0x62,0x96, 0x65,0x97, 0x96,0x61, 0x8c,0x46, - 0x90,0x17, 0x75,0xd8, 0x90,0xfd, 0x77,0x63, 0x6b,0xd2, 0x72,0x8a, 0x72,0xec, - 0x8b,0xfb, 0x58,0x35, 0x77,0x79, 0x8d,0x4c, 0x67,0x5c, 0x95,0x40, 0x80,0x9a, - 0x5e,0xa6, 0x6e,0x21, 0x59,0x92, 0x7a,0xef, 0x77,0xed, 0x95,0x3b, 0x6b,0xb5, - 0x65,0xad, 0x7f,0x0e, 0x58,0x06, 0x51,0x51, 0x96,0x1f, 0x5b,0xf9, 0x58,0xa9, - 0x54,0x28, 0x8e,0x72, 0x65,0x66, 0x98,0x7f, 0x56,0xe4, 0x94,0x9d, 0x76,0xfe, - 0x90,0x41, 0x63,0x87, 0x54,0xc6, 0x59,0x1a, 0x59,0x3a, 0x57,0x9b, 0x8e,0xb2, - 0x67,0x35, 0x8d,0xfa, 0x82,0x35, 0x52,0x41, 0x60,0xf0, 0x58,0x15, 0x86,0xfe, - 0x5c,0xe8, 0x9e,0x45, 0x4f,0xc4, 0x98,0x9d, 0x8b,0xb9, 0x5a,0x25, 0x60,0x76, - 0x53,0x84, 0x62,0x7c, 0x90,0x4f, 0x91,0x02, 0x99,0x7f, 0x60,0x69, 0x80,0x0c, - 0x51,0x3f, 0x80,0x33, 0x5c,0x14, 0x99,0x75, 0x6d,0x31, 0x4e,0x8c, 0x8d,0x30, - 0x53,0xd1, 0x7f,0x5a, 0x7b,0x4f, 0x4f,0x10, 0x4e,0x4f, 0x96,0x00, 0x6c,0xd5, - 0x73,0xd0, 0x85,0xe9, 0x5e,0x06, 0x75,0x6a, 0x7f,0xfb, 0x6a,0x0a, 0x77,0xfe, - 0x94,0x92, 0x7e,0x41, 0x51,0xe1, 0x70,0xe6, 0x53,0xcd, 0x8f,0xd4, 0x83,0x03, - 0x8d,0x29, 0x72,0xaf, 0x99,0x6d, 0x6c,0xdb, 0x57,0x4a, 0x82,0xb3, 0x65,0xb9, - 0x80,0xaa, 0x62,0x3f, 0x96,0x32, 0x59,0xa8, 0x4e,0xff, 0x8b,0xbf, 0x7e,0xba, - 0x65,0x3e, 0x83,0xf2, 0x97,0x5e, 0x55,0x61, 0x98,0xde, 0x80,0xa5, 0x53,0x2a, - 0x8b,0xfd, 0x54,0x20, 0x80,0xba, 0x5e,0x9f, 0x6c,0xb8, 0x8d,0x39, 0x82,0xac, - 0x91,0x5a, 0x54,0x29, 0x6c,0x1b, 0x52,0x06, 0x7e,0xb7, 0x57,0x5f, 0x71,0x1a, - 0x6c,0x7e, 0x7c,0x89, 0x59,0x4b, 0x4e,0xfd, 0x5f,0xff, 0x61,0x24, 0x7c,0xaa, - 0x4e,0x30, 0x5c,0x01, 0x67,0xab, 0x87,0x02, 0x5c,0xf0, 0x95,0x0b, 0x98,0xce, - 0x75,0xaf, 0x70,0xfd, 0x90,0x22, 0x51,0xaf, 0x7f,0x1d, 0x8b,0xbd, 0x59,0x49, - 0x51,0xe4, 0x4f,0x5b, 0x54,0x26, 0x59,0x2b, 0x65,0x77, 0x80,0xa4, 0x5b,0x75, - 0x62,0x76, 0x62,0xc2, 0x8f,0x90, 0x5e,0x45, 0x6c,0x1f, 0x7b,0x26, 0x4f,0x0f, - 0x4f,0xd8, 0x67,0x0d, 0x6d,0x6e, 0x6d,0xaa, 0x79,0x8f, 0x88,0xb1, 0x5f,0x17, - 0x75,0x2b, 0x62,0x9a, 0x8f,0x85, 0x4f,0xef, 0x91,0xdc, 0x65,0xa7, 0x81,0x2f, - 0x81,0x51, 0x5e,0x9c, 0x81,0x50, 0x8d,0x74, 0x52,0x6f, 0x89,0x86, 0x8d,0x4b, - 0x59,0x0d, 0x50,0x85, 0x4e,0xd8, 0x96,0x1c, 0x72,0x36, 0x81,0x79, 0x8d,0x1f, - 0x5b,0xcc, 0x8b,0xa3, 0x96,0x44, 0x59,0x87, 0x7f,0x1a, 0x54,0x90, 0x56,0x76, - 0x56,0x0e, 0x8b,0xe5, 0x65,0x39, 0x69,0x82, 0x94,0x99, 0x76,0xd6, 0x6e,0x89, - 0x5e,0x72, 0x75,0x18, 0x67,0x46, 0x67,0xd1, 0x7a,0xff, 0x80,0x9d, 0x8d,0x76, - 0x61,0x1f, 0x79,0xc6, 0x65,0x62, 0x8d,0x63, 0x51,0x88, 0x52,0x1a, 0x94,0xa2, - 0x7f,0x38, 0x80,0x9b, 0x7e,0xb2, 0x5c,0x97, 0x6e,0x2f, 0x67,0x60, 0x7b,0xd9, - 0x76,0x8b, 0x9a,0xd8, 0x81,0x8f, 0x7f,0x94, 0x7c,0xd5, 0x64,0x1e, 0x95,0x50, - 0x7a,0x3f, 0x54,0x4a, 0x54,0xe5, 0x6b,0x4c, 0x64,0x01, 0x62,0x08, 0x9e,0x3d, - 0x80,0xf3, 0x75,0x99, 0x52,0x72, 0x97,0x69, 0x84,0x5b, 0x68,0x3c, 0x86,0xe4, - 0x96,0x01, 0x96,0x94, 0x94,0xec, 0x4e,0x2a, 0x54,0x04, 0x7e,0xd9, 0x68,0x39, - 0x8d,0xdf, 0x80,0x15, 0x66,0xf4, 0x5e,0x9a, 0x7f,0xb9, 0x57,0xc2, 0x80,0x3f, - 0x68,0x97, 0x5d,0xe5, 0x65,0x3b, 0x52,0x9f, 0x60,0x6d, 0x9f,0x9a, 0x4f,0x9b, - 0x8e,0xac, 0x51,0x6c, 0x5b,0xab, 0x5f,0x13, 0x5d,0xe9, 0x6c,0x5e, 0x62,0xf1, - 0x8d,0x21, 0x51,0x71, 0x94,0xa9, 0x52,0xfe, 0x6c,0x9f, 0x82,0xdf, 0x72,0xd7, - 0x57,0xa2, 0x67,0x84, 0x8d,0x2d, 0x59,0x1f, 0x8f,0x9c, 0x83,0xc7, 0x54,0x95, - 0x7b,0x8d, 0x4f,0x30, 0x6c,0xbd, 0x5b,0x64, 0x59,0xd1, 0x9f,0x13, 0x53,0xe4, - 0x86,0xca, 0x9a,0xa8, 0x8c,0x37, 0x80,0xa1, 0x65,0x45, 0x98,0x7e, 0x56,0xfa, - 0x96,0xc7, 0x52,0x2e, 0x74,0xdc, 0x52,0x50, 0x5b,0xe1, 0x63,0x02, 0x89,0x02, - 0x4e,0x56, 0x62,0xd0, 0x60,0x2a, 0x68,0xfa, 0x51,0x73, 0x5b,0x98, 0x51,0xa0, - 0x89,0xc2, 0x7b,0xa1, 0x99,0x86, 0x7f,0x50, 0x60,0xef, 0x70,0x4c, 0x8d,0x2f, - 0x51,0x49, 0x5e,0x7f, 0x90,0x1b, 0x74,0x70, 0x89,0xc4, 0x57,0x2d, 0x78,0x45, - 0x5f,0x52, 0x9f,0x9f, 0x95,0xfa, 0x8f,0x68, 0x9b,0x3c, 0x8b,0xe1, 0x76,0x78, - 0x68,0x42, 0x67,0xdc, 0x8d,0xea, 0x8d,0x35, 0x52,0x3d, 0x8f,0x8a, 0x6e,0xda, - 0x68,0xcd, 0x95,0x05, 0x90,0xed, 0x56,0xfd, 0x67,0x9c, 0x88,0xf9, 0x8f,0xc7, - 0x54,0xc8, 0x9a,0xb8, 0x5b,0x69, 0x6d,0x77, 0x6c,0x26, 0x4e,0xa5, 0x5b,0xb3, - 0x9a,0x87, 0x91,0x63, 0x61,0xa8, 0x90,0xaf, 0x97,0xe9, 0x54,0x2b, 0x6d,0xb5, - 0x5b,0xd2, 0x51,0xfd, 0x55,0x8a, 0x7f,0x55, 0x7f,0xf0, 0x64,0xbc, 0x63,0x4d, - 0x65,0xf1, 0x61,0xbe, 0x60,0x8d, 0x71,0x0a, 0x6c,0x57, 0x6c,0x49, 0x59,0x2f, - 0x67,0x6d, 0x82,0x2a, 0x58,0xd5, 0x56,0x8e, 0x8c,0x6a, 0x6b,0xeb, 0x90,0xdd, - 0x59,0x7d, 0x80,0x17, 0x53,0xf7, 0x6d,0x69, 0x54,0x75, 0x55,0x9d, 0x83,0x77, - 0x83,0xcf, 0x68,0x38, 0x79,0xbe, 0x54,0x8c, 0x4f,0x55, 0x54,0x08, 0x76,0xd2, - 0x8c,0x89, 0x96,0x02, 0x6c,0xb3, 0x6d,0xb8, 0x8d,0x6b, 0x89,0x10, 0x9e,0x64, - 0x8d,0x3a, 0x56,0x3f, 0x9e,0xd1, 0x75,0xd5, 0x5f,0x88, 0x72,0xe0, 0x60,0x68, - 0x54,0xfc, 0x4e,0xa8, 0x6a,0x2a, 0x88,0x61, 0x60,0x52, 0x8f,0x70, 0x54,0xc4, - 0x70,0xd8, 0x86,0x79, 0x9e,0x3f, 0x6d,0x2a, 0x5b,0x8f, 0x5f,0x18, 0x7e,0xa2, - 0x55,0x89, 0x4f,0xaf, 0x73,0x34, 0x54,0x3c, 0x53,0x9a, 0x50,0x19, 0x54,0x0e, - 0x54,0x7c, 0x4e,0x4e, 0x5f,0xfd, 0x74,0x5a, 0x58,0xf6, 0x84,0x6b, 0x80,0xe1, - 0x87,0x74, 0x72,0xd0, 0x7c,0xca, 0x6e,0x56, 0x5f,0x27, 0x86,0x4e, 0x55,0x2c, - 0x62,0xa4, 0x4e,0x92, 0x6c,0xaa, 0x62,0x37, 0x82,0xb1, 0x54,0xd7, 0x53,0x4e, - 0x73,0x3e, 0x6e,0xd1, 0x75,0x3b, 0x52,0x12, 0x53,0x16, 0x8b,0xdd, 0x69,0xd0, - 0x5f,0x8a, 0x60,0x00, 0x6d,0xee, 0x57,0x4f, 0x6b,0x22, 0x73,0xaf, 0x68,0x53, - 0x8f,0xd8, 0x7f,0x13, 0x63,0x62, 0x60,0xa3, 0x55,0x24, 0x75,0xea, 0x8c,0x62, - 0x71,0x15, 0x6d,0xa3, 0x5b,0xa6, 0x5e,0x7b, 0x83,0x52, 0x61,0x4c, 0x9e,0xc4, - 0x78,0xfa, 0x87,0x57, 0x7c,0x27, 0x76,0x87, 0x51,0xf0, 0x60,0xf6, 0x71,0x4c, - 0x66,0x43, 0x5e,0x4c, 0x60,0x4d, 0x8c,0x0e, 0x70,0x70, 0x63,0x25, 0x8f,0x89, - 0x5f,0xbd, 0x60,0x62, 0x86,0xd4, 0x56,0xde, 0x6b,0xc1, 0x60,0x94, 0x61,0x67, - 0x53,0x49, 0x60,0xe0, 0x66,0x66, 0x8d,0x3f, 0x79,0xfd, 0x4f,0x1a, 0x70,0xe9, - 0x6c,0x47, 0x8b,0xb3, 0x8b,0xf2, 0x7e,0xd8, 0x83,0x64, 0x66,0x0f, 0x5a,0x5a, - 0x9b,0x42, 0x6d,0x51, 0x6d,0xf7, 0x8c,0x41, 0x6d,0x3b, 0x4f,0x19, 0x70,0x6b, - 0x83,0xb7, 0x62,0x16, 0x60,0xd1, 0x97,0x0d, 0x8d,0x27, 0x79,0x78, 0x51,0xfb, - 0x57,0x3e, 0x57,0xfa, 0x67,0x3a, 0x75,0x78, 0x7a,0x3d, 0x79,0xef, 0x7b,0x95, - 0x80,0x8c, 0x99,0x65, 0x8f,0xf9, 0x6f,0xc0, 0x8b,0xa5, 0x9e,0x21, 0x59,0xec, - 0x7e,0xe9, 0x7f,0x09, 0x54,0x09, 0x67,0x81, 0x68,0xd8, 0x8f,0x91, 0x7c,0x4d, - 0x96,0xc6, 0x53,0xca, 0x60,0x25, 0x75,0xbe, 0x6c,0x72, 0x53,0x73, 0x5a,0xc9, - 0x7e,0xa7, 0x63,0x24, 0x51,0xe0, 0x81,0x0a, 0x5d,0xf1, 0x84,0xdf, 0x62,0x80, - 0x51,0x80, 0x5b,0x63, 0x4f,0x0e, 0x79,0x6d, 0x52,0x42, 0x60,0xb8, 0x6d,0x4e, - 0x5b,0xc4, 0x5b,0xc2, 0x8b,0xa1, 0x8b,0xb0, 0x65,0xe2, 0x5f,0xcc, 0x96,0x45, - 0x59,0x93, 0x7e,0xe7, 0x7e,0xaa, 0x56,0x09, 0x67,0xb7, 0x59,0x39, 0x4f,0x73, - 0x5b,0xb6, 0x52,0xa0, 0x83,0x5a, 0x98,0x8a, 0x8d,0x3e, 0x75,0x32, 0x94,0xbe, - 0x50,0x47, 0x7a,0x3c, 0x4e,0xf7, 0x67,0xb6, 0x9a,0x7e, 0x5a,0xc1, 0x6b,0x7c, - 0x76,0xd1, 0x57,0x5a, 0x5c,0x16, 0x7b,0x3a, 0x95,0xf4, 0x71,0x4e, 0x51,0x7c, - 0x80,0xa9, 0x82,0x70, 0x59,0x78, 0x7f,0x04, 0x83,0x27, 0x68,0xc0, 0x67,0xec, - 0x78,0xb1, 0x78,0x77, 0x62,0xe3, 0x63,0x61, 0x7b,0x80, 0x4f,0xed, 0x52,0x6a, - 0x51,0xcf, 0x83,0x50, 0x69,0xdb, 0x92,0x74, 0x8d,0xf5, 0x8d,0x31, 0x89,0xc1, - 0x95,0x2e, 0x7b,0xad, 0x4e,0xf6, 0x50,0x65, 0x82,0x30, 0x52,0x51, 0x99,0x6f, - 0x6e,0x10, 0x6e,0x85, 0x6d,0xa7, 0x5e,0xfa, 0x50,0xf5, 0x59,0xdc, 0x5c,0x06, - 0x6d,0x46, 0x6c,0x5f, 0x75,0x86, 0x84,0x8b, 0x68,0x68, 0x59,0x56, 0x8b,0xb2, - 0x53,0x20, 0x91,0x71, 0x96,0x4d, 0x85,0x49, 0x69,0x12, 0x79,0x01, 0x71,0x26, - 0x80,0xf6, 0x4e,0xa4, 0x90,0xca, 0x6d,0x47, 0x9a,0x84, 0x5a,0x07, 0x56,0xbc, - 0x64,0x05, 0x94,0xf0, 0x77,0xeb, 0x4f,0xa5, 0x81,0x1a, 0x72,0xe1, 0x89,0xd2, - 0x99,0x7a, 0x7f,0x34, 0x7e,0xde, 0x52,0x7f, 0x65,0x59, 0x91,0x75, 0x8f,0x7f, - 0x8f,0x83, 0x53,0xeb, 0x7a,0x96, 0x63,0xed, 0x63,0xa5, 0x76,0x86, 0x79,0xf8, - 0x88,0x57, 0x96,0x36, 0x62,0x2a, 0x52,0xab, 0x82,0x82, 0x68,0x54, 0x67,0x70, - 0x63,0x77, 0x77,0x6b, 0x7a,0xed, 0x6d,0x01, 0x7e,0xd3, 0x89,0xe3, 0x59,0xd0, - 0x62,0x12, 0x85,0xc9, 0x82,0xa5, 0x75,0x4c, 0x50,0x1f, 0x4e,0xcb, 0x75,0xa5, - 0x8b,0xeb, 0x5c,0x4a, 0x5d,0xfe, 0x7b,0x4b, 0x65,0xa4, 0x91,0xd1, 0x4e,0xca, - 0x6d,0x25, 0x89,0x5f, 0x7d,0x27, 0x95,0x26, 0x4e,0xc5, 0x8c,0x28, 0x8f,0xdb, - 0x97,0x73, 0x66,0x4b, 0x79,0x81, 0x8f,0xd1, 0x70,0xec, 0x6d,0x78, 0x5c,0x3d, - 0x52,0xb2, 0x83,0x46, 0x51,0x62, 0x83,0x0e, 0x77,0x5b, 0x66,0x76, 0x9c,0xb8, - 0x4e,0xac, 0x60,0xca, 0x7c,0xbe, 0x7c,0xb3, 0x7e,0xcf, 0x4e,0x95, 0x8b,0x66, - 0x66,0x6f, 0x98,0x88, 0x97,0x59, 0x58,0x83, 0x65,0x6c, 0x95,0x5c, 0x5f,0x84, - 0x75,0xc9, 0x97,0x56, 0x7a,0xdf, 0x7a,0xde, 0x51,0xc0, 0x70,0xaf, 0x7a,0x98, - 0x63,0xea, 0x7a,0x76, 0x7e,0xa0, 0x73,0x96, 0x97,0xed, 0x4e,0x45, 0x70,0x78, - 0x4e,0x5d, 0x91,0x52, 0x53,0xa9, 0x65,0x51, 0x65,0xe7, 0x81,0xfc, 0x82,0x05, - 0x54,0x8e, 0x5c,0x31, 0x75,0x9a, 0x97,0xa0, 0x62,0xd8, 0x72,0xd9, 0x75,0xbd, - 0x5c,0x45, 0x9a,0x79, 0x83,0xca, 0x5c,0x40, 0x54,0x80, 0x77,0xe9, 0x4e,0x3e, - 0x6c,0xae, 0x80,0x5a, 0x62,0xd2, 0x63,0x6e, 0x5d,0xe8, 0x51,0x77, 0x8d,0xdd, - 0x8e,0x1e, 0x95,0x2f, 0x4f,0xf1, 0x53,0xe5, 0x60,0xe7, 0x70,0xac, 0x52,0x67, - 0x63,0x50, 0x9e,0x43, 0x5a,0x1f, 0x50,0x26, 0x77,0x37, 0x53,0x77, 0x7e,0xe2, - 0x64,0x85, 0x65,0x2b, 0x62,0x89, 0x63,0x98, 0x50,0x14, 0x72,0x35, 0x89,0xc9, - 0x51,0xb3, 0x8b,0xc0, 0x7e,0xdd, 0x57,0x47, 0x83,0xcc, 0x94,0xa7, 0x51,0x9b, - 0x54,0x1b, 0x5c,0xfb, 0x4f,0xca, 0x7a,0xe3, 0x6d,0x5a, 0x90,0xe1, 0x9a,0x8f, - 0x55,0x80, 0x54,0x96, 0x53,0x61, 0x54,0xaf, 0x5f,0x00, 0x63,0xe9, 0x69,0x77, - 0x51,0xef, 0x61,0x68, 0x52,0x0a, 0x58,0x2a, 0x52,0xd8, 0x57,0x4e, 0x78,0x0d, - 0x77,0x0b, 0x5e,0xb7, 0x61,0x77, 0x7c,0xe0, 0x62,0x5b, 0x62,0x97, 0x4e,0xa2, - 0x70,0x95, 0x80,0x03, 0x62,0xf7, 0x70,0xe4, 0x97,0x60, 0x57,0x77, 0x82,0xdb, - 0x67,0xef, 0x68,0xf5, 0x78,0xd5, 0x98,0x97, 0x79,0xd1, 0x58,0xf3, 0x54,0xb3, - 0x53,0xef, 0x6e,0x34, 0x51,0x4b, 0x52,0x3b, 0x5b,0xa2, 0x8b,0xfe, 0x80,0xaf, - 0x55,0x43, 0x57,0xa6, 0x60,0x73, 0x57,0x51, 0x54,0x2d, 0x7a,0x7a, 0x60,0x50, - 0x5b,0x54, 0x63,0xa7, 0x62,0xa0, 0x53,0xe3, 0x62,0x63, 0x5b,0xc7, 0x67,0xaf, - 0x54,0xed, 0x7a,0x9f, 0x82,0xe6, 0x91,0x77, 0x5e,0x93, 0x88,0xe4, 0x59,0x38, - 0x57,0xae, 0x63,0x0e, 0x8d,0xe8, 0x80,0xef, 0x57,0x57, 0x7b,0x77, 0x4f,0xa9, - 0x5f,0xeb, 0x5b,0xbd, 0x6b,0x3e, 0x53,0x21, 0x7b,0x50, 0x72,0xc2, 0x68,0x46, - 0x77,0xff, 0x77,0x36, 0x65,0xf7, 0x51,0xb5, 0x4e,0x8f, 0x76,0xd4, 0x5c,0xbf, - 0x7a,0xa5, 0x84,0x75, 0x59,0x4e, 0x9b,0x41, 0x50,0x80, 0x99,0x88, 0x61,0x27, - 0x6e,0x83, 0x57,0x64, 0x66,0x06, 0x63,0x46, 0x56,0xf0, 0x62,0xec, 0x62,0x69, - 0x5e,0xd3, 0x96,0x14, 0x57,0x83, 0x62,0xc9, 0x55,0x87, 0x87,0x21, 0x81,0x4a, - 0x8f,0xa3, 0x55,0x66, 0x83,0xb1, 0x67,0x65, 0x8d,0x56, 0x84,0xdd, 0x5a,0x6a, - 0x68,0x0f, 0x62,0xe6, 0x7b,0xee, 0x96,0x11, 0x51,0x70, 0x6f,0x9c, 0x8c,0x30, - 0x63,0xfd, 0x89,0xc8, 0x61,0xd2, 0x7f,0x06, 0x70,0xc2, 0x6e,0xe5, 0x74,0x05, - 0x69,0x94, 0x72,0xfc, 0x5e,0xca, 0x90,0xce, 0x67,0x17, 0x6d,0x6a, 0x63,0x5e, - 0x52,0xb3, 0x72,0x62, 0x80,0x01, 0x4f,0x6c, 0x59,0xe5, 0x91,0x6a, 0x70,0xd9, - 0x6d,0x9d, 0x52,0xd2, 0x4e,0x50, 0x96,0xf7, 0x95,0x6d, 0x85,0x7e, 0x78,0xca, - 0x7d,0x2f, 0x51,0x21, 0x57,0x92, 0x64,0xc2, 0x80,0x8b, 0x7c,0x7b, 0x6c,0xea, - 0x68,0xf1, 0x69,0x5e, 0x51,0xb7, 0x53,0x98, 0x68,0xa8, 0x72,0x81, 0x9e,0xce, - 0x7b,0xf1, 0x72,0xf8, 0x79,0xbb, 0x6f,0x13, 0x74,0x06, 0x67,0x4e, 0x91,0xcc, - 0x9c,0xa4, 0x79,0x3c, 0x83,0x89, 0x83,0x54, 0x54,0x0f, 0x68,0x17, 0x4e,0x3d, - 0x53,0x89, 0x52,0xb1, 0x78,0x3e, 0x53,0x86, 0x52,0x29, 0x50,0x88, 0x4f,0x8b, - 0x4f,0xd0, 0x75,0xe2, 0x7a,0xcb, 0x7c,0x92, 0x6c,0xa5, 0x96,0xb6, 0x52,0x9b, - 0x74,0x83, 0x54,0xe9, 0x4f,0xe9, 0x80,0x54, 0x83,0xb2, 0x8f,0xde, 0x95,0x70, - 0x5e,0xc9, 0x60,0x1c, 0x6d,0x9f, 0x5e,0x18, 0x65,0x5b, 0x81,0x38, 0x94,0xfe, - 0x60,0x4b, 0x70,0xbc, 0x7e,0xc3, 0x7c,0xae, 0x51,0xc9, 0x68,0x81, 0x7c,0xb1, - 0x82,0x6f, 0x4e,0x24, 0x8f,0x86, 0x91,0xcf, 0x66,0x7e, 0x4e,0xae, 0x8c,0x05, - 0x64,0xa9, 0x80,0x4a, 0x50,0xda, 0x75,0x97, 0x71,0xce, 0x5b,0xe5, 0x8f,0xbd, - 0x6f,0x66, 0x4e,0x86, 0x64,0x82, 0x95,0x63, 0x5e,0xd6, 0x65,0x99, 0x52,0x17, - 0x88,0xc2, 0x70,0xc8, 0x52,0xa3, 0x73,0x0e, 0x74,0x33, 0x67,0x97, 0x78,0xf7, - 0x97,0x16, 0x4e,0x34, 0x90,0xbb, 0x9c,0xde, 0x6d,0xcb, 0x51,0xdb, 0x8d,0x41, - 0x54,0x1d, 0x62,0xce, 0x73,0xb2, 0x83,0xf1, 0x96,0xf6, 0x9f,0x84, 0x94,0xc3, - 0x4f,0x36, 0x7f,0x9a, 0x51,0xcc, 0x70,0x75, 0x96,0x75, 0x5c,0xad, 0x98,0x86, - 0x53,0xe6, 0x4e,0xe4, 0x6e,0x9c, 0x74,0x09, 0x69,0xb4, 0x78,0x6b, 0x99,0x8f, - 0x75,0x59, 0x52,0x18, 0x76,0x24, 0x6d,0x41, 0x67,0xf3, 0x51,0x6d, 0x9f,0x99, - 0x80,0x4b, 0x54,0x99, 0x7b,0x3c, 0x7a,0xbf, 0x96,0x86, 0x57,0x84, 0x62,0xe2, - 0x96,0x47, 0x69,0x7c, 0x5a,0x04, 0x64,0x02, 0x7b,0xd3, 0x6f,0x0f, 0x96,0x4b, - 0x82,0xa6, 0x53,0x62, 0x98,0x85, 0x5e,0x90, 0x70,0x89, 0x63,0xb3, 0x53,0x64, - 0x86,0x4f, 0x9c,0x81, 0x9e,0x93, 0x78,0x8c, 0x97,0x32, 0x8d,0xef, 0x8d,0x42, - 0x9e,0x7f, 0x6f,0x5e, 0x79,0x84, 0x5f,0x55, 0x96,0x46, 0x62,0x2e, 0x9a,0x74, - 0x54,0x15, 0x94,0xdd, 0x4f,0xa3, 0x65,0xc5, 0x5c,0x65, 0x5c,0x61, 0x7f,0x15, - 0x86,0x51, 0x6c,0x2f, 0x5f,0x8b, 0x73,0x87, 0x6e,0xe4, 0x7e,0xff, 0x5c,0xe6, - 0x63,0x1b, 0x5b,0x6a, 0x6e,0xe6, 0x53,0x75, 0x4e,0x71, 0x63,0xa0, 0x75,0x65, - 0x62,0xa1, 0x8f,0x6e, 0x4f,0x26, 0x4e,0xd1, 0x6c,0xa6, 0x7e,0xb6, 0x8b,0xba, - 0x84,0x1d, 0x87,0xba, 0x7f,0x57, 0x90,0x3b, 0x95,0x23, 0x7b,0xa9, 0x9a,0xa1, - 0x88,0xf8, 0x84,0x3d, 0x6d,0x1b, 0x9a,0x86, 0x7e,0xdc, 0x59,0x88, 0x9e,0xbb, - 0x73,0x9b, 0x78,0x01, 0x86,0x82, 0x9a,0x6c, 0x9a,0x82, 0x56,0x1b, 0x54,0x17, - 0x57,0xcb, 0x4e,0x70, 0x9e,0xa6, 0x53,0x56, 0x8f,0xc8, 0x81,0x09, 0x77,0x92, - 0x99,0x92, 0x86,0xee, 0x6e,0xe1, 0x85,0x13, 0x66,0xfc, 0x61,0x62, 0x6f,0x2b, - 0x8c,0x29, 0x82,0x92, 0x83,0x2b, 0x76,0xf2, 0x6c,0x13, 0x5f,0xd9, 0x83,0xbd, - 0x73,0x2b, 0x83,0x05, 0x95,0x1a, 0x6b,0xdb, 0x77,0xdb, 0x94,0xc6, 0x53,0x6f, - 0x83,0x02, 0x51,0x92, 0x5e,0x3d, 0x8c,0x8c, 0x8d,0x38, 0x4e,0x48, 0x73,0xab, - 0x67,0x9a, 0x68,0x85, 0x91,0x76, 0x97,0x09, 0x71,0x64, 0x6c,0xa1, 0x77,0x09, - 0x5a,0x92, 0x95,0x41, 0x6b,0xcf, 0x7f,0x8e, 0x66,0x27, 0x5b,0xd0, 0x59,0xb9, - 0x5a,0x9a, 0x95,0xe8, 0x95,0xf7, 0x4e,0xec, 0x84,0x0c, 0x84,0x99, 0x6a,0xac, - 0x76,0xdf, 0x95,0x30, 0x73,0x1b, 0x68,0xa6, 0x5b,0x5f, 0x77,0x2f, 0x91,0x9a, - 0x97,0x61, 0x7c,0xdc, 0x8f,0xf7, 0x8c,0x1c, 0x5f,0x25, 0x7c,0x73, 0x79,0xd8, - 0x89,0xc5, 0x6c,0xcc, 0x87,0x1c, 0x5b,0xc6, 0x5e,0x42, 0x68,0xc9, 0x77,0x20, - 0x7e,0xf5, 0x51,0x95, 0x51,0x4d, 0x52,0xc9, 0x5a,0x29, 0x7f,0x05, 0x97,0x62, - 0x82,0xd7, 0x63,0xcf, 0x77,0x84, 0x85,0xd0, 0x79,0xd2, 0x6e,0x3a, 0x5e,0x99, - 0x59,0x99, 0x85,0x11, 0x70,0x6d, 0x6c,0x11, 0x62,0xbf, 0x76,0xbf, 0x65,0x4f, - 0x60,0xaf, 0x95,0xfd, 0x66,0x0e, 0x87,0x9f, 0x9e,0x23, 0x94,0xed, 0x54,0x0d, - 0x54,0x7d, 0x8c,0x2c, 0x64,0x78, 0x64,0x79, 0x86,0x11, 0x6a,0x21, 0x81,0x9c, - 0x78,0xe8, 0x64,0x69, 0x9b,0x54, 0x62,0xb9, 0x67,0x2b, 0x83,0xab, 0x58,0xa8, - 0x9e,0xd8, 0x6c,0xab, 0x6f,0x20, 0x5b,0xde, 0x96,0x4c, 0x8c,0x0b, 0x72,0x5f, - 0x67,0xd0, 0x62,0xc7, 0x72,0x61, 0x4e,0xa9, 0x59,0xc6, 0x6b,0xcd, 0x58,0x93, - 0x66,0xae, 0x5e,0x55, 0x52,0xdf, 0x61,0x55, 0x67,0x28, 0x76,0xee, 0x77,0x66, - 0x72,0x67, 0x7a,0x46, 0x62,0xff, 0x54,0xea, 0x54,0x50, 0x94,0xa0, 0x90,0xa3, - 0x5a,0x1c, 0x7e,0xb3, 0x6c,0x16, 0x4e,0x43, 0x59,0x76, 0x80,0x10, 0x59,0x48, - 0x53,0x57, 0x75,0x37, 0x96,0xbe, 0x56,0xca, 0x63,0x20, 0x81,0x11, 0x60,0x7c, - 0x95,0xf9, 0x6d,0xd6, 0x54,0x62, 0x99,0x81, 0x51,0x85, 0x5a,0xe9, 0x80,0xfd, - 0x59,0xae, 0x97,0x13, 0x50,0x2a, 0x6c,0xe5, 0x5c,0x3c, 0x62,0xdf, 0x4f,0x60, - 0x53,0x3f, 0x81,0x7b, 0x90,0x06, 0x6e,0xba, 0x85,0x2b, 0x62,0xc8, 0x5e,0x74, - 0x78,0xbe, 0x64,0xb5, 0x63,0x7b, 0x5f,0xf5, 0x5a,0x18, 0x91,0x7f, 0x9e,0x1f, - 0x5c,0x3f, 0x63,0x4f, 0x80,0x42, 0x5b,0x7d, 0x55,0x6e, 0x95,0x4a, 0x95,0x4d, - 0x6d,0x85, 0x60,0xa8, 0x67,0xe0, 0x72,0xde, 0x51,0xdd, 0x5b,0x81, 0x62,0xe7, - 0x6c,0xde, 0x72,0x5b, 0x62,0x6d, 0x94,0xae, 0x7e,0xbd, 0x81,0x13, 0x6d,0x53, - 0x51,0x9c, 0x5f,0x04, 0x59,0x74, 0x52,0xaa, 0x60,0x12, 0x59,0x73, 0x66,0x96, - 0x86,0x50, 0x75,0x9f, 0x63,0x2a, 0x61,0xe6, 0x7c,0xef, 0x8b,0xfa, 0x54,0xe6, - 0x6b,0x27, 0x9e,0x25, 0x6b,0xb4, 0x85,0xd5, 0x54,0x55, 0x50,0x76, 0x6c,0xa4, - 0x55,0x6a, 0x8d,0xb4, 0x72,0x2c, 0x5e,0x15, 0x60,0x15, 0x74,0x36, 0x62,0xcd, - 0x63,0x92, 0x72,0x4c, 0x5f,0x98, 0x6e,0x43, 0x6d,0x3e, 0x65,0x00, 0x6f,0x58, - 0x76,0xd8, 0x78,0xd0, 0x76,0xfc, 0x75,0x54, 0x52,0x24, 0x53,0xdb, 0x4e,0x53, - 0x5e,0x9e, 0x65,0xc1, 0x80,0x2a, 0x80,0xd6, 0x62,0x9b, 0x54,0x86, 0x52,0x28, - 0x70,0xae, 0x88,0x8d, 0x8d,0xd1, 0x6c,0xe1, 0x54,0x78, 0x80,0xda, 0x57,0xf9, - 0x88,0xf4, 0x8d,0x54, 0x96,0x6a, 0x91,0x4d, 0x4f,0x69, 0x6c,0x9b, 0x55,0xb7, - 0x76,0xc6, 0x78,0x30, 0x62,0xa8, 0x70,0xf9, 0x6f,0x8e, 0x5f,0x6d, 0x84,0xec, - 0x68,0xda, 0x78,0x7c, 0x7b,0xf7, 0x81,0xa8, 0x67,0x0b, 0x9e,0x4f, 0x63,0x67, - 0x78,0xb0, 0x57,0x6f, 0x78,0x12, 0x97,0x39, 0x62,0x79, 0x62,0xab, 0x52,0x88, - 0x74,0x35, 0x6b,0xd7, 0x55,0x64, 0x81,0x3e, 0x75,0xb2, 0x76,0xae, 0x53,0x39, - 0x75,0xde, 0x50,0xfb, 0x5c,0x41, 0x8b,0x6c, 0x7b,0xc7, 0x50,0x4f, 0x72,0x47, - 0x9a,0x97, 0x98,0xd8, 0x6f,0x02, 0x74,0xe2, 0x79,0x68, 0x64,0x87, 0x77,0xa5, - 0x62,0xfc, 0x98,0x91, 0x8d,0x2b, 0x54,0xc1, 0x80,0x58, 0x4e,0x52, 0x57,0x6a, - 0x82,0xf9, 0x84,0x0d, 0x5e,0x73, 0x51,0xed, 0x74,0xf6, 0x8b,0xc4, 0x5c,0x4f, - 0x57,0x61, 0x6c,0xfc, 0x98,0x87, 0x5a,0x46, 0x78,0x34, 0x9b,0x44, 0x8f,0xeb, - 0x7c,0x95, 0x52,0x56, 0x62,0x51, 0x94,0xfa, 0x4e,0xc6, 0x83,0x86, 0x84,0x61, - 0x83,0xe9, 0x84,0xb2, 0x57,0xd4, 0x67,0x34, 0x57,0x03, 0x66,0x6e, 0x6d,0x66, - 0x8c,0x31, 0x66,0xdd, 0x70,0x11, 0x67,0x1f, 0x6b,0x3a, 0x68,0x16, 0x62,0x1a, - 0x59,0xbb, 0x4e,0x03, 0x51,0xc4, 0x6f,0x06, 0x67,0xd2, 0x6c,0x8f, 0x51,0x76, - 0x68,0xcb, 0x59,0x47, 0x6b,0x67, 0x75,0x66, 0x5d,0x0e, 0x81,0x10, 0x9f,0x50, - 0x65,0xd7, 0x79,0x48, 0x79,0x41, 0x9a,0x91, 0x8d,0x77, 0x5c,0x82, 0x4e,0x5e, - 0x4f,0x01, 0x54,0x2f, 0x59,0x51, 0x78,0x0c, 0x56,0x68, 0x6c,0x14, 0x8f,0xc4, - 0x5f,0x03, 0x6c,0x7d, 0x6c,0xe3, 0x8b,0xab, 0x63,0x90, 0x60,0x70, 0x6d,0x3d, - 0x72,0x75, 0x62,0x66, 0x94,0x8e, 0x94,0xc5, 0x53,0x43, 0x8f,0xc1, 0x7b,0x7e, - 0x4e,0xdf, 0x8c,0x26, 0x4e,0x7e, 0x9e,0xd4, 0x94,0xb1, 0x94,0xb3, 0x52,0x4d, - 0x6f,0x5c, 0x90,0x63, 0x6d,0x45, 0x8c,0x34, 0x58,0x11, 0x5d,0x4c, 0x6b,0x20, - 0x6b,0x49, 0x67,0xaa, 0x54,0x5b, 0x81,0x54, 0x7f,0x8c, 0x58,0x99, 0x85,0x37, - 0x5f,0x3a, 0x62,0xa2, 0x6a,0x47, 0x95,0x39, 0x65,0x72, 0x60,0x84, 0x68,0x65, - 0x77,0xa7, 0x4e,0x54, 0x4f,0xa8, 0x5d,0xe7, 0x97,0x98, 0x64,0xac, 0x7f,0xd8, - 0x5c,0xed, 0x4f,0xcf, 0x7a,0x8d, 0x52,0x07, 0x83,0x04, 0x4e,0x14, 0x60,0x2f, - 0x7a,0x83, 0x94,0xa6, 0x4f,0xb5, 0x4e,0xb2, 0x79,0xe6, 0x74,0x34, 0x52,0xe4, - 0x82,0xb9, 0x64,0xd2, 0x79,0xbd, 0x5b,0xdd, 0x6c,0x81, 0x97,0x52, 0x8f,0x7b, - 0x6c,0x22, 0x50,0x3e, 0x53,0x7f, 0x6e,0x05, 0x64,0xce, 0x66,0x74, 0x6c,0x30, - 0x60,0xc5, 0x98,0x77, 0x8b,0xf7, 0x5e,0x86, 0x74,0x3c, 0x7a,0x77, 0x79,0xcb, - 0x4e,0x18, 0x90,0xb1, 0x74,0x03, 0x6c,0x42, 0x56,0xda, 0x91,0x4b, 0x6c,0xc5, - 0x8d,0x8b, 0x53,0x3a, 0x86,0xc6, 0x66,0xf2, 0x8e,0xaf, 0x5c,0x48, 0x9a,0x71, - 0x6e,0x20, 0x53,0xd6, 0x5a,0x36, 0x9f,0x8b, 0x8d,0xa3, 0x53,0xbb, 0x57,0x08, - 0x98,0xa7, 0x67,0x43, 0x91,0x9b, 0x6c,0xc9, 0x51,0x68, 0x75,0xca, 0x62,0xf3, - 0x72,0xac, 0x52,0x38, 0x52,0x9d, 0x7f,0x3a, 0x70,0x94, 0x76,0x38, 0x53,0x74, - 0x9e,0x4a, 0x69,0xb7, 0x78,0x6e, 0x96,0xc0, 0x88,0xd9, 0x7f,0xa4, 0x71,0x36, - 0x71,0xc3, 0x51,0x89, 0x67,0xd3, 0x74,0xe4, 0x58,0xe4, 0x65,0x18, 0x56,0xb7, - 0x8b,0xa9, 0x99,0x76, 0x62,0x70, 0x7e,0xd5, 0x60,0xf9, 0x70,0xed, 0x58,0xec, - 0x4e,0xc1, 0x4e,0xba, 0x5f,0xcd, 0x97,0xe7, 0x4e,0xfb, 0x8b,0xa4, 0x52,0x03, - 0x59,0x8a, 0x7e,0xab, 0x62,0x54, 0x4e,0xcd, 0x65,0xe5, 0x62,0x0e, 0x83,0x38, - 0x84,0xc9, 0x83,0x63, 0x87,0x8d, 0x71,0x94, 0x6e,0xb6, 0x5b,0xb9, 0x7e,0xd2, - 0x51,0x97, 0x63,0xc9, 0x67,0xd4, 0x80,0x89, 0x83,0x39, 0x88,0x15, 0x51,0x12, - 0x5b,0x7a, 0x59,0x82, 0x8f,0xb1, 0x4e,0x73, 0x6c,0x5d, 0x51,0x65, 0x89,0x25, - 0x8f,0x6f, 0x96,0x2e, 0x85,0x4a, 0x74,0x5e, 0x95,0x10, 0x95,0xf0, 0x6d,0xa6, - 0x82,0xe5, 0x5f,0x31, 0x64,0x92, 0x6d,0x12, 0x84,0x28, 0x81,0x6e, 0x9c,0xc3, - 0x58,0x5e, 0x8d,0x5b, 0x4e,0x09, 0x53,0xc1, 0x4f,0x1e, 0x65,0x63, 0x68,0x51, - 0x55,0xd3, 0x4e,0x27, 0x64,0x14, 0x9a,0x9a, 0x62,0x6b, 0x5a,0xc2, 0x74,0x5f, - 0x82,0x72, 0x6d,0xa9, 0x68,0xee, 0x50,0xe7, 0x83,0x8e, 0x78,0x02, 0x67,0x40, - 0x52,0x39, 0x6c,0x99, 0x7e,0xb1, 0x50,0xbb, 0x55,0x65, 0x71,0x5e, 0x7b,0x5b, - 0x66,0x52, 0x73,0xca, 0x82,0xeb, 0x67,0x49, 0x5c,0x71, 0x52,0x20, 0x71,0x7d, - 0x88,0x6b, 0x95,0xea, 0x96,0x55, 0x64,0xc5, 0x8d,0x61, 0x81,0xb3, 0x55,0x84, - 0x6c,0x55, 0x62,0x47, 0x7f,0x2e, 0x58,0x92, 0x4f,0x24, 0x55,0x46, 0x8d,0x4f, - 0x66,0x4c, 0x4e,0x0a, 0x5c,0x1a, 0x88,0xf3, 0x68,0xa2, 0x63,0x4e, 0x7a,0x0d, - 0x70,0xe7, 0x82,0x8d, 0x52,0xfa, 0x97,0xf6, 0x5c,0x11, 0x54,0xe8, 0x90,0xb5, - 0x7e,0xcd, 0x59,0x62, 0x8d,0x4a, 0x86,0xc7, 0x82,0x0c, 0x82,0x0d, 0x8d,0x66, - 0x64,0x44, 0x5c,0x04, 0x61,0x51, 0x6d,0x89, 0x79,0x3e, 0x8b,0xbe, 0x78,0x37, - 0x75,0x33, 0x54,0x7b, 0x4f,0x38, 0x8e,0xab, 0x6d,0xf1, 0x5a,0x20, 0x7e,0xc5, - 0x79,0x5e, 0x6c,0x88, 0x5b,0xa1, 0x5a,0x76, 0x75,0x1a, 0x80,0xbe, 0x61,0x4e, - 0x6e,0x17, 0x58,0xf0, 0x75,0x1f, 0x75,0x25, 0x72,0x72, 0x53,0x47, 0x7e,0xf3, - 0x77,0x01, 0x76,0xdb, 0x52,0x69, 0x80,0xdc, 0x57,0x23, 0x5e,0x08, 0x59,0x31, - 0x72,0xee, 0x65,0xbd, 0x6e,0x7f, 0x8b,0xd7, 0x5c,0x38, 0x86,0x71, 0x53,0x41, - 0x77,0xf3, 0x62,0xfe, 0x65,0xf6, 0x4e,0xc0, 0x98,0xdf, 0x86,0x80, 0x5b,0x9e, - 0x8b,0xc6, 0x53,0xf2, 0x77,0xe2, 0x4f,0x7f, 0x5c,0x4e, 0x9a,0x76, 0x59,0xcb, - 0x5f,0x0f, 0x79,0x3a, 0x58,0xeb, 0x4e,0x16, 0x67,0xff, 0x4e,0x8b, 0x62,0xed, - 0x8a,0x93, 0x90,0x1d, 0x52,0xbf, 0x66,0x2f, 0x55,0xdc, 0x56,0x6c, 0x90,0x02, - 0x4e,0xd5, 0x4f,0x8d, 0x91,0xca, 0x99,0x70, 0x6c,0x0f, 0x5e,0x02, 0x60,0x43, - 0x5b,0xa4, 0x89,0xc6, 0x8b,0xd5, 0x65,0x36, 0x62,0x4b, 0x99,0x96, 0x5b,0x88, - 0x5b,0xff, 0x63,0x88, 0x55,0x2e, 0x53,0xd7, 0x76,0x26, 0x51,0x7d, 0x85,0x2c, - 0x67,0xa2, 0x68,0xb3, 0x6b,0x8a, 0x62,0x92, 0x8f,0x93, 0x53,0xd4, 0x82,0x12, - 0x6d,0xd1, 0x75,0x8f, 0x4e,0x66, 0x8d,0x4e, 0x5b,0x70, 0x71,0x9f, 0x85,0xaf, - 0x66,0x91, 0x66,0xd9, 0x7f,0x72, 0x87,0x00, 0x9e,0xcd, 0x9f,0x20, 0x5c,0x5e, - 0x67,0x2f, 0x8f,0xf0, 0x68,0x11, 0x67,0x5f, 0x62,0x0d, 0x7a,0xd6, 0x58,0x85, - 0x5e,0xb6, 0x65,0x70, 0x6f,0x31, 0x60,0x55, 0x52,0x37, 0x80,0x0d, 0x64,0x54, - 0x88,0x70, 0x75,0x29, 0x5e,0x05, 0x68,0x13, 0x62,0xf4, 0x97,0x1c, 0x53,0xcc, - 0x72,0x3d, 0x8c,0x01, 0x6c,0x34, 0x77,0x61, 0x7a,0x0e, 0x54,0x2e, 0x77,0xac, - 0x98,0x7a, 0x82,0x1c, 0x8b,0xf4, 0x78,0x55, 0x67,0x14, 0x70,0xc1, 0x65,0xaf, - 0x64,0x95, 0x56,0x36, 0x60,0x1d, 0x79,0xc1, 0x53,0xf8, 0x4e,0x1d, 0x6b,0x7b, - 0x80,0x86, 0x5b,0xfa, 0x55,0xe3, 0x56,0xdb, 0x4f,0x3a, 0x4f,0x3c, 0x99,0x72, - 0x5d,0xf3, 0x67,0x7e, 0x80,0x38, 0x60,0x02, 0x98,0x82, 0x90,0x01, 0x5b,0x8b, - 0x8b,0xbc, 0x8b,0xf5, 0x64,0x1c, 0x82,0x58, 0x64,0xde, 0x55,0xfd, 0x82,0xcf, - 0x91,0x65, 0x4f,0xd7, 0x7d,0x20, 0x90,0x1f, 0x7c,0x9f, 0x50,0xf3, 0x58,0x51, - 0x6e,0xaf, 0x5b,0xbf, 0x8b,0xc9, 0x80,0x83, 0x91,0x78, 0x84,0x9c, 0x7b,0x97, - 0x86,0x7d, 0x96,0x8b, 0x96,0x8f, 0x7e,0xe5, 0x9a,0xd3, 0x78,0x8e, 0x5c,0x81, - 0x7a,0x57, 0x90,0x42, 0x96,0xa7, 0x79,0x5f, 0x5b,0x59, 0x63,0x5f, 0x7b,0x0b, - 0x84,0xd1, 0x68,0xad, 0x55,0x06, 0x7f,0x29, 0x74,0x10, 0x7d,0x22, 0x95,0x01, - 0x62,0x40, 0x58,0x4c, 0x4e,0xd6, 0x5b,0x83, 0x59,0x79, 0x58,0x54, 0x73,0x6d, - 0x63,0x1e, 0x8e,0x4b, 0x8e,0x0f, 0x80,0xce, 0x82,0xd4, 0x62,0xac, 0x53,0xf0, - 0x6c,0xf0, 0x91,0x5e, 0x59,0x2a, 0x60,0x01, 0x6c,0x70, 0x57,0x4d, 0x64,0x4a, - 0x8d,0x2a, 0x76,0x2b, 0x6e,0xe9, 0x57,0x5b, 0x6a,0x80, 0x75,0xf0, 0x6f,0x6d, - 0x8c,0x2d, 0x8c,0x08, 0x57,0x66, 0x6b,0xef, 0x88,0x92, 0x78,0xb3, 0x63,0xa2, - 0x53,0xf9, 0x70,0xad, 0x6c,0x64, 0x58,0x58, 0x64,0x2a, 0x58,0x02, 0x68,0xe0, - 0x81,0x9b, 0x55,0x10, 0x7c,0xd6, 0x50,0x18, 0x8e,0xba, 0x6d,0xcc, 0x8d,0x9f, - 0x70,0xeb, 0x63,0x8f, 0x6d,0x9b, 0x6e,0xd4, 0x7e,0xe6, 0x84,0x04, 0x68,0x43, - 0x90,0x03, 0x6d,0xd8, 0x96,0x76, 0x8b,0xa8, 0x59,0x57, 0x72,0x79, 0x85,0xe4, - 0x81,0x7e, 0x75,0xbc, 0x8a,0x8a, 0x68,0xaf, 0x52,0x54, 0x8e,0x22, 0x95,0x11, - 0x63,0xd0, 0x98,0x98, 0x8e,0x44, 0x55,0x7c, 0x4f,0x53, 0x66,0xff, 0x56,0x8f, - 0x60,0xd5, 0x6d,0x95, 0x52,0x43, 0x5c,0x49, 0x59,0x29, 0x6d,0xfb, 0x58,0x6b, - 0x75,0x30, 0x75,0x1c, 0x60,0x6c, 0x82,0x14, 0x81,0x46, 0x63,0x11, 0x67,0x61, - 0x8f,0xe2, 0x77,0x3a, 0x8d,0xf3, 0x8d,0x34, 0x94,0xc1, 0x5e,0x16, 0x53,0x85, - 0x54,0x2c, 0x70,0xc3, 0x6c,0x40, 0x5e,0xf7, 0x50,0x5c, 0x4e,0xad, 0x5e,0xad, - 0x63,0x3a, 0x82,0x47, 0x90,0x1a, 0x68,0x50, 0x91,0x6e, 0x77,0xb3, 0x54,0x0c, - 0x94,0xdc, 0x5f,0x64, 0x7a,0xe5, 0x68,0x76, 0x63,0x45, 0x7b,0x52, 0x7e,0xdf, - 0x75,0xdb, 0x50,0x77, 0x62,0x95, 0x59,0x34, 0x90,0x0f, 0x51,0xf8, 0x79,0xc3, - 0x7a,0x81, 0x56,0xfe, 0x5f,0x92, 0x90,0x14, 0x6d,0x82, 0x5c,0x60, 0x57,0x1f, - 0x54,0x10, 0x51,0x54, 0x6e,0x4d, 0x56,0xe2, 0x63,0xa8, 0x98,0x93, 0x81,0x7f, - 0x87,0x15, 0x89,0x2a, 0x90,0x00, 0x54,0x1e, 0x5c,0x6f, 0x81,0xc0, 0x62,0xd6, - 0x62,0x58, 0x81,0x31, 0x9e,0x35, 0x96,0x40, 0x9a,0x6e, 0x9a,0x7c, 0x69,0x2d, - 0x59,0xa5, 0x62,0xd3, 0x55,0x3e, 0x63,0x16, 0x54,0xc7, 0x86,0xd9, 0x6d,0x3c, - 0x5a,0x03, 0x74,0xe6, 0x88,0x9c, 0x6b,0x6a, 0x59,0x16, 0x8c,0x4c, 0x5f,0x2f, - 0x6e,0x7e, 0x73,0xa9, 0x98,0x7d, 0x4e,0x38, 0x70,0xf7, 0x5b,0x8c, 0x78,0x97, - 0x63,0x3d, 0x66,0x5a, 0x76,0x96, 0x60,0xcb, 0x5b,0x9b, 0x5a,0x49, 0x4e,0x07, - 0x81,0x55, 0x6c,0x6a, 0x73,0x8b, 0x4e,0xa1, 0x67,0x89, 0x7f,0x51, 0x5f,0x80, - 0x65,0xfa, 0x67,0x1b, 0x5f,0xd8, 0x59,0x84, 0x5a,0x01, 0x5d,0xcd, 0x5f,0xae, - 0x53,0x71, 0x97,0xe6, 0x8f,0xdd, 0x68,0x45, 0x56,0xf4, 0x55,0x2f, 0x60,0xdf, - 0x4e,0x3a, 0x6f,0x4d, 0x7e,0xf4, 0x82,0xc7, 0x84,0x0e, 0x59,0xd4, 0x4f,0x1f, - 0x4f,0x2a, 0x5c,0x3e, 0x7e,0xac, 0x67,0x2a, 0x85,0x1a, 0x54,0x73, 0x75,0x4f, - 0x80,0xc3, 0x55,0x82, 0x9b,0x4f, 0x4f,0x4d, 0x6e,0x2d, 0x8c,0x13, 0x5c,0x09, - 0x61,0x70, 0x53,0x6b, 0x76,0x1f, 0x6e,0x29, 0x86,0x8a, 0x65,0x87, 0x95,0xfb, - 0x7e,0xb9, 0x54,0x3b, 0x7a,0x33, 0x7d,0x0a, 0x95,0xee, 0x55,0xe1, 0x7f,0xc1, - 0x74,0xee, 0x63,0x1d, 0x87,0x17, 0x6d,0xa1, 0x7a,0x9d, 0x62,0x11, 0x65,0xa1, - 0x53,0x67, 0x63,0xe1, 0x6c,0x83, 0x5d,0xeb, 0x54,0x5c, 0x94,0xa8, 0x4e,0x4c, - 0x6c,0x61, 0x8b,0xec, 0x5c,0x4b, 0x65,0xe0, 0x82,0x9c, 0x68,0xa7, 0x54,0x3e, - 0x54,0x34, 0x6b,0xcb, 0x6b,0x66, 0x4e,0x94, 0x63,0x42, 0x53,0x48, 0x82,0x1e, - 0x4f,0x0d, 0x4f,0xae, 0x57,0x5e, 0x62,0x0a, 0x96,0xfe, 0x66,0x64, 0x72,0x69, - 0x52,0xff, 0x52,0xa1, 0x60,0x9f, 0x8b,0xef, 0x66,0x14, 0x71,0x99, 0x67,0x90, - 0x89,0x7f, 0x78,0x52, 0x77,0xfd, 0x66,0x70, 0x56,0x3b, 0x54,0x38, 0x95,0x21, - 0x72,0x7a, 0x7a,0x00, 0x60,0x6f, 0x5e,0x0c, 0x60,0x89, 0x81,0x9d, 0x59,0x15, - 0x60,0xdc, 0x71,0x84, 0x70,0xef, 0x6e,0xaa, 0x6c,0x50, 0x72,0x80, 0x6a,0x84, - 0x88,0xad, 0x5e,0x2d, 0x4e,0x60, 0x5a,0xb3, 0x55,0x9c, 0x94,0xe3, 0x6d,0x17, - 0x7c,0xfb, 0x96,0x99, 0x62,0x0f, 0x7e,0xc6, 0x77,0x8e, 0x86,0x7e, 0x53,0x23, - 0x97,0x1e, 0x8f,0x96, 0x66,0x87, 0x5c,0xe1, 0x4f,0xa0, 0x72,0xed, 0x4e,0x0b, - 0x53,0xa6, 0x59,0x0f, 0x54,0x13, 0x63,0x80, 0x95,0x28, 0x51,0x48, 0x4e,0xd9, - 0x9c,0x9c, 0x7e,0xa4, 0x54,0xb8, 0x8d,0x24, 0x88,0x54, 0x82,0x37, 0x95,0xf2, - 0x6d,0x8e, 0x5f,0x26, 0x5a,0xcc, 0x66,0x3e, 0x96,0x69, 0x73,0xb0, 0x73,0x2e, - 0x53,0xbf, 0x81,0x7a, 0x99,0x85, 0x7f,0xa1, 0x5b,0xaa, 0x96,0x77, 0x96,0x50, - 0x7e,0xbf, 0x76,0xf8, 0x53,0xa2, 0x95,0x76, 0x99,0x99, 0x7b,0xb1, 0x89,0x44, - 0x6e,0x58, 0x4e,0x61, 0x7f,0xd4, 0x79,0x65, 0x8b,0xe6, 0x60,0xf3, 0x54,0xcd, - 0x4e,0xab, 0x98,0x79, 0x5d,0xf7, 0x6a,0x61, 0x50,0xcf, 0x54,0x11, 0x8c,0x61, - 0x84,0x27, 0x78,0x5d, 0x97,0x04, 0x52,0x4a, 0x54,0xee, 0x56,0xa3, 0x95,0x00, - 0x6d,0x88, 0x5b,0xb5, 0x6d,0xc6, 0x66,0x53, 0x5c,0x0f, 0x5b,0x5d, 0x68,0x21, - 0x80,0x96, 0x55,0x78, 0x7b,0x11, 0x65,0x48, 0x69,0x54, 0x4e,0x9b, 0x6b,0x47, - 0x87,0x4e, 0x97,0x8b, 0x53,0x4f, 0x63,0x1f, 0x64,0x3a, 0x90,0xaa, 0x65,0x9c, - 0x80,0xc1, 0x8c,0x10, 0x51,0x99, 0x68,0xb0, 0x53,0x78, 0x87,0xf9, 0x61,0xc8, - 0x6c,0xc4, 0x6c,0xfb, 0x8c,0x22, 0x5c,0x51, 0x85,0xaa, 0x82,0xaf, 0x95,0x0c, - 0x6b,0x23, 0x8f,0x9b, 0x65,0xb0, 0x5f,0xfb, 0x5f,0xc3, 0x4f,0xe1, 0x88,0x45, - 0x66,0x1f, 0x81,0x65, 0x73,0x29, 0x60,0xfa, 0x51,0x74, 0x52,0x11, 0x57,0x8b, - 0x5f,0x62, 0x90,0xa2, 0x88,0x4c, 0x91,0x92, 0x5e,0x78, 0x67,0x4f, 0x60,0x27, - 0x59,0xd3, 0x51,0x44, 0x51,0xf6, 0x80,0xf8, 0x53,0x08, 0x6c,0x79, 0x96,0xc4, - 0x71,0x8a, 0x4f,0x11, 0x4f,0xee, 0x7f,0x9e, 0x67,0x3d, 0x55,0xc5, 0x95,0x08, - 0x79,0xc0, 0x88,0x96, 0x7e,0xe3, 0x58,0x9f, 0x62,0x0c, 0x97,0x00, 0x86,0x5a, - 0x56,0x18, 0x98,0x7b, 0x5f,0x90, 0x8b,0xb8, 0x84,0xc4, 0x91,0x57, 0x53,0xd9, - 0x65,0xed, 0x5e,0x8f, 0x75,0x5c, 0x60,0x64, 0x7d,0x6e, 0x5a,0x7f, 0x7e,0xea, - 0x7e,0xed, 0x8f,0x69, 0x55,0xa7, 0x5b,0xa3, 0x60,0xac, 0x65,0xcb, 0x73,0x84, - 0x90,0x09, 0x76,0x63, 0x77,0x29, 0x7e,0xda, 0x97,0x74, 0x85,0x9b, 0x5b,0x66, - 0x7a,0x74, 0x96,0xea, 0x88,0x40, 0x52,0xcb, 0x71,0x8f, 0x5f,0xaa, 0x65,0xec, - 0x8b,0xe2, 0x5b,0xfb, 0x9a,0x6f, 0x5d,0xe1, 0x6b,0x89, 0x6c,0x5b, 0x8b,0xad, - 0x8b,0xaf, 0x90,0x0a, 0x8f,0xc5, 0x53,0x8b, 0x62,0xbc, 0x9e,0x26, 0x9e,0x2d, - 0x54,0x40, 0x4e,0x2b, 0x82,0xbd, 0x72,0x59, 0x86,0x9c, 0x5d,0x16, 0x88,0x59, - 0x6d,0xaf, 0x96,0xc5, 0x54,0xd1, 0x4e,0x9a, 0x8b,0xb6, 0x71,0x09, 0x54,0xbd, - 0x96,0x09, 0x70,0xdf, 0x6d,0xf9, 0x76,0xd0, 0x4e,0x25, 0x78,0x14, 0x87,0x12, - 0x5c,0xa9, 0x5e,0xf6, 0x8a,0x00, 0x98,0x9c, 0x96,0x0e, 0x70,0x8e, 0x6c,0xbf, - 0x59,0x44, 0x63,0xa9, 0x77,0x3c, 0x88,0x4d, 0x6f,0x14, 0x82,0x73, 0x58,0x30, - 0x71,0xd5, 0x53,0x8c, 0x78,0x1a, 0x96,0xc1, 0x55,0x01, 0x5f,0x66, 0x71,0x30, - 0x5b,0xb4, 0x8c,0x1a, 0x9a,0x8c, 0x6b,0x83, 0x59,0x2e, 0x9e,0x2f, 0x79,0xe7, - 0x67,0x68, 0x62,0x6c, 0x4f,0x6f, 0x75,0xa1, 0x7f,0x8a, 0x6d,0x0b, 0x96,0x33, - 0x6c,0x27, 0x4e,0xf0, 0x75,0xd2, 0x51,0x7b, 0x68,0x37, 0x6f,0x3e, 0x90,0x80, - 0x81,0x70, 0x59,0x96, 0x74,0x76, 0x64,0x47, 0x5c,0x27, 0x90,0x65, 0x7a,0x91, - 0x8c,0x23, 0x59,0xda, 0x54,0xac, 0x82,0x00, 0x83,0x6f, 0x89,0x81, 0x80,0x00, - 0x69,0x30, 0x56,0x4e, 0x80,0x36, 0x72,0x37, 0x91,0xce, 0x51,0xb6, 0x4e,0x5f, - 0x98,0x75, 0x63,0x96, 0x4e,0x1a, 0x53,0xf6, 0x66,0xf3, 0x81,0x4b, 0x59,0x1c, - 0x6d,0xb2, 0x4e,0x00, 0x58,0xf9, 0x53,0x3b, 0x63,0xd6, 0x94,0xf1, 0x4f,0x9d, - 0x4f,0x0a, 0x88,0x63, 0x98,0x90, 0x59,0x37, 0x90,0x57, 0x79,0xfb, 0x4e,0xea, - 0x80,0xf0, 0x75,0x91, 0x6c,0x82, 0x5b,0x9c, 0x59,0xe8, 0x5f,0x5d, 0x69,0x05, - 0x86,0x81, 0x50,0x1a, 0x5d,0xf2, 0x4e,0x59, 0x77,0xe3, 0x4e,0xe5, 0x82,0x7a, - 0x62,0x91, 0x66,0x13, 0x90,0x91, 0x5c,0x79, 0x4e,0xbf, 0x5f,0x79, 0x81,0xc6, - 0x90,0x38, 0x80,0x84, 0x75,0xab, 0x4e,0xa6, 0x88,0xd4, 0x61,0x0f, 0x6b,0xc5, - 0x5f,0xc6, 0x4e,0x49, 0x76,0xca, 0x6e,0xa2, 0x8b,0xe3, 0x8b,0xae, 0x8c,0x0a, - 0x8b,0xd1, 0x5f,0x02, 0x7f,0xfc, 0x7f,0xcc, 0x7e,0xce, 0x83,0x35, 0x83,0x6b, - 0x56,0xe0, 0x6b,0xb7, 0x97,0xf3, 0x96,0x34, 0x59,0xfb, 0x54,0x1f, 0x94,0xf6, - 0x6d,0xeb, 0x5b,0xc5, 0x99,0x6e, 0x5c,0x39, 0x5f,0x15, 0x96,0x90, 0x53,0x70, - 0x82,0xf1, 0x6a,0x31, 0x5a,0x74, 0x9e,0x70, 0x5e,0x94, 0x7f,0x28, 0x83,0xb9, - 0x84,0x24, 0x84,0x25, 0x83,0x67, 0x87,0x47, 0x8f,0xce, 0x8d,0x62, 0x76,0xc8, - 0x5f,0x71, 0x98,0x96, 0x78,0x6c, 0x66,0x20, 0x54,0xdf, 0x62,0xe5, 0x4f,0x63, - 0x81,0xc3, 0x75,0xc8, 0x5e,0xb8, 0x96,0xcd, 0x8e,0x0a, 0x86,0xf9, 0x54,0x8f, - 0x6c,0xf3, 0x6d,0x8c, 0x6c,0x38, 0x60,0x7f, 0x52,0xc7, 0x75,0x28, 0x5e,0x7d, - 0x4f,0x18, 0x60,0xa0, 0x5f,0xe7, 0x5c,0x24, 0x75,0x31, 0x90,0xae, 0x94,0xc0, - 0x72,0xb9, 0x6c,0xb9, 0x6e,0x38, 0x91,0x49, 0x67,0x09, 0x53,0xcb, 0x53,0xf3, - 0x4f,0x51, 0x91,0xc9, 0x8b,0xf1, 0x53,0xc8, 0x5e,0x7c, 0x8f,0xc2, 0x6d,0xe4, - 0x4e,0x8e, 0x76,0xc2, 0x69,0x86, 0x86,0x5e, 0x61,0x1a, 0x82,0x06, 0x4f,0x59, - 0x4f,0xde, 0x90,0x3e, 0x9c,0x7c, 0x61,0x09, 0x6e,0x1d, 0x6e,0x14, 0x96,0x85, - 0x4e,0x88, 0x5a,0x31, 0x96,0xe8, 0x4e,0x0e, 0x5c,0x7f, 0x79,0xb9, 0x5b,0x87, - 0x8b,0xed, 0x7f,0xbd, 0x73,0x89, 0x57,0xdf, 0x82,0x8b, 0x90,0xc1, 0x54,0x01, - 0x90,0x47, 0x55,0xbb, 0x5c,0xea, 0x5f,0xa1, 0x61,0x08, 0x6b,0x32, 0x72,0xf1, - 0x80,0xb2, 0x8a,0x89, 0x6d,0x74, 0x5b,0xd3, 0x88,0xd5, 0x98,0x84, 0x8c,0x6b, - 0x9a,0x6d, 0x9e,0x33, 0x6e,0x0a, 0x51,0xa4, 0x51,0x43, 0x57,0xa3, 0x88,0x81, - 0x53,0x9f, 0x63,0xf4, 0x8f,0x95, 0x56,0xed, 0x54,0x58, 0x57,0x06, 0x73,0x3f, - 0x6e,0x90, 0x7f,0x18, 0x8f,0xdc, 0x82,0xd1, 0x61,0x3f, 0x60,0x28, 0x96,0x62, - 0x66,0xf0, 0x7e,0xa6, 0x8d,0x8a, 0x8d,0xc3, 0x94,0xa5, 0x5c,0xb3, 0x7c,0xa4, - 0x67,0x08, 0x60,0xa6, 0x96,0x05, 0x80,0x18, 0x4e,0x91, 0x90,0xe7, 0x53,0x00, - 0x96,0x68, 0x51,0x41, 0x8f,0xd0, 0x85,0x74, 0x91,0x5d, 0x66,0x55, 0x97,0xf5, - 0x5b,0x55, 0x53,0x1d, 0x78,0x38, 0x67,0x42, 0x68,0x3d, 0x54,0xc9, 0x70,0x7e, - 0x5b,0xb0, 0x8f,0x7d, 0x51,0x8d, 0x57,0x28, 0x54,0xb1, 0x65,0x12, 0x66,0x82, - 0x8d,0x5e, 0x8d,0x43, 0x81,0x0f, 0x84,0x6c, 0x90,0x6d, 0x7c,0xdf, 0x51,0xff, - 0x85,0xfb, 0x67,0xa3, 0x65,0xe9, 0x6f,0xa1, 0x86,0xa4, 0x8e,0x81, 0x56,0x6a, - 0x90,0x20, 0x76,0x82, 0x70,0x76, 0x71,0xe5, 0x8d,0x23, 0x62,0xe9, 0x52,0x19, - 0x6c,0xfd, 0x8d,0x3c, 0x60,0x0e, 0x58,0x9e, 0x61,0x8e, 0x66,0xfe, 0x8d,0x60, - 0x62,0x4e, 0x55,0xb3, 0x6e,0x23, 0x67,0x2d, 0x8f,0x67, 0x94,0xe1, 0x95,0xf8, - 0x77,0x28, 0x68,0x05, 0x69,0xa8, 0x54,0x8b, 0x4e,0x4d, 0x70,0xb8, 0x8b,0xc8, - 0x64,0x58, 0x65,0x8b, 0x5b,0x85, 0x7a,0x84, 0x50,0x3a, 0x5b,0xe8, 0x77,0xbb, - 0x6b,0xe1, 0x8a,0x79, 0x7c,0x98, 0x6c,0xbe, 0x76,0xcf, 0x65,0xa9, 0x8f,0x97, - 0x5d,0x2d, 0x5c,0x55, 0x86,0x38, 0x68,0x08, 0x53,0x60, 0x62,0x18, 0x7a,0xd9, - 0x6e,0x5b, 0x7e,0xfd, 0x6a,0x1f, 0x7a,0xe0, 0x5f,0x70, 0x6f,0x33, 0x5f,0x20, - 0x63,0x8c, 0x6d,0xa8, 0x67,0x56, 0x4e,0x08, 0x5e,0x10, 0x8d,0x26, 0x4e,0xd7, - 0x80,0xc0, 0x76,0x34, 0x96,0x9c, 0x62,0xdb, 0x66,0x2d, 0x62,0x7e, 0x6c,0xbc, - 0x8d,0x75, 0x71,0x67, 0x7f,0x69, 0x51,0x46, 0x80,0x87, 0x53,0xec, 0x90,0x6e, - 0x62,0x98, 0x54,0xf2, 0x86,0xf0, 0x8f,0x99, 0x80,0x05, 0x95,0x17, 0x85,0x17, - 0x8f,0xd9, 0x6d,0x59, 0x73,0xcd, 0x65,0x9f, 0x77,0x1f, 0x75,0x04, 0x78,0x27, - 0x81,0xfb, 0x8d,0x1e, 0x94,0x88, 0x4f,0xa6, 0x67,0x95, 0x75,0xb9, 0x8b,0xca, - 0x97,0x07, 0x63,0x2f, 0x95,0x47, 0x96,0x35, 0x84,0xb8, 0x63,0x23, 0x77,0x41, - 0x5f,0x81, 0x72,0xf0, 0x4e,0x89, 0x60,0x14, 0x65,0x74, 0x62,0xef, 0x6b,0x63, - 0x65,0x3f, 0x5e,0x27, 0x75,0xc7, 0x90,0xd1, 0x8b,0xc1, 0x82,0x9d, 0x67,0x9d, - 0x65,0x2f, 0x54,0x31, 0x87,0x18, 0x77,0xe5, 0x80,0xa2, 0x81,0x02, 0x6c,0x41, - 0x4e,0x4b, 0x7e,0xc7, 0x80,0x4c, 0x76,0xf4, 0x69,0x0d, 0x6b,0x96, 0x62,0x67, - 0x50,0x3c, 0x4f,0x84, 0x57,0x40, 0x63,0x07, 0x6b,0x62, 0x8d,0xbe, 0x53,0xea, - 0x65,0xe8, 0x7e,0xb8, 0x5f,0xd7, 0x63,0x1a, 0x63,0xb7, 0x81,0xf3, 0x81,0xf4, - 0x7f,0x6e, 0x5e,0x1c, 0x5c,0xd9, 0x52,0x36, 0x66,0x7a, 0x79,0xe9, 0x7a,0x1a, - 0x8d,0x28, 0x70,0x99, 0x75,0xd4, 0x6e,0xde, 0x6c,0xbb, 0x7a,0x92, 0x4e,0x2d, - 0x76,0xc5, 0x5f,0xe0, 0x94,0x9f, 0x88,0x77, 0x7e,0xc8, 0x79,0xcd, 0x80,0xbf, - 0x91,0xcd, 0x4e,0xf2, 0x4f,0x17, 0x82,0x1f, 0x54,0x68, 0x5d,0xde, 0x6d,0x32, - 0x8b,0xcc, 0x7c,0xa5, 0x8f,0x74, 0x80,0x98, 0x5e,0x1a, 0x54,0x92, 0x76,0xb1, - 0x5b,0x99, 0x66,0x3c, 0x9a,0xa4, 0x73,0xe0, 0x68,0x2a, 0x86,0xdb, 0x67,0x31, - 0x73,0x2a, 0x8b,0xf8, 0x8b,0xdb, 0x90,0x10, 0x7a,0xf9, 0x70,0xdb, 0x71,0x6e, - 0x62,0xc4, 0x77,0xa9, 0x56,0x31, 0x4e,0x3b, 0x84,0x57, 0x67,0xf1, 0x52,0xa9, - 0x86,0xc0, 0x8d,0x2e, 0x94,0xf8, 0x7b,0x51, 0x4f,0x4f, 0x6c,0xe8, 0x79,0x5d, - 0x9a,0x7b, 0x62,0x93, 0x72,0x2a, 0x62,0xfd, 0x4e,0x13, 0x78,0x16, 0x8f,0x6c, - 0x64,0xb0, 0x8d,0x5a, 0x7b,0xc6, 0x68,0x69, 0x5e,0x84, 0x88,0xc5, 0x59,0x86, - 0x64,0x9e, 0x58,0xee, 0x72,0xb6, 0x69,0x0e, 0x95,0x25, 0x8f,0xfd, 0x8d,0x58, - 0x57,0x60, 0x7f,0x00, 0x8c,0x06, 0x51,0xc6, 0x63,0x49, 0x62,0xd9, 0x53,0x53, - 0x68,0x4c, 0x74,0x22, 0x83,0x01, 0x91,0x4c, 0x55,0x44, 0x77,0x40, 0x70,0x7c, - 0x6d,0x4a, 0x51,0x79, 0x54,0xa8, 0x8d,0x44, 0x59,0xff, 0x6e,0xcb, 0x6d,0xc4, - 0x5b,0x5c, 0x7d,0x2b, 0x4e,0xd4, 0x7c,0x7d, 0x6e,0xd3, 0x5b,0x50, 0x81,0xea, - 0x6e,0x0d, 0x5b,0x57, 0x9b,0x03, 0x68,0xd5, 0x8e,0x2a, 0x5b,0x97, 0x7e,0xfc, - 0x60,0x3b, 0x7e,0xb5, 0x90,0xb9, 0x8d,0x70, 0x59,0x4f, 0x63,0xcd, 0x79,0xdf, - 0x8d,0xb3, 0x53,0x52, 0x65,0xcf, 0x79,0x56, 0x8b,0xc5, 0x96,0x3b, 0x7e,0xc4, - 0x94,0xbb, 0x7e,0x82, 0x56,0x34, 0x91,0x89, 0x67,0x00, 0x7f,0x6a, 0x5c,0x0a, - 0x90,0x75, 0x66,0x28, 0x5d,0xe6, 0x4f,0x50, 0x67,0xde, 0x50,0x5a, 0x4f,0x5c, - 0x57,0x50, 0x5e,0xa7, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, 0xff,0xfd, - 0x4e,0x8d, 0x4e,0x0c, 0x51,0x40, 0x4e,0x10, 0x5e,0xff, 0x53,0x45, 0x4e,0x15, - 0x4e,0x98, 0x4e,0x1e, 0x9b,0x32, 0x5b,0x6c, 0x56,0x69, 0x4e,0x28, 0x79,0xba, - 0x4e,0x3f, 0x53,0x15, 0x4e,0x47, 0x59,0x2d, 0x72,0x3b, 0x53,0x6e, 0x6c,0x10, - 0x56,0xdf, 0x80,0xe4, 0x99,0x97, 0x6b,0xd3, 0x77,0x7e, 0x9f,0x17, 0x4e,0x36, - 0x4e,0x9f, 0x9f,0x10, 0x4e,0x5c, 0x4e,0x69, 0x4e,0x93, 0x82,0x88, 0x5b,0x5b, - 0x55,0x6c, 0x56,0x0f, 0x4e,0xc4, 0x53,0x8d, 0x53,0x9d, 0x53,0xa3, 0x53,0xa5, - 0x53,0xae, 0x97,0x65, 0x8d,0x5d, 0x53,0x1a, 0x53,0xf5, 0x53,0x26, 0x53,0x2e, - 0x53,0x3e, 0x8d,0x5c, 0x53,0x66, 0x53,0x63, 0x52,0x02, 0x52,0x08, 0x52,0x0e, - 0x52,0x2d, 0x52,0x33, 0x52,0x3f, 0x52,0x40, 0x52,0x4c, 0x52,0x5e, 0x52,0x61, - 0x52,0x5c, 0x84,0xaf, 0x52,0x7d, 0x52,0x82, 0x52,0x81, 0x52,0x90, 0x52,0x93, - 0x51,0x82, 0x7f,0x54, 0x4e,0xbb, 0x4e,0xc3, 0x4e,0xc9, 0x4e,0xc2, 0x4e,0xe8, - 0x4e,0xe1, 0x4e,0xeb, 0x4e,0xde, 0x4f,0x1b, 0x4e,0xf3, 0x4f,0x22, 0x4f,0x64, - 0x4e,0xf5, 0x4f,0x25, 0x4f,0x27, 0x4f,0x09, 0x4f,0x2b, 0x4f,0x5e, 0x4f,0x67, - 0x65,0x38, 0x4f,0x5a, 0x4f,0x5d, 0x4f,0x5f, 0x4f,0x57, 0x4f,0x32, 0x4f,0x3d, - 0x4f,0x76, 0x4f,0x74, 0x4f,0x91, 0x4f,0x89, 0x4f,0x83, 0x4f,0x8f, 0x4f,0x7e, - 0x4f,0x7b, 0x4f,0xaa, 0x4f,0x7c, 0x4f,0xac, 0x4f,0x94, 0x4f,0xe6, 0x4f,0xe8, - 0x4f,0xea, 0x4f,0xc5, 0x4f,0xda, 0x4f,0xe3, 0x4f,0xdc, 0x4f,0xd1, 0x4f,0xdf, - 0x4f,0xf8, 0x50,0x29, 0x50,0x4c, 0x4f,0xf3, 0x50,0x2c, 0x50,0x0f, 0x50,0x2e, - 0x50,0x2d, 0x4f,0xfe, 0x50,0x1c, 0x50,0x0c, 0x50,0x25, 0x50,0x28, 0x50,0x7e, - 0x50,0x43, 0x50,0x55, 0x50,0x48, 0x50,0x4e, 0x50,0x6c, 0x50,0x7b, 0x50,0xa5, - 0x50,0xa7, 0x50,0xa9, 0x50,0xba, 0x50,0xd6, 0x51,0x06, 0x50,0xed, 0x50,0xec, - 0x50,0xe6, 0x50,0xee, 0x51,0x07, 0x51,0x0b, 0x4e,0xdd, 0x6c,0x3d, 0x4f,0x58, - 0x4f,0x65, 0x4f,0xce, 0x9f,0xa0, 0x6c,0x46, 0x7c,0x74, 0x51,0x6e, 0x5d,0xfd, - 0x9e,0xc9, 0x99,0x98, 0x51,0x81, 0x59,0x14, 0x52,0xf9, 0x53,0x0d, 0x8a,0x07, - 0x53,0x10, 0x51,0xeb, 0x59,0x19, 0x51,0x55, 0x4e,0xa0, 0x51,0x56, 0x4e,0xb3, - 0x88,0x6e, 0x88,0xa4, 0x4e,0xb5, 0x81,0x14, 0x88,0xd2, 0x79,0x80, 0x5b,0x34, - 0x88,0x03, 0x7f,0xb8, 0x51,0xab, 0x51,0xb1, 0x51,0xbd, 0x51,0xbc, 0x51,0xc7, - 0x51,0x96, 0x51,0xa2, 0x51,0xa5, 0x8b,0xa0, 0x8b,0xa6, 0x8b,0xa7, 0x8b,0xaa, - 0x8b,0xb4, 0x8b,0xb5, 0x8b,0xb7, 0x8b,0xc2, 0x8b,0xc3, 0x8b,0xcb, 0x8b,0xcf, - 0x8b,0xce, 0x8b,0xd2, 0x8b,0xd3, 0x8b,0xd4, 0x8b,0xd6, 0x8b,0xd8, 0x8b,0xd9, - 0x8b,0xdc, 0x8b,0xdf, 0x8b,0xe0, 0x8b,0xe4, 0x8b,0xe8, 0x8b,0xe9, 0x8b,0xee, - 0x8b,0xf0, 0x8b,0xf3, 0x8b,0xf6, 0x8b,0xf9, 0x8b,0xfc, 0x8b,0xff, 0x8c,0x00, - 0x8c,0x02, 0x8c,0x04, 0x8c,0x07, 0x8c,0x0c, 0x8c,0x0f, 0x8c,0x11, 0x8c,0x12, - 0x8c,0x14, 0x8c,0x15, 0x8c,0x16, 0x8c,0x19, 0x8c,0x1b, 0x8c,0x18, 0x8c,0x1d, - 0x8c,0x1f, 0x8c,0x20, 0x8c,0x21, 0x8c,0x25, 0x8c,0x27, 0x8c,0x2a, 0x8c,0x2b, - 0x8c,0x2e, 0x8c,0x2f, 0x8c,0x32, 0x8c,0x33, 0x8c,0x35, 0x8c,0x36, 0x53,0x69, - 0x53,0x7a, 0x96,0x1d, 0x96,0x22, 0x96,0x21, 0x96,0x31, 0x96,0x2a, 0x96,0x3d, - 0x96,0x3c, 0x96,0x42, 0x96,0x49, 0x96,0x54, 0x96,0x5f, 0x96,0x67, 0x96,0x6c, - 0x96,0x72, 0x96,0x74, 0x96,0x88, 0x96,0x8d, 0x96,0x97, 0x96,0xb0, 0x90,0x97, - 0x90,0x9b, 0x90,0x9d, 0x90,0x99, 0x90,0xac, 0x90,0xa1, 0x90,0xb4, 0x90,0xb3, - 0x90,0xb6, 0x90,0xba, 0x90,0xb8, 0x90,0xb0, 0x90,0xcf, 0x90,0xc5, 0x90,0xbe, - 0x90,0xd0, 0x90,0xc4, 0x90,0xc7, 0x90,0xd3, 0x90,0xe6, 0x90,0xe2, 0x90,0xdc, - 0x90,0xd7, 0x90,0xdb, 0x90,0xeb, 0x90,0xef, 0x90,0xfe, 0x91,0x04, 0x91,0x22, - 0x91,0x1e, 0x91,0x23, 0x91,0x31, 0x91,0x2f, 0x91,0x39, 0x91,0x43, 0x91,0x46, - 0x52,0x0d, 0x59,0x42, 0x52,0xa2, 0x52,0xac, 0x52,0xad, 0x52,0xbe, 0x54,0xff, - 0x52,0xd0, 0x52,0xd6, 0x52,0xf0, 0x53,0xdf, 0x71,0xee, 0x77,0xcd, 0x5e,0xf4, - 0x51,0xf5, 0x51,0xfc, 0x9b,0x2f, 0x53,0xb6, 0x5f,0x01, 0x75,0x5a, 0x5d,0xef, - 0x57,0x4c, 0x57,0xa9, 0x57,0xa1, 0x58,0x7e, 0x58,0xbc, 0x58,0xc5, 0x58,0xd1, - 0x57,0x29, 0x57,0x2c, 0x57,0x2a, 0x57,0x33, 0x57,0x39, 0x57,0x2e, 0x57,0x2f, - 0x57,0x5c, 0x57,0x3b, 0x57,0x42, 0x57,0x69, 0x57,0x85, 0x57,0x6b, 0x57,0x86, - 0x57,0x7c, 0x57,0x7b, 0x57,0x68, 0x57,0x6d, 0x57,0x76, 0x57,0x73, 0x57,0xad, - 0x57,0xa4, 0x57,0x8c, 0x57,0xb2, 0x57,0xcf, 0x57,0xa7, 0x57,0xb4, 0x57,0x93, - 0x57,0xa0, 0x57,0xd5, 0x57,0xd8, 0x57,0xda, 0x57,0xd9, 0x57,0xd2, 0x57,0xb8, - 0x57,0xf4, 0x57,0xef, 0x57,0xf8, 0x57,0xe4, 0x57,0xdd, 0x58,0x0b, 0x58,0x0d, - 0x57,0xfd, 0x57,0xed, 0x58,0x00, 0x58,0x1e, 0x58,0x19, 0x58,0x44, 0x58,0x20, - 0x58,0x65, 0x58,0x6c, 0x58,0x81, 0x58,0x89, 0x58,0x9a, 0x58,0x80, 0x99,0xa8, - 0x9f,0x19, 0x61,0xff, 0x82,0x79, 0x82,0x7d, 0x82,0x7f, 0x82,0x8f, 0x82,0x8a, - 0x82,0xa8, 0x82,0x84, 0x82,0x8e, 0x82,0x91, 0x82,0x97, 0x82,0x99, 0x82,0xab, - 0x82,0xb8, 0x82,0xbe, 0x82,0xb0, 0x82,0xc8, 0x82,0xca, 0x82,0xe3, 0x82,0x98, - 0x82,0xb7, 0x82,0xae, 0x82,0xcb, 0x82,0xcc, 0x82,0xc1, 0x82,0xa9, 0x82,0xb4, - 0x82,0xa1, 0x82,0xaa, 0x82,0x9f, 0x82,0xc4, 0x82,0xce, 0x82,0xa4, 0x82,0xe1, - 0x83,0x09, 0x82,0xf7, 0x82,0xe4, 0x83,0x0f, 0x83,0x07, 0x82,0xdc, 0x82,0xf4, - 0x82,0xd2, 0x82,0xd8, 0x83,0x0c, 0x82,0xfb, 0x82,0xd3, 0x83,0x11, 0x83,0x1a, - 0x83,0x06, 0x83,0x14, 0x83,0x15, 0x82,0xe0, 0x82,0xd5, 0x83,0x1c, 0x83,0x51, - 0x83,0x5b, 0x83,0x5c, 0x83,0x08, 0x83,0x92, 0x83,0x3c, 0x83,0x34, 0x83,0x31, - 0x83,0x9b, 0x83,0x5e, 0x83,0x2f, 0x83,0x4f, 0x83,0x47, 0x83,0x43, 0x83,0x5f, - 0x83,0x40, 0x83,0x17, 0x83,0x60, 0x83,0x2d, 0x83,0x3a, 0x83,0x33, 0x83,0x66, - 0x83,0x65, 0x83,0x68, 0x83,0x1b, 0x83,0x69, 0x83,0x6c, 0x83,0x6a, 0x83,0x6d, - 0x83,0x6e, 0x83,0xb0, 0x83,0x78, 0x83,0xb3, 0x83,0xb4, 0x83,0xa0, 0x83,0xaa, - 0x83,0x93, 0x83,0x9c, 0x83,0x85, 0x83,0x7c, 0x83,0xb6, 0x83,0xa9, 0x83,0x7d, - 0x83,0xb8, 0x83,0x7b, 0x83,0x98, 0x83,0x9e, 0x83,0xa8, 0x83,0xba, 0x83,0xbc, - 0x83,0xc1, 0x84,0x01, 0x83,0xe5, 0x83,0xd8, 0x58,0x07, 0x84,0x18, 0x84,0x0b, - 0x83,0xdd, 0x83,0xfd, 0x83,0xd6, 0x84,0x1c, 0x84,0x38, 0x84,0x11, 0x84,0x06, - 0x83,0xd4, 0x83,0xdf, 0x84,0x0f, 0x84,0x03, 0x83,0xf8, 0x83,0xf9, 0x83,0xea, - 0x83,0xc5, 0x83,0xc0, 0x84,0x26, 0x83,0xf0, 0x83,0xe1, 0x84,0x5c, 0x84,0x51, - 0x84,0x5a, 0x84,0x59, 0x84,0x73, 0x84,0x87, 0x84,0x88, 0x84,0x7a, 0x84,0x89, - 0x84,0x78, 0x84,0x3c, 0x84,0x46, 0x84,0x69, 0x84,0x76, 0x84,0x8c, 0x84,0x8e, - 0x84,0x31, 0x84,0x6d, 0x84,0xc1, 0x84,0xcd, 0x84,0xd0, 0x84,0xe6, 0x84,0xbd, - 0x84,0xd3, 0x84,0xca, 0x84,0xbf, 0x84,0xba, 0x84,0xe0, 0x84,0xa1, 0x84,0xb9, - 0x84,0xb4, 0x84,0x97, 0x84,0xe5, 0x84,0xe3, 0x85,0x0c, 0x75,0x0d, 0x85,0x38, - 0x84,0xf0, 0x85,0x39, 0x85,0x1f, 0x85,0x3a, 0x85,0x56, 0x85,0x3b, 0x84,0xff, - 0x84,0xfc, 0x85,0x59, 0x85,0x48, 0x85,0x68, 0x85,0x64, 0x85,0x5e, 0x85,0x7a, - 0x77,0xa2, 0x85,0x43, 0x85,0x72, 0x85,0x7b, 0x85,0xa4, 0x85,0xa8, 0x85,0x87, - 0x85,0x8f, 0x85,0x79, 0x85,0xae, 0x85,0x9c, 0x85,0x85, 0x85,0xb9, 0x85,0xb7, - 0x85,0xb0, 0x85,0xd3, 0x85,0xc1, 0x85,0xdc, 0x85,0xff, 0x86,0x27, 0x86,0x05, - 0x86,0x29, 0x86,0x16, 0x86,0x3c, 0x5e,0xfe, 0x5f,0x08, 0x59,0x3c, 0x59,0x41, - 0x80,0x37, 0x59,0x55, 0x59,0x5a, 0x59,0x58, 0x53,0x0f, 0x5c,0x22, 0x5c,0x25, - 0x5c,0x2c, 0x5c,0x34, 0x62,0x4c, 0x62,0x6a, 0x62,0x9f, 0x62,0xbb, 0x62,0xca, - 0x62,0xda, 0x62,0xd7, 0x62,0xee, 0x63,0x22, 0x62,0xf6, 0x63,0x39, 0x63,0x4b, - 0x63,0x43, 0x63,0xad, 0x63,0xf6, 0x63,0x71, 0x63,0x7a, 0x63,0x8e, 0x63,0xb4, - 0x63,0x6d, 0x63,0xac, 0x63,0x8a, 0x63,0x69, 0x63,0xae, 0x63,0xbc, 0x63,0xf2, - 0x63,0xf8, 0x63,0xe0, 0x63,0xff, 0x63,0xc4, 0x63,0xde, 0x63,0xce, 0x64,0x52, - 0x63,0xc6, 0x63,0xbe, 0x64,0x45, 0x64,0x41, 0x64,0x0b, 0x64,0x1b, 0x64,0x20, - 0x64,0x0c, 0x64,0x26, 0x64,0x21, 0x64,0x5e, 0x64,0x84, 0x64,0x6d, 0x64,0x96, - 0x64,0x7a, 0x64,0xb7, 0x64,0xb8, 0x64,0x99, 0x64,0xba, 0x64,0xc0, 0x64,0xd0, - 0x64,0xd7, 0x64,0xe4, 0x64,0xe2, 0x65,0x09, 0x65,0x25, 0x65,0x2e, 0x5f,0x0b, - 0x5f,0xd2, 0x75,0x19, 0x5f,0x11, 0x53,0x5f, 0x53,0xf1, 0x53,0xfd, 0x53,0xe9, - 0x53,0xe8, 0x53,0xfb, 0x54,0x12, 0x54,0x16, 0x54,0x06, 0x54,0x4b, 0x54,0x52, - 0x54,0x53, 0x54,0x54, 0x54,0x56, 0x54,0x43, 0x54,0x21, 0x54,0x57, 0x54,0x59, - 0x54,0x23, 0x54,0x32, 0x54,0x82, 0x54,0x94, 0x54,0x77, 0x54,0x71, 0x54,0x64, - 0x54,0x9a, 0x54,0x9b, 0x54,0x84, 0x54,0x76, 0x54,0x66, 0x54,0x9d, 0x54,0xd0, - 0x54,0xad, 0x54,0xc2, 0x54,0xb4, 0x54,0xd2, 0x54,0xa7, 0x54,0xa6, 0x54,0xd3, - 0x54,0xd4, 0x54,0x72, 0x54,0xa3, 0x54,0xd5, 0x54,0xbb, 0x54,0xbf, 0x54,0xcc, - 0x54,0xd9, 0x54,0xda, 0x54,0xdc, 0x54,0xa9, 0x54,0xaa, 0x54,0xa4, 0x54,0xdd, - 0x54,0xcf, 0x54,0xde, 0x55,0x1b, 0x54,0xe7, 0x55,0x20, 0x54,0xfd, 0x55,0x14, - 0x54,0xf3, 0x55,0x22, 0x55,0x23, 0x55,0x0f, 0x55,0x11, 0x55,0x27, 0x55,0x2a, - 0x55,0x67, 0x55,0x8f, 0x55,0xb5, 0x55,0x49, 0x55,0x6d, 0x55,0x41, 0x55,0x55, - 0x55,0x3f, 0x55,0x50, 0x55,0x3c, 0x55,0x37, 0x55,0x56, 0x55,0x75, 0x55,0x76, - 0x55,0x77, 0x55,0x33, 0x55,0x30, 0x55,0x5c, 0x55,0x8b, 0x55,0xd2, 0x55,0x83, - 0x55,0xb1, 0x55,0xb9, 0x55,0x88, 0x55,0x81, 0x55,0x9f, 0x55,0x7e, 0x55,0xd6, - 0x55,0x91, 0x55,0x7b, 0x55,0xdf, 0x55,0xbd, 0x55,0xbe, 0x55,0x94, 0x55,0x99, - 0x55,0xea, 0x55,0xf7, 0x55,0xc9, 0x56,0x1f, 0x55,0xd1, 0x55,0xeb, 0x55,0xec, - 0x55,0xd4, 0x55,0xe6, 0x55,0xdd, 0x55,0xc4, 0x55,0xef, 0x55,0xe5, 0x55,0xf2, - 0x55,0xf3, 0x55,0xcc, 0x55,0xcd, 0x55,0xe8, 0x55,0xf5, 0x55,0xe4, 0x8f,0x94, - 0x56,0x1e, 0x56,0x08, 0x56,0x0c, 0x56,0x01, 0x56,0x24, 0x56,0x23, 0x55,0xfe, - 0x56,0x00, 0x56,0x27, 0x56,0x2d, 0x56,0x58, 0x56,0x39, 0x56,0x57, 0x56,0x2c, - 0x56,0x4d, 0x56,0x62, 0x56,0x59, 0x56,0x5c, 0x56,0x4c, 0x56,0x54, 0x56,0x86, - 0x56,0x64, 0x56,0x71, 0x56,0x6b, 0x56,0x7b, 0x56,0x7c, 0x56,0x85, 0x56,0x93, - 0x56,0xaf, 0x56,0xd4, 0x56,0xd7, 0x56,0xdd, 0x56,0xe1, 0x56,0xf5, 0x56,0xeb, - 0x56,0xf9, 0x56,0xff, 0x57,0x04, 0x57,0x0a, 0x57,0x09, 0x57,0x1c, 0x5e,0x0f, - 0x5e,0x19, 0x5e,0x14, 0x5e,0x11, 0x5e,0x31, 0x5e,0x3b, 0x5e,0x3c, 0x5e,0x37, - 0x5e,0x44, 0x5e,0x54, 0x5e,0x5b, 0x5e,0x5e, 0x5e,0x61, 0x5c,0x8c, 0x5c,0x7a, - 0x5c,0x8d, 0x5c,0x90, 0x5c,0x96, 0x5c,0x88, 0x5c,0x98, 0x5c,0x99, 0x5c,0x91, - 0x5c,0x9a, 0x5c,0x9c, 0x5c,0xb5, 0x5c,0xa2, 0x5c,0xbd, 0x5c,0xac, 0x5c,0xab, - 0x5c,0xb1, 0x5c,0xa3, 0x5c,0xc1, 0x5c,0xb7, 0x5c,0xc4, 0x5c,0xd2, 0x5c,0xe4, - 0x5c,0xcb, 0x5c,0xe5, 0x5d,0x02, 0x5d,0x03, 0x5d,0x27, 0x5d,0x26, 0x5d,0x2e, - 0x5d,0x24, 0x5d,0x1e, 0x5d,0x06, 0x5d,0x1b, 0x5d,0x58, 0x5d,0x3e, 0x5d,0x34, - 0x5d,0x3d, 0x5d,0x6c, 0x5d,0x5b, 0x5d,0x6f, 0x5d,0x5d, 0x5d,0x6b, 0x5d,0x4b, - 0x5d,0x4a, 0x5d,0x69, 0x5d,0x74, 0x5d,0x82, 0x5d,0x99, 0x5d,0x9d, 0x8c,0x73, - 0x5d,0xb7, 0x5d,0xc5, 0x5f,0x73, 0x5f,0x77, 0x5f,0x82, 0x5f,0x87, 0x5f,0x89, - 0x5f,0x8c, 0x5f,0x95, 0x5f,0x99, 0x5f,0x9c, 0x5f,0xa8, 0x5f,0xad, 0x5f,0xb5, - 0x5f,0xbc, 0x88,0x62, 0x5f,0x61, 0x72,0xad, 0x72,0xb0, 0x72,0xb4, 0x72,0xb7, - 0x72,0xb8, 0x72,0xc3, 0x72,0xc1, 0x72,0xce, 0x72,0xcd, 0x72,0xd2, 0x72,0xe8, - 0x72,0xef, 0x72,0xe9, 0x72,0xf2, 0x72,0xf4, 0x72,0xf7, 0x73,0x01, 0x72,0xf3, - 0x73,0x03, 0x72,0xfa, 0x72,0xfb, 0x73,0x17, 0x73,0x13, 0x73,0x21, 0x73,0x0a, - 0x73,0x1e, 0x73,0x1d, 0x73,0x15, 0x73,0x22, 0x73,0x39, 0x73,0x25, 0x73,0x2c, - 0x73,0x38, 0x73,0x31, 0x73,0x50, 0x73,0x4d, 0x73,0x57, 0x73,0x60, 0x73,0x6c, - 0x73,0x6f, 0x73,0x7e, 0x82,0x1b, 0x59,0x25, 0x98,0xe7, 0x59,0x24, 0x59,0x02, - 0x99,0x63, 0x99,0x67, 0x99,0x68, 0x99,0x69, 0x99,0x6a, 0x99,0x6b, 0x99,0x6c, - 0x99,0x74, 0x99,0x77, 0x99,0x7d, 0x99,0x80, 0x99,0x84, 0x99,0x87, 0x99,0x8a, - 0x99,0x8d, 0x99,0x90, 0x99,0x91, 0x99,0x93, 0x99,0x94, 0x99,0x95, 0x5e,0x80, - 0x5e,0x91, 0x5e,0x8b, 0x5e,0x96, 0x5e,0xa5, 0x5e,0xa0, 0x5e,0xb9, 0x5e,0xb5, - 0x5e,0xbe, 0x5e,0xb3, 0x8d,0x53, 0x5e,0xd2, 0x5e,0xd1, 0x5e,0xdb, 0x5e,0xe8, - 0x5e,0xea, 0x81,0xba, 0x5f,0xc4, 0x5f,0xc9, 0x5f,0xd6, 0x5f,0xcf, 0x60,0x03, - 0x5f,0xee, 0x60,0x04, 0x5f,0xe1, 0x5f,0xe4, 0x5f,0xfe, 0x60,0x05, 0x60,0x06, - 0x5f,0xea, 0x5f,0xed, 0x5f,0xf8, 0x60,0x19, 0x60,0x35, 0x60,0x26, 0x60,0x1b, - 0x60,0x0f, 0x60,0x0d, 0x60,0x29, 0x60,0x2b, 0x60,0x0a, 0x60,0x3f, 0x60,0x21, - 0x60,0x78, 0x60,0x79, 0x60,0x7b, 0x60,0x7a, 0x60,0x42, 0x60,0x6a, 0x60,0x7d, - 0x60,0x96, 0x60,0x9a, 0x60,0xad, 0x60,0x9d, 0x60,0x83, 0x60,0x92, 0x60,0x8c, - 0x60,0x9b, 0x60,0xec, 0x60,0xbb, 0x60,0xb1, 0x60,0xdd, 0x60,0xd8, 0x60,0xc6, - 0x60,0xda, 0x60,0xb4, 0x61,0x20, 0x61,0x26, 0x61,0x15, 0x61,0x23, 0x60,0xf4, - 0x61,0x00, 0x61,0x0e, 0x61,0x2b, 0x61,0x4a, 0x61,0x75, 0x61,0xac, 0x61,0x94, - 0x61,0xa7, 0x61,0xb7, 0x61,0xd4, 0x61,0xf5, 0x5f,0xdd, 0x96,0xb3, 0x95,0xe9, - 0x95,0xeb, 0x95,0xf1, 0x95,0xf3, 0x95,0xf5, 0x95,0xf6, 0x95,0xfc, 0x95,0xfe, - 0x96,0x03, 0x96,0x04, 0x96,0x06, 0x96,0x08, 0x96,0x0a, 0x96,0x0b, 0x96,0x0c, - 0x96,0x0d, 0x96,0x0f, 0x96,0x12, 0x96,0x15, 0x96,0x16, 0x96,0x17, 0x96,0x19, - 0x96,0x1a, 0x4e,0x2c, 0x72,0x3f, 0x62,0x15, 0x6c,0x35, 0x6c,0x54, 0x6c,0x5c, - 0x6c,0x4a, 0x6c,0xa3, 0x6c,0x85, 0x6c,0x90, 0x6c,0x94, 0x6c,0x8c, 0x6c,0x68, - 0x6c,0x69, 0x6c,0x74, 0x6c,0x76, 0x6c,0x86, 0x6c,0xa9, 0x6c,0xd0, 0x6c,0xd4, - 0x6c,0xad, 0x6c,0xf7, 0x6c,0xf8, 0x6c,0xf1, 0x6c,0xd7, 0x6c,0xb2, 0x6c,0xe0, - 0x6c,0xd6, 0x6c,0xfa, 0x6c,0xeb, 0x6c,0xee, 0x6c,0xb1, 0x6c,0xd3, 0x6c,0xef, - 0x6c,0xfe, 0x6d,0x39, 0x6d,0x27, 0x6d,0x0c, 0x6d,0x43, 0x6d,0x48, 0x6d,0x07, - 0x6d,0x04, 0x6d,0x19, 0x6d,0x0e, 0x6d,0x2b, 0x6d,0x4d, 0x6d,0x2e, 0x6d,0x35, - 0x6d,0x1a, 0x6d,0x4f, 0x6d,0x52, 0x6d,0x54, 0x6d,0x33, 0x6d,0x91, 0x6d,0x6f, - 0x6d,0x9e, 0x6d,0xa0, 0x6d,0x5e, 0x6d,0x93, 0x6d,0x94, 0x6d,0x5c, 0x6d,0x60, - 0x6d,0x7c, 0x6d,0x63, 0x6e,0x1a, 0x6d,0xc7, 0x6d,0xc5, 0x6d,0xde, 0x6e,0x0e, - 0x6d,0xbf, 0x6d,0xe0, 0x6e,0x11, 0x6d,0xe6, 0x6d,0xdd, 0x6d,0xd9, 0x6e,0x16, - 0x6d,0xab, 0x6e,0x0c, 0x6d,0xae, 0x6e,0x2b, 0x6e,0x6e, 0x6e,0x4e, 0x6e,0x6b, - 0x6e,0xb2, 0x6e,0x5f, 0x6e,0x86, 0x6e,0x53, 0x6e,0x54, 0x6e,0x32, 0x6e,0x25, - 0x6e,0x44, 0x6e,0xdf, 0x6e,0xb1, 0x6e,0x98, 0x6e,0xe0, 0x6f,0x2d, 0x6e,0xe2, - 0x6e,0xa5, 0x6e,0xa7, 0x6e,0xbd, 0x6e,0xbb, 0x6e,0xb7, 0x6e,0xd7, 0x6e,0xb4, - 0x6e,0xcf, 0x6e,0x8f, 0x6e,0xc2, 0x6e,0x9f, 0x6f,0x62, 0x6f,0x46, 0x6f,0x47, - 0x6f,0x24, 0x6f,0x15, 0x6e,0xf9, 0x6f,0x2f, 0x6f,0x36, 0x6f,0x4b, 0x6f,0x74, - 0x6f,0x2a, 0x6f,0x09, 0x6f,0x29, 0x6f,0x89, 0x6f,0x8d, 0x6f,0x8c, 0x6f,0x78, - 0x6f,0x72, 0x6f,0x7c, 0x6f,0x7a, 0x6f,0xd1, 0x6f,0xc9, 0x6f,0xa7, 0x6f,0xb9, - 0x6f,0xb6, 0x6f,0xc2, 0x6f,0xe1, 0x6f,0xee, 0x6f,0xde, 0x6f,0xe0, 0x6f,0xef, - 0x70,0x1a, 0x70,0x23, 0x70,0x1b, 0x70,0x39, 0x70,0x35, 0x70,0x4f, 0x70,0x5e, - 0x5b,0x80, 0x5b,0x84, 0x5b,0x95, 0x5b,0x93, 0x5b,0xa5, 0x5b,0xb8, 0x75,0x2f, - 0x9a,0x9e, 0x64,0x34, 0x5b,0xe4, 0x5b,0xee, 0x89,0x30, 0x5b,0xf0, 0x8e,0x47, - 0x8b,0x07, 0x8f,0xb6, 0x8f,0xd3, 0x8f,0xd5, 0x8f,0xe5, 0x8f,0xee, 0x8f,0xe4, - 0x8f,0xe9, 0x8f,0xe6, 0x8f,0xf3, 0x8f,0xe8, 0x90,0x05, 0x90,0x04, 0x90,0x0b, - 0x90,0x26, 0x90,0x11, 0x90,0x0d, 0x90,0x16, 0x90,0x21, 0x90,0x35, 0x90,0x36, - 0x90,0x2d, 0x90,0x2f, 0x90,0x44, 0x90,0x51, 0x90,0x52, 0x90,0x50, 0x90,0x68, - 0x90,0x58, 0x90,0x62, 0x90,0x5b, 0x66,0xb9, 0x90,0x74, 0x90,0x7d, 0x90,0x82, - 0x90,0x88, 0x90,0x83, 0x90,0x8b, 0x5f,0x50, 0x5f,0x57, 0x5f,0x56, 0x5f,0x58, - 0x5c,0x3b, 0x54,0xab, 0x5c,0x50, 0x5c,0x59, 0x5b,0x71, 0x5c,0x63, 0x5c,0x66, - 0x7f,0xbc, 0x5f,0x2a, 0x5f,0x29, 0x5f,0x2d, 0x82,0x74, 0x5f,0x3c, 0x9b,0x3b, - 0x5c,0x6e, 0x59,0x81, 0x59,0x83, 0x59,0x8d, 0x59,0xa9, 0x59,0xaa, 0x59,0xa3, - 0x59,0x97, 0x59,0xca, 0x59,0xab, 0x59,0x9e, 0x59,0xa4, 0x59,0xd2, 0x59,0xb2, - 0x59,0xaf, 0x59,0xd7, 0x59,0xbe, 0x5a,0x05, 0x5a,0x06, 0x59,0xdd, 0x5a,0x08, - 0x59,0xe3, 0x59,0xd8, 0x59,0xf9, 0x5a,0x0c, 0x5a,0x09, 0x5a,0x32, 0x5a,0x34, - 0x5a,0x11, 0x5a,0x23, 0x5a,0x13, 0x5a,0x40, 0x5a,0x67, 0x5a,0x4a, 0x5a,0x55, - 0x5a,0x3c, 0x5a,0x62, 0x5a,0x75, 0x80,0xec, 0x5a,0xaa, 0x5a,0x9b, 0x5a,0x77, - 0x5a,0x7a, 0x5a,0xbe, 0x5a,0xeb, 0x5a,0xb2, 0x5a,0xd2, 0x5a,0xd4, 0x5a,0xb8, - 0x5a,0xe0, 0x5a,0xe3, 0x5a,0xf1, 0x5a,0xd6, 0x5a,0xe6, 0x5a,0xd8, 0x5a,0xdc, - 0x5b,0x09, 0x5b,0x17, 0x5b,0x16, 0x5b,0x32, 0x5b,0x37, 0x5b,0x40, 0x5c,0x15, - 0x5c,0x1c, 0x5b,0x5a, 0x5b,0x65, 0x5b,0x73, 0x5b,0x51, 0x5b,0x53, 0x5b,0x62, - 0x9a,0x75, 0x9a,0x77, 0x9a,0x78, 0x9a,0x7a, 0x9a,0x7f, 0x9a,0x7d, 0x9a,0x80, - 0x9a,0x81, 0x9a,0x85, 0x9a,0x88, 0x9a,0x8a, 0x9a,0x90, 0x9a,0x92, 0x9a,0x93, - 0x9a,0x96, 0x9a,0x98, 0x9a,0x9b, 0x9a,0x9c, 0x9a,0x9d, 0x9a,0x9f, 0x9a,0xa0, - 0x9a,0xa2, 0x9a,0xa3, 0x9a,0xa5, 0x9a,0xa7, 0x7e,0x9f, 0x7e,0xa1, 0x7e,0xa3, - 0x7e,0xa5, 0x7e,0xa8, 0x7e,0xa9, 0x7e,0xad, 0x7e,0xb0, 0x7e,0xbe, 0x7e,0xc0, - 0x7e,0xc1, 0x7e,0xc2, 0x7e,0xc9, 0x7e,0xcb, 0x7e,0xcc, 0x7e,0xd0, 0x7e,0xd4, - 0x7e,0xd7, 0x7e,0xdb, 0x7e,0xe0, 0x7e,0xe1, 0x7e,0xe8, 0x7e,0xeb, 0x7e,0xee, - 0x7e,0xef, 0x7e,0xf1, 0x7e,0xf2, 0x7f,0x0d, 0x7e,0xf6, 0x7e,0xfa, 0x7e,0xfb, - 0x7e,0xfe, 0x7f,0x01, 0x7f,0x02, 0x7f,0x03, 0x7f,0x07, 0x7f,0x08, 0x7f,0x0b, - 0x7f,0x0c, 0x7f,0x0f, 0x7f,0x11, 0x7f,0x12, 0x7f,0x17, 0x7f,0x19, 0x7f,0x1c, - 0x7f,0x1b, 0x7f,0x1f, 0x7f,0x21, 0x7f,0x22, 0x7f,0x23, 0x7f,0x24, 0x7f,0x25, - 0x7f,0x26, 0x7f,0x27, 0x7f,0x2a, 0x7f,0x2b, 0x7f,0x2c, 0x7f,0x2d, 0x7f,0x2f, - 0x7f,0x30, 0x7f,0x31, 0x7f,0x32, 0x7f,0x33, 0x7f,0x35, 0x5e,0x7a, 0x75,0x7f, - 0x5d,0xdb, 0x75,0x3e, 0x90,0x95, 0x73,0x8e, 0x73,0x91, 0x73,0xae, 0x73,0xa2, - 0x73,0x9f, 0x73,0xcf, 0x73,0xc2, 0x73,0xd1, 0x73,0xb7, 0x73,0xb3, 0x73,0xc0, - 0x73,0xc9, 0x73,0xc8, 0x73,0xe5, 0x73,0xd9, 0x98,0x7c, 0x74,0x0a, 0x73,0xe9, - 0x73,0xe7, 0x73,0xde, 0x73,0xba, 0x73,0xf2, 0x74,0x0f, 0x74,0x2a, 0x74,0x5b, - 0x74,0x26, 0x74,0x25, 0x74,0x28, 0x74,0x30, 0x74,0x2e, 0x74,0x2c, 0x74,0x1b, - 0x74,0x1a, 0x74,0x41, 0x74,0x5c, 0x74,0x57, 0x74,0x55, 0x74,0x59, 0x74,0x77, - 0x74,0x6d, 0x74,0x7e, 0x74,0x9c, 0x74,0x8e, 0x74,0x80, 0x74,0x81, 0x74,0x87, - 0x74,0x8b, 0x74,0x9e, 0x74,0xa8, 0x74,0xa9, 0x74,0x90, 0x74,0xa7, 0x74,0xd2, - 0x74,0xba, 0x97,0xea, 0x97,0xeb, 0x97,0xec, 0x67,0x4c, 0x67,0x53, 0x67,0x5e, - 0x67,0x48, 0x67,0x69, 0x67,0xa5, 0x67,0x87, 0x67,0x6a, 0x67,0x73, 0x67,0x98, - 0x67,0xa7, 0x67,0x75, 0x67,0xa8, 0x67,0x9e, 0x67,0xad, 0x67,0x8b, 0x67,0x77, - 0x67,0x7c, 0x67,0xf0, 0x68,0x09, 0x67,0xd8, 0x68,0x0a, 0x67,0xe9, 0x67,0xb0, - 0x68,0x0c, 0x67,0xd9, 0x67,0xb5, 0x67,0xda, 0x67,0xb3, 0x67,0xdd, 0x68,0x00, - 0x67,0xc3, 0x67,0xb8, 0x67,0xe2, 0x68,0x0e, 0x67,0xc1, 0x67,0xfd, 0x68,0x32, - 0x68,0x33, 0x68,0x60, 0x68,0x61, 0x68,0x4e, 0x68,0x62, 0x68,0x44, 0x68,0x64, - 0x68,0x83, 0x68,0x1d, 0x68,0x55, 0x68,0x66, 0x68,0x41, 0x68,0x67, 0x68,0x40, - 0x68,0x3e, 0x68,0x4a, 0x68,0x49, 0x68,0x29, 0x68,0xb5, 0x68,0x8f, 0x68,0x74, - 0x68,0x77, 0x68,0x93, 0x68,0x6b, 0x68,0xc2, 0x69,0x6e, 0x68,0xfc, 0x69,0x1f, - 0x69,0x20, 0x68,0xf9, 0x69,0x24, 0x68,0xf0, 0x69,0x0b, 0x69,0x01, 0x69,0x57, - 0x68,0xe3, 0x69,0x10, 0x69,0x71, 0x69,0x39, 0x69,0x60, 0x69,0x42, 0x69,0x5d, - 0x69,0x84, 0x69,0x6b, 0x69,0x80, 0x69,0x98, 0x69,0x78, 0x69,0x34, 0x69,0xcc, - 0x69,0x87, 0x69,0x88, 0x69,0xce, 0x69,0x89, 0x69,0x66, 0x69,0x63, 0x69,0x79, - 0x69,0x9b, 0x69,0xa7, 0x69,0xbb, 0x69,0xab, 0x69,0xad, 0x69,0xd4, 0x69,0xb1, - 0x69,0xc1, 0x69,0xca, 0x69,0xdf, 0x69,0x95, 0x69,0xe0, 0x69,0x8d, 0x69,0xff, - 0x6a,0x2f, 0x69,0xed, 0x6a,0x17, 0x6a,0x18, 0x6a,0x65, 0x69,0xf2, 0x6a,0x44, - 0x6a,0x3e, 0x6a,0xa0, 0x6a,0x50, 0x6a,0x5b, 0x6a,0x35, 0x6a,0x8e, 0x6a,0x79, - 0x6a,0x3d, 0x6a,0x28, 0x6a,0x58, 0x6a,0x7c, 0x6a,0x91, 0x6a,0x90, 0x6a,0xa9, - 0x6a,0x97, 0x6a,0xab, 0x73,0x37, 0x73,0x52, 0x6b,0x81, 0x6b,0x82, 0x6b,0x87, - 0x6b,0x84, 0x6b,0x92, 0x6b,0x93, 0x6b,0x8d, 0x6b,0x9a, 0x6b,0x9b, 0x6b,0xa1, - 0x6b,0xaa, 0x8f,0x6b, 0x8f,0x6d, 0x8f,0x71, 0x8f,0x72, 0x8f,0x73, 0x8f,0x75, - 0x8f,0x76, 0x8f,0x78, 0x8f,0x77, 0x8f,0x79, 0x8f,0x7a, 0x8f,0x7c, 0x8f,0x7e, - 0x8f,0x81, 0x8f,0x82, 0x8f,0x84, 0x8f,0x87, 0x8f,0x8b, 0x8f,0x8d, 0x8f,0x8e, - 0x8f,0x8f, 0x8f,0x98, 0x8f,0x9a, 0x8e,0xce, 0x62,0x0b, 0x62,0x17, 0x62,0x1b, - 0x62,0x1f, 0x62,0x22, 0x62,0x21, 0x62,0x25, 0x62,0x24, 0x62,0x2c, 0x81,0xe7, - 0x74,0xef, 0x74,0xf4, 0x74,0xff, 0x75,0x0f, 0x75,0x11, 0x75,0x13, 0x65,0x34, - 0x65,0xee, 0x65,0xef, 0x65,0xf0, 0x66,0x0a, 0x66,0x19, 0x67,0x72, 0x66,0x03, - 0x66,0x15, 0x66,0x00, 0x70,0x85, 0x66,0xf7, 0x66,0x1d, 0x66,0x34, 0x66,0x31, - 0x66,0x36, 0x66,0x35, 0x80,0x06, 0x66,0x5f, 0x66,0x54, 0x66,0x41, 0x66,0x4f, - 0x66,0x56, 0x66,0x61, 0x66,0x57, 0x66,0x77, 0x66,0x84, 0x66,0x8c, 0x66,0xa7, - 0x66,0x9d, 0x66,0xbe, 0x66,0xdb, 0x66,0xdc, 0x66,0xe6, 0x66,0xe9, 0x8d,0x32, - 0x8d,0x33, 0x8d,0x36, 0x8d,0x3b, 0x8d,0x3d, 0x8d,0x40, 0x8d,0x45, 0x8d,0x46, - 0x8d,0x48, 0x8d,0x49, 0x8d,0x47, 0x8d,0x4d, 0x8d,0x55, 0x8d,0x59, 0x89,0xc7, - 0x89,0xca, 0x89,0xcb, 0x89,0xcc, 0x89,0xce, 0x89,0xcf, 0x89,0xd0, 0x89,0xd1, - 0x72,0x6e, 0x72,0x9f, 0x72,0x5d, 0x72,0x66, 0x72,0x6f, 0x72,0x7e, 0x72,0x7f, - 0x72,0x84, 0x72,0x8b, 0x72,0x8d, 0x72,0x8f, 0x72,0x92, 0x63,0x08, 0x63,0x32, - 0x63,0xb0, 0x64,0x3f, 0x64,0xd8, 0x80,0x04, 0x6b,0xea, 0x6b,0xf3, 0x6b,0xfd, - 0x6b,0xf5, 0x6b,0xf9, 0x6c,0x05, 0x6c,0x07, 0x6c,0x06, 0x6c,0x0d, 0x6c,0x15, - 0x6c,0x18, 0x6c,0x19, 0x6c,0x1a, 0x6c,0x21, 0x6c,0x29, 0x6c,0x24, 0x6c,0x2a, - 0x6c,0x32, 0x65,0x35, 0x65,0x55, 0x65,0x6b, 0x72,0x4d, 0x72,0x52, 0x72,0x56, - 0x72,0x30, 0x86,0x62, 0x52,0x16, 0x80,0x9f, 0x80,0x9c, 0x80,0x93, 0x80,0xbc, - 0x67,0x0a, 0x80,0xbd, 0x80,0xb1, 0x80,0xab, 0x80,0xad, 0x80,0xb4, 0x80,0xb7, - 0x80,0xe7, 0x80,0xe8, 0x80,0xe9, 0x80,0xea, 0x80,0xdb, 0x80,0xc2, 0x80,0xc4, - 0x80,0xd9, 0x80,0xcd, 0x80,0xd7, 0x67,0x10, 0x80,0xdd, 0x80,0xeb, 0x80,0xf1, - 0x80,0xf4, 0x80,0xed, 0x81,0x0d, 0x81,0x0e, 0x80,0xf2, 0x80,0xfc, 0x67,0x15, - 0x81,0x12, 0x8c,0x5a, 0x81,0x36, 0x81,0x1e, 0x81,0x2c, 0x81,0x18, 0x81,0x32, - 0x81,0x48, 0x81,0x4c, 0x81,0x53, 0x81,0x74, 0x81,0x59, 0x81,0x5a, 0x81,0x71, - 0x81,0x60, 0x81,0x69, 0x81,0x7c, 0x81,0x7d, 0x81,0x6d, 0x81,0x67, 0x58,0x4d, - 0x5a,0xb5, 0x81,0x88, 0x81,0x82, 0x81,0x91, 0x6e,0xd5, 0x81,0xa3, 0x81,0xaa, - 0x81,0xcc, 0x67,0x26, 0x81,0xca, 0x81,0xbb, 0x81,0xc1, 0x81,0xa6, 0x6b,0x24, - 0x6b,0x37, 0x6b,0x39, 0x6b,0x43, 0x6b,0x46, 0x6b,0x59, 0x98,0xd1, 0x98,0xd2, - 0x98,0xd3, 0x98,0xd5, 0x98,0xd9, 0x98,0xda, 0x6b,0xb3, 0x5f,0x40, 0x6b,0xc2, - 0x89,0xf3, 0x65,0x90, 0x9f,0x51, 0x65,0x93, 0x65,0xbc, 0x65,0xc6, 0x65,0xc4, - 0x65,0xc3, 0x65,0xcc, 0x65,0xce, 0x65,0xd2, 0x65,0xd6, 0x70,0x80, 0x70,0x9c, - 0x70,0x96, 0x70,0x9d, 0x70,0xbb, 0x70,0xc0, 0x70,0xb7, 0x70,0xab, 0x70,0xb1, - 0x70,0xe8, 0x70,0xca, 0x71,0x10, 0x71,0x13, 0x71,0x16, 0x71,0x2f, 0x71,0x31, - 0x71,0x73, 0x71,0x5c, 0x71,0x68, 0x71,0x45, 0x71,0x72, 0x71,0x4a, 0x71,0x78, - 0x71,0x7a, 0x71,0x98, 0x71,0xb3, 0x71,0xb5, 0x71,0xa8, 0x71,0xa0, 0x71,0xe0, - 0x71,0xd4, 0x71,0xe7, 0x71,0xf9, 0x72,0x1d, 0x72,0x28, 0x70,0x6c, 0x71,0x18, - 0x71,0x66, 0x71,0xb9, 0x62,0x3e, 0x62,0x3d, 0x62,0x43, 0x62,0x48, 0x62,0x49, - 0x79,0x3b, 0x79,0x40, 0x79,0x46, 0x79,0x49, 0x79,0x5b, 0x79,0x5c, 0x79,0x53, - 0x79,0x5a, 0x79,0x62, 0x79,0x57, 0x79,0x60, 0x79,0x6f, 0x79,0x67, 0x79,0x7a, - 0x79,0x85, 0x79,0x8a, 0x79,0x9a, 0x79,0xa7, 0x79,0xb3, 0x5f,0xd1, 0x5f,0xd0, - 0x60,0x3c, 0x60,0x5d, 0x60,0x5a, 0x60,0x67, 0x60,0x41, 0x60,0x59, 0x60,0x63, - 0x60,0xab, 0x61,0x06, 0x61,0x0d, 0x61,0x5d, 0x61,0xa9, 0x61,0x9d, 0x61,0xcb, - 0x61,0xd1, 0x62,0x06, 0x80,0x80, 0x80,0x7f, 0x6c,0x93, 0x6c,0xf6, 0x6d,0xfc, - 0x77,0xf6, 0x77,0xf8, 0x78,0x00, 0x78,0x09, 0x78,0x17, 0x78,0x18, 0x78,0x11, - 0x65,0xab, 0x78,0x2d, 0x78,0x1c, 0x78,0x1d, 0x78,0x39, 0x78,0x3a, 0x78,0x3b, - 0x78,0x1f, 0x78,0x3c, 0x78,0x25, 0x78,0x2c, 0x78,0x23, 0x78,0x29, 0x78,0x4e, - 0x78,0x6d, 0x78,0x56, 0x78,0x57, 0x78,0x26, 0x78,0x50, 0x78,0x47, 0x78,0x4c, - 0x78,0x6a, 0x78,0x9b, 0x78,0x93, 0x78,0x9a, 0x78,0x87, 0x78,0x9c, 0x78,0xa1, - 0x78,0xa3, 0x78,0xb2, 0x78,0xb9, 0x78,0xa5, 0x78,0xd4, 0x78,0xd9, 0x78,0xc9, - 0x78,0xec, 0x78,0xf2, 0x79,0x05, 0x78,0xf4, 0x79,0x13, 0x79,0x24, 0x79,0x1e, - 0x79,0x34, 0x9f,0x9b, 0x9e,0xf9, 0x9e,0xfb, 0x9e,0xfc, 0x76,0xf1, 0x77,0x04, - 0x77,0x0d, 0x76,0xf9, 0x77,0x07, 0x77,0x08, 0x77,0x1a, 0x77,0x22, 0x77,0x19, - 0x77,0x2d, 0x77,0x26, 0x77,0x35, 0x77,0x38, 0x77,0x50, 0x77,0x51, 0x77,0x47, - 0x77,0x43, 0x77,0x5a, 0x77,0x68, 0x77,0x62, 0x77,0x65, 0x77,0x7f, 0x77,0x8d, - 0x77,0x7d, 0x77,0x80, 0x77,0x8c, 0x77,0x91, 0x77,0x9f, 0x77,0xa0, 0x77,0xb0, - 0x77,0xb5, 0x77,0xbd, 0x75,0x3a, 0x75,0x40, 0x75,0x4e, 0x75,0x4b, 0x75,0x48, - 0x75,0x5b, 0x75,0x72, 0x75,0x79, 0x75,0x83, 0x7f,0x58, 0x7f,0x61, 0x7f,0x5f, - 0x8a,0x48, 0x7f,0x68, 0x7f,0x74, 0x7f,0x71, 0x7f,0x79, 0x7f,0x81, 0x7f,0x7e, - 0x76,0xcd, 0x76,0xe5, 0x88,0x32, 0x94,0x85, 0x94,0x86, 0x94,0x87, 0x94,0x8b, - 0x94,0x8a, 0x94,0x8c, 0x94,0x8d, 0x94,0x8f, 0x94,0x90, 0x94,0x94, 0x94,0x97, - 0x94,0x95, 0x94,0x9a, 0x94,0x9b, 0x94,0x9c, 0x94,0xa3, 0x94,0xa4, 0x94,0xab, - 0x94,0xaa, 0x94,0xad, 0x94,0xac, 0x94,0xaf, 0x94,0xb0, 0x94,0xb2, 0x94,0xb4, - 0x94,0xb6, 0x94,0xb7, 0x94,0xb8, 0x94,0xb9, 0x94,0xba, 0x94,0xbc, 0x94,0xbd, - 0x94,0xbf, 0x94,0xc4, 0x94,0xc8, 0x94,0xc9, 0x94,0xca, 0x94,0xcb, 0x94,0xcc, - 0x94,0xcd, 0x94,0xce, 0x94,0xd0, 0x94,0xd1, 0x94,0xd2, 0x94,0xd5, 0x94,0xd6, - 0x94,0xd7, 0x94,0xd9, 0x94,0xd8, 0x94,0xdb, 0x94,0xde, 0x94,0xdf, 0x94,0xe0, - 0x94,0xe2, 0x94,0xe4, 0x94,0xe5, 0x94,0xe7, 0x94,0xe8, 0x94,0xea, 0x94,0xe9, - 0x94,0xeb, 0x94,0xee, 0x94,0xef, 0x94,0xf3, 0x94,0xf4, 0x94,0xf5, 0x94,0xf7, - 0x94,0xf9, 0x94,0xfc, 0x94,0xfd, 0x94,0xff, 0x95,0x03, 0x95,0x02, 0x95,0x06, - 0x95,0x07, 0x95,0x09, 0x95,0x0a, 0x95,0x0d, 0x95,0x0e, 0x95,0x0f, 0x95,0x12, - 0x95,0x13, 0x95,0x14, 0x95,0x15, 0x95,0x16, 0x95,0x18, 0x95,0x1b, 0x95,0x1d, - 0x95,0x1e, 0x95,0x1f, 0x95,0x22, 0x95,0x2a, 0x95,0x2b, 0x95,0x29, 0x95,0x2c, - 0x95,0x31, 0x95,0x32, 0x95,0x34, 0x95,0x36, 0x95,0x37, 0x95,0x38, 0x95,0x3c, - 0x95,0x3e, 0x95,0x3f, 0x95,0x42, 0x95,0x35, 0x95,0x44, 0x95,0x45, 0x95,0x46, - 0x95,0x49, 0x95,0x4c, 0x95,0x4e, 0x95,0x4f, 0x95,0x52, 0x95,0x53, 0x95,0x54, - 0x95,0x56, 0x95,0x57, 0x95,0x58, 0x95,0x59, 0x95,0x5b, 0x95,0x5e, 0x95,0x5f, - 0x95,0x5d, 0x95,0x61, 0x95,0x62, 0x95,0x64, 0x95,0x65, 0x95,0x66, 0x95,0x67, - 0x95,0x68, 0x95,0x69, 0x95,0x6a, 0x95,0x6b, 0x95,0x6c, 0x95,0x6f, 0x95,0x71, - 0x95,0x72, 0x95,0x73, 0x95,0x3a, 0x77,0xe7, 0x77,0xec, 0x96,0xc9, 0x79,0xd5, - 0x79,0xed, 0x79,0xe3, 0x79,0xeb, 0x7a,0x06, 0x5d,0x47, 0x7a,0x03, 0x7a,0x02, - 0x7a,0x1e, 0x7a,0x14, 0x7a,0x39, 0x7a,0x37, 0x7a,0x51, 0x9e,0xcf, 0x99,0xa5, - 0x7a,0x70, 0x76,0x88, 0x76,0x8e, 0x76,0x93, 0x76,0x99, 0x76,0xa4, 0x74,0xde, - 0x74,0xe0, 0x75,0x2c, 0x9e,0x20, 0x9e,0x22, 0x9e,0x28, 0x9e,0x29, 0x9e,0x2a, - 0x9e,0x2b, 0x9e,0x2c, 0x9e,0x32, 0x9e,0x31, 0x9e,0x36, 0x9e,0x38, 0x9e,0x37, - 0x9e,0x39, 0x9e,0x3a, 0x9e,0x3e, 0x9e,0x41, 0x9e,0x42, 0x9e,0x44, 0x9e,0x46, - 0x9e,0x47, 0x9e,0x48, 0x9e,0x49, 0x9e,0x4b, 0x9e,0x4c, 0x9e,0x4e, 0x9e,0x51, - 0x9e,0x55, 0x9e,0x57, 0x9e,0x5a, 0x9e,0x5b, 0x9e,0x5c, 0x9e,0x5e, 0x9e,0x63, - 0x9e,0x66, 0x9e,0x67, 0x9e,0x68, 0x9e,0x69, 0x9e,0x6a, 0x9e,0x6b, 0x9e,0x6c, - 0x9e,0x71, 0x9e,0x6d, 0x9e,0x73, 0x75,0x92, 0x75,0x94, 0x75,0x96, 0x75,0xa0, - 0x75,0x9d, 0x75,0xac, 0x75,0xa3, 0x75,0xb3, 0x75,0xb4, 0x75,0xb8, 0x75,0xc4, - 0x75,0xb1, 0x75,0xb0, 0x75,0xc3, 0x75,0xc2, 0x75,0xd6, 0x75,0xcd, 0x75,0xe3, - 0x75,0xe8, 0x75,0xe6, 0x75,0xe4, 0x75,0xeb, 0x75,0xe7, 0x76,0x03, 0x75,0xf1, - 0x75,0xfc, 0x75,0xff, 0x76,0x10, 0x76,0x00, 0x76,0x05, 0x76,0x0c, 0x76,0x17, - 0x76,0x0a, 0x76,0x25, 0x76,0x18, 0x76,0x15, 0x76,0x19, 0x76,0x1b, 0x76,0x3c, - 0x76,0x22, 0x76,0x20, 0x76,0x40, 0x76,0x2d, 0x76,0x30, 0x76,0x3f, 0x76,0x35, - 0x76,0x43, 0x76,0x3e, 0x76,0x33, 0x76,0x4d, 0x76,0x5e, 0x76,0x54, 0x76,0x5c, - 0x76,0x56, 0x76,0x6b, 0x76,0x6f, 0x7f,0xca, 0x7a,0xe6, 0x7a,0x78, 0x7a,0x79, - 0x7a,0x80, 0x7a,0x86, 0x7a,0x88, 0x7a,0x95, 0x7a,0xa6, 0x7a,0xa0, 0x7a,0xac, - 0x7a,0xa8, 0x7a,0xad, 0x7a,0xb3, 0x88,0x64, 0x88,0x69, 0x88,0x72, 0x88,0x7d, - 0x88,0x7f, 0x88,0x82, 0x88,0xa2, 0x88,0xc6, 0x88,0xb7, 0x88,0xbc, 0x88,0xc9, - 0x88,0xe2, 0x88,0xce, 0x88,0xe3, 0x88,0xe5, 0x88,0xf1, 0x89,0x1a, 0x88,0xfc, - 0x88,0xe8, 0x88,0xfe, 0x88,0xf0, 0x89,0x21, 0x89,0x19, 0x89,0x13, 0x89,0x1b, - 0x89,0x0a, 0x89,0x34, 0x89,0x2b, 0x89,0x36, 0x89,0x41, 0x89,0x66, 0x89,0x7b, - 0x75,0x8b, 0x80,0xe5, 0x76,0xb2, 0x76,0xb4, 0x77,0xdc, 0x80,0x12, 0x80,0x14, - 0x80,0x16, 0x80,0x1c, 0x80,0x20, 0x80,0x22, 0x80,0x25, 0x80,0x26, 0x80,0x27, - 0x80,0x29, 0x80,0x28, 0x80,0x31, 0x80,0x0b, 0x80,0x35, 0x80,0x43, 0x80,0x46, - 0x80,0x4d, 0x80,0x52, 0x80,0x69, 0x80,0x71, 0x89,0x83, 0x98,0x78, 0x98,0x80, - 0x98,0x83, 0x98,0x89, 0x98,0x8c, 0x98,0x8d, 0x98,0x8f, 0x98,0x94, 0x98,0x9a, - 0x98,0x9b, 0x98,0x9e, 0x98,0x9f, 0x98,0xa1, 0x98,0xa2, 0x98,0xa5, 0x98,0xa6, - 0x86,0x4d, 0x86,0x54, 0x86,0x6c, 0x86,0x6e, 0x86,0x7f, 0x86,0x7a, 0x86,0x7c, - 0x86,0x7b, 0x86,0xa8, 0x86,0x8d, 0x86,0x8b, 0x86,0xac, 0x86,0x9d, 0x86,0xa7, - 0x86,0xa3, 0x86,0xaa, 0x86,0x93, 0x86,0xa9, 0x86,0xb6, 0x86,0xc4, 0x86,0xb5, - 0x86,0xce, 0x86,0xb0, 0x86,0xba, 0x86,0xb1, 0x86,0xaf, 0x86,0xc9, 0x86,0xcf, - 0x86,0xb4, 0x86,0xe9, 0x86,0xf1, 0x86,0xf2, 0x86,0xed, 0x86,0xf3, 0x86,0xd0, - 0x87,0x13, 0x86,0xde, 0x86,0xf4, 0x86,0xdf, 0x86,0xd8, 0x86,0xd1, 0x87,0x03, - 0x87,0x07, 0x86,0xf8, 0x87,0x08, 0x87,0x0a, 0x87,0x0d, 0x87,0x09, 0x87,0x23, - 0x87,0x3b, 0x87,0x1e, 0x87,0x25, 0x87,0x2e, 0x87,0x1a, 0x87,0x3e, 0x87,0x48, - 0x87,0x34, 0x87,0x31, 0x87,0x29, 0x87,0x37, 0x87,0x3f, 0x87,0x82, 0x87,0x22, - 0x87,0x7d, 0x87,0x7e, 0x87,0x7b, 0x87,0x60, 0x87,0x70, 0x87,0x4c, 0x87,0x6e, - 0x87,0x8b, 0x87,0x53, 0x87,0x63, 0x87,0x7c, 0x87,0x64, 0x87,0x59, 0x87,0x65, - 0x87,0x93, 0x87,0xaf, 0x87,0xa8, 0x87,0xd2, 0x87,0xc6, 0x87,0x88, 0x87,0x85, - 0x87,0xad, 0x87,0x97, 0x87,0x83, 0x87,0xab, 0x87,0xe5, 0x87,0xac, 0x87,0xb5, - 0x87,0xb3, 0x87,0xcb, 0x87,0xd3, 0x87,0xbd, 0x87,0xd1, 0x87,0xc0, 0x87,0xca, - 0x87,0xdb, 0x87,0xea, 0x87,0xe0, 0x87,0xee, 0x88,0x16, 0x88,0x13, 0x87,0xfe, - 0x88,0x0a, 0x88,0x1b, 0x88,0x21, 0x88,0x39, 0x88,0x3c, 0x7f,0x36, 0x7f,0x42, - 0x7f,0x44, 0x7f,0x45, 0x82,0x10, 0x7a,0xfa, 0x7a,0xfd, 0x7b,0x08, 0x7b,0x03, - 0x7b,0x04, 0x7b,0x15, 0x7b,0x0a, 0x7b,0x2b, 0x7b,0x0f, 0x7b,0x47, 0x7b,0x38, - 0x7b,0x2a, 0x7b,0x19, 0x7b,0x2e, 0x7b,0x31, 0x7b,0x20, 0x7b,0x25, 0x7b,0x24, - 0x7b,0x33, 0x7b,0x3e, 0x7b,0x1e, 0x7b,0x58, 0x7b,0x5a, 0x7b,0x45, 0x7b,0x75, - 0x7b,0x4c, 0x7b,0x5d, 0x7b,0x60, 0x7b,0x6e, 0x7b,0x7b, 0x7b,0x62, 0x7b,0x72, - 0x7b,0x71, 0x7b,0x90, 0x7b,0xa6, 0x7b,0xa7, 0x7b,0xb8, 0x7b,0xac, 0x7b,0x9d, - 0x7b,0xa8, 0x7b,0x85, 0x7b,0xaa, 0x7b,0x9c, 0x7b,0xa2, 0x7b,0xab, 0x7b,0xb4, - 0x7b,0xd1, 0x7b,0xc1, 0x7b,0xcc, 0x7b,0xdd, 0x7b,0xda, 0x7b,0xe5, 0x7b,0xe6, - 0x7b,0xea, 0x7c,0x0c, 0x7b,0xfe, 0x7b,0xfc, 0x7c,0x0f, 0x7c,0x16, 0x7c,0x0b, - 0x7c,0x1f, 0x7c,0x2a, 0x7c,0x26, 0x7c,0x38, 0x7c,0x41, 0x7c,0x40, 0x81,0xfe, - 0x82,0x01, 0x82,0x02, 0x82,0x04, 0x81,0xec, 0x88,0x44, 0x82,0x21, 0x82,0x22, - 0x82,0x23, 0x82,0x2d, 0x82,0x2f, 0x82,0x28, 0x82,0x2b, 0x82,0x38, 0x82,0x3b, - 0x82,0x33, 0x82,0x34, 0x82,0x3e, 0x82,0x44, 0x82,0x49, 0x82,0x4b, 0x82,0x4f, - 0x82,0x5a, 0x82,0x5f, 0x82,0x68, 0x88,0x7e, 0x88,0x85, 0x88,0x88, 0x88,0xd8, - 0x88,0xdf, 0x89,0x5e, 0x7f,0x9d, 0x7f,0x9f, 0x7f,0xa7, 0x7f,0xaf, 0x7f,0xb0, - 0x7f,0xb2, 0x7c,0x7c, 0x65,0x49, 0x7c,0x91, 0x7c,0x9d, 0x7c,0x9c, 0x7c,0x9e, - 0x7c,0xa2, 0x7c,0xb2, 0x7c,0xbc, 0x7c,0xbd, 0x7c,0xc1, 0x7c,0xc7, 0x7c,0xcc, - 0x7c,0xcd, 0x7c,0xc8, 0x7c,0xc5, 0x7c,0xd7, 0x7c,0xe8, 0x82,0x6e, 0x66,0xa8, - 0x7f,0xbf, 0x7f,0xce, 0x7f,0xd5, 0x7f,0xe5, 0x7f,0xe1, 0x7f,0xe6, 0x7f,0xe9, - 0x7f,0xee, 0x7f,0xf3, 0x7c,0xf8, 0x7d,0x77, 0x7d,0xa6, 0x7d,0xae, 0x7e,0x47, - 0x7e,0x9b, 0x9e,0xb8, 0x9e,0xb4, 0x8d,0x73, 0x8d,0x84, 0x8d,0x94, 0x8d,0x91, - 0x8d,0xb1, 0x8d,0x67, 0x8d,0x6d, 0x8c,0x47, 0x8c,0x49, 0x91,0x4a, 0x91,0x50, - 0x91,0x4e, 0x91,0x4f, 0x91,0x64, 0x91,0x62, 0x91,0x61, 0x91,0x70, 0x91,0x69, - 0x91,0x6f, 0x91,0x7d, 0x91,0x7e, 0x91,0x72, 0x91,0x74, 0x91,0x79, 0x91,0x8c, - 0x91,0x85, 0x91,0x90, 0x91,0x8d, 0x91,0x91, 0x91,0xa2, 0x91,0xa3, 0x91,0xaa, - 0x91,0xad, 0x91,0xae, 0x91,0xaf, 0x91,0xb5, 0x91,0xb4, 0x91,0xba, 0x8c,0x55, - 0x9e,0x7e, 0x8d,0xb8, 0x8d,0xeb, 0x8e,0x05, 0x8e,0x59, 0x8e,0x69, 0x8d,0xb5, - 0x8d,0xbf, 0x8d,0xbc, 0x8d,0xba, 0x8d,0xc4, 0x8d,0xd6, 0x8d,0xd7, 0x8d,0xda, - 0x8d,0xde, 0x8d,0xce, 0x8d,0xcf, 0x8d,0xdb, 0x8d,0xc6, 0x8d,0xec, 0x8d,0xf7, - 0x8d,0xf8, 0x8d,0xe3, 0x8d,0xf9, 0x8d,0xfb, 0x8d,0xe4, 0x8e,0x09, 0x8d,0xfd, - 0x8e,0x14, 0x8e,0x1d, 0x8e,0x1f, 0x8e,0x2c, 0x8e,0x2e, 0x8e,0x23, 0x8e,0x2f, - 0x8e,0x3a, 0x8e,0x40, 0x8e,0x39, 0x8e,0x35, 0x8e,0x3d, 0x8e,0x31, 0x8e,0x49, - 0x8e,0x41, 0x8e,0x42, 0x8e,0x51, 0x8e,0x52, 0x8e,0x4a, 0x8e,0x70, 0x8e,0x76, - 0x8e,0x7c, 0x8e,0x6f, 0x8e,0x74, 0x8e,0x85, 0x8e,0x8f, 0x8e,0x94, 0x8e,0x90, - 0x8e,0x9c, 0x8e,0x9e, 0x8c,0x78, 0x8c,0x82, 0x8c,0x8a, 0x8c,0x85, 0x8c,0x98, - 0x8c,0x94, 0x65,0x9b, 0x89,0xd6, 0x89,0xde, 0x89,0xda, 0x89,0xdc, 0x89,0xe5, - 0x89,0xeb, 0x89,0xef, 0x8a,0x3e, 0x8b,0x26, 0x97,0x53, 0x96,0xe9, 0x96,0xf3, - 0x96,0xef, 0x97,0x06, 0x97,0x01, 0x97,0x08, 0x97,0x0f, 0x97,0x0e, 0x97,0x2a, - 0x97,0x2d, 0x97,0x30, 0x97,0x3e, 0x9f,0x80, 0x9f,0x83, 0x9f,0x85, 0x9f,0x86, - 0x9f,0x87, 0x9f,0x88, 0x9f,0x89, 0x9f,0x8a, 0x9f,0x8c, 0x9e,0xfe, 0x9f,0x0b, - 0x9f,0x0d, 0x96,0xb9, 0x96,0xbc, 0x96,0xbd, 0x96,0xce, 0x96,0xd2, 0x77,0xbf, - 0x96,0xe0, 0x92,0x8e, 0x92,0xae, 0x92,0xc8, 0x93,0x3e, 0x93,0x6a, 0x93,0xca, - 0x93,0x8f, 0x94,0x3e, 0x94,0x6b, 0x9c,0x7f, 0x9c,0x82, 0x9c,0x85, 0x9c,0x86, - 0x9c,0x87, 0x9c,0x88, 0x7a,0x23, 0x9c,0x8b, 0x9c,0x8e, 0x9c,0x90, 0x9c,0x91, - 0x9c,0x92, 0x9c,0x94, 0x9c,0x95, 0x9c,0x9a, 0x9c,0x9b, 0x9c,0x9e, 0x9c,0x9f, - 0x9c,0xa0, 0x9c,0xa1, 0x9c,0xa2, 0x9c,0xa3, 0x9c,0xa5, 0x9c,0xa6, 0x9c,0xa7, - 0x9c,0xa8, 0x9c,0xa9, 0x9c,0xab, 0x9c,0xad, 0x9c,0xae, 0x9c,0xb0, 0x9c,0xb1, - 0x9c,0xb2, 0x9c,0xb3, 0x9c,0xb4, 0x9c,0xb5, 0x9c,0xb6, 0x9c,0xb7, 0x9c,0xba, - 0x9c,0xbb, 0x9c,0xbc, 0x9c,0xbd, 0x9c,0xc4, 0x9c,0xc5, 0x9c,0xc6, 0x9c,0xc7, - 0x9c,0xca, 0x9c,0xcb, 0x9c,0xcc, 0x9c,0xcd, 0x9c,0xce, 0x9c,0xcf, 0x9c,0xd0, - 0x9c,0xd3, 0x9c,0xd4, 0x9c,0xd5, 0x9c,0xd7, 0x9c,0xd8, 0x9c,0xd9, 0x9c,0xdc, - 0x9c,0xdd, 0x9c,0xdf, 0x9c,0xe2, 0x97,0x7c, 0x97,0x85, 0x97,0x91, 0x97,0x92, - 0x97,0x94, 0x97,0xaf, 0x97,0xab, 0x97,0xa3, 0x97,0xb2, 0x97,0xb4, 0x9a,0xb1, - 0x9a,0xb0, 0x9a,0xb7, 0x9e,0x58, 0x9a,0xb6, 0x9a,0xba, 0x9a,0xbc, 0x9a,0xc1, - 0x9a,0xc0, 0x9a,0xc5, 0x9a,0xc2, 0x9a,0xcb, 0x9a,0xcc, 0x9a,0xd1, 0x9b,0x45, - 0x9b,0x43, 0x9b,0x47, 0x9b,0x49, 0x9b,0x48, 0x9b,0x4d, 0x9b,0x51, 0x98,0xe8, - 0x99,0x0d, 0x99,0x2e, 0x99,0x55, 0x99,0x54, 0x9a,0xdf, 0x9a,0xe1, 0x9a,0xe6, - 0x9a,0xef, 0x9a,0xeb, 0x9a,0xfb, 0x9a,0xed, 0x9a,0xf9, 0x9b,0x08, 0x9b,0x0f, - 0x9b,0x13, 0x9b,0x1f, 0x9b,0x23, 0x9e,0xbd, 0x9e,0xbe, 0x7e,0x3b, 0x9e,0x82, - 0x9e,0x87, 0x9e,0x88, 0x9e,0x8b, 0x9e,0x92, 0x93,0xd6, 0x9e,0x9d, 0x9e,0x9f, - 0x9e,0xdb, 0x9e,0xdc, 0x9e,0xdd, 0x9e,0xe0, 0x9e,0xdf, 0x9e,0xe2, 0x9e,0xe9, - 0x9e,0xe7, 0x9e,0xe5, 0x9e,0xea, 0x9e,0xef, 0x9f,0x22, 0x9f,0x2c, 0x9f,0x2f, - 0x9f,0x39, 0x9f,0x37, 0x9f,0x3d, 0x9f,0x3e, 0x9f,0x44, -}; -*/ - - -//const int dataszie=78328; - -int CH2Unicode(char *szFrom,wchar_t *wszTo) //,int ctype) -{ - int i=0; - int k=0; - int idx=0; - int size=strlen(szFrom); - - for(i=0;i= 0xa1) && (szFrom[i] <= 0xfe)) - { - if ((szFrom[i+1] >= 0x40) && (szFrom[i+1] <= 0x7e)) - { - idx = ((szFrom[i] - 0xa1) * 157 + (szFrom[i+1] - 0x40)) * 2; - } - else - if ((szFrom[i+1] >= 0xa1) && (szFrom[i+1] <= 0xfe)) - { - idx = ((szFrom[i] - 0xa1) * 157 + (szFrom[i+1] - 0xa1 ) + 63) * 2; - } - wszTo[k++] = b2uTable[idx] * 0x100 + b2uTable[idx+1]; - } - //} - //else - //{ - /* - // GB to Unicode - if ((szFrom[i+1] >= 0xa1) && (szFrom[i+1] <= 0xfe)) - { - if ((szFrom[i] >= 0xa1) && (szFrom[i] <= 0xa9)) - { - idx = ((szFrom[i] - 0xa1) * 94 + (szFrom[i+1] - 0xa1)) * 2; - } - else - if ((szFrom[i] >= 0xb0) && (szFrom[i] <= 0xf7)) - { - idx = ((szFrom[i] - 0xb0 + 9) * 94 + (szFrom[i+1] - 0xa1)) * 2; - } - wszTo[k++] = gb2uTable[idx] * 0x100 + gb2uTable[idx+1]; - } - */ - //} - i+=2; - } - } - wszTo[k]=0; - return k; -} - diff --git a/source/CH2Unicode.h b/source/CH2Unicode.h deleted file mode 100644 index 624f7406..00000000 --- a/source/CH2Unicode.h +++ /dev/null @@ -1,22 +0,0 @@ - -#ifndef CH2UNICODE_H_ -#define CH2UNICODE_H_ - -#include -#include -#include - - - -#ifdef __cplusplus -extern "C" { -#endif - -int CH2Unicode(char *szFrom,wchar_t *wszTo); //,int ctype); - -#ifdef __cplusplus -} -#endif - -#endif - diff --git a/source/FreeTypeGX.cpp b/source/FreeTypeGX.cpp deleted file mode 100644 index a85d25e2..00000000 --- a/source/FreeTypeGX.cpp +++ /dev/null @@ -1,791 +0,0 @@ -/* - * FreeTypeGX is a wrapper class for libFreeType which renders a compiled - * FreeType parsable font into a GX texture for Wii homebrew development. - * Copyright (C) 2008 Armin Tamzarian - * Modified by Tantric, 2009 - * - * This file is part of FreeTypeGX. - * - * FreeTypeGX 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 3 of the License, or - * (at your option) any later version. - * - * FreeTypeGX 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 FreeTypeGX. If not, see . - */ - -#include "FreeTypeGX.h" -#include "CH2Unicode.h" -#include "GB2Unicode.h" -#include "main.h" -#include "cfg.h" - -/*! \struct ftgxCharData_ - * - * Font face character glyph relevant data structure. - */ -typedef struct ftgxCharData_ { - int16_t renderOffsetX; /**< Texture X axis bearing offset. */ - uint16_t glyphAdvanceX; /**< Character glyph X coordinate advance in pixels. */ - uint16_t glyphIndex; /**< Charachter glyph index in the font face. */ - - uint16_t textureWidth; /**< Texture width in pixels/bytes. */ - uint16_t textureHeight; /**< Texture glyph height in pixels/bytes. */ - - int16_t renderOffsetY; /**< Texture Y axis bearing offset. */ - int16_t renderOffsetMax; /**< Texture Y axis bearing maximum value. */ - int16_t renderOffsetMin; /**< Texture Y axis bearing minimum value. */ - - uint32_t* glyphDataTexture; /**< Glyph texture bitmap data buffer. */ -} ftgxCharData; - -/*! \struct ftgxDataOffset_ - * - * Offset structure which hold both a maximum and minimum value. - */ -typedef struct ftgxDataOffset_ { - int16_t ascender; /**< Maximum data offset. */ - int16_t descender; /**< Minimum data offset. */ - int16_t max; /**< Maximum data offset. */ - int16_t min; /**< Minimum data offset. */ -} ftgxDataOffset; - - -/** - * Default constructor for the FreeTypeGX class. - * - * @param textureFormat Optional format (GX_TF_*) of the texture as defined by the libogc gx.h header file. If not specified default value is GX_TF_RGBA8. - * @param vertexIndex Optional vertex format index (GX_VTXFMT*) of the glyph textures as defined by the libogc gx.h header file. If not specified default value is GX_VTXFMT1. - */ -FreeTypeGX::FreeTypeGX(uint8_t textureFormat, uint8_t vertexIndex) { - FT_Init_FreeType(&this->ftLibrary); - - this->textureFormat = textureFormat; - this->setVertexFormat(vertexIndex); - this->setCompatibilityMode(FTGX_COMPATIBILITY_NONE); -} - -/** - * Default destructor for the FreeTypeGX class. - */ -FreeTypeGX::~FreeTypeGX() { - this->unloadFont(); -} - -/** - * Convert a short char sctring to a wide char string. - * - * This routine converts a supplied shot character string into a wide character string. - * Note that it is the user's responsibility to clear the returned buffer once it is no longer needed. - * - * @param strChar Character string to be converted. - * @return Wide character representation of supplied character string. - */ -wchar_t* FreeTypeGX::charToWideChar(char* strChar) { - wchar_t *strWChar; - strWChar = new wchar_t[strlen(strChar) + 1]; - - if(Settings.unicodefix == 1) { - CH2Unicode(strChar, strWChar); - } else if(Settings.unicodefix == 2) { - ConverGB2Unicode(strChar, strWChar); - } else { - char *tempSrc = strChar; - wchar_t *tempDest = strWChar; - while((*tempDest++ = *tempSrc++)); - } - - - return strWChar; -} - -/** - * - * \overload - */ -wchar_t* FreeTypeGX::charToWideChar(const char* strChar) { - return FreeTypeGX::charToWideChar((char*) strChar); -} - -/** - * Setup the vertex attribute formats for the glyph textures. - * - * This function sets up the vertex format for the glyph texture on the specified vertex format index. - * Note that this function should not need to be called except if the vertex formats are cleared or the specified - * vertex format index is modified. - * - * @param vertexIndex Vertex format index (GX_VTXFMT*) of the glyph textures as defined by the libogc gx.h header file. -*/ -void FreeTypeGX::setVertexFormat(uint8_t vertexIndex) { - this->vertexIndex = vertexIndex; - - GX_SetVtxAttrFmt(this->vertexIndex, GX_VA_POS, GX_POS_XY, GX_S16, 0); - GX_SetVtxAttrFmt(this->vertexIndex, GX_VA_TEX0, GX_TEX_ST, GX_F32, 0); - GX_SetVtxAttrFmt(this->vertexIndex, GX_VA_CLR0, GX_CLR_RGBA, GX_RGBA8, 0); -} - -/** - * Sets the TEV and VTX rendering compatibility requirements for the class. - * - * This sets up the default TEV opertion and VTX descriptions rendering values for the class. This ensures that FreeTypeGX - * can remain compatible with external liraries or project code. Certain external libraries or code by design or lack of - * foresight assume that the TEV opertion and VTX descriptions values will remain constant or are always returned to a - * certain value. This will enable compatibility with those libraries and any other code which cannot or will not be changed. - * - * @param compatibilityMode Compatibility descritor (FTGX_COMPATIBILITY_*) as defined in FreeTypeGX.h -*/ -void FreeTypeGX::setCompatibilityMode(uint32_t compatibilityMode) { - this->compatibilityMode = compatibilityMode; -} - -/** - * Sets the TEV operation and VTX descriptor values after texture rendering it complete. - * - * This function calls the GX_SetTevOp and GX_SetVtxDesc functions with the compatibility parameters specified - * in setCompatibilityMode. - */ -void FreeTypeGX::setDefaultMode() { - if(this->compatibilityMode) { - switch(this->compatibilityMode & 0x00FF) { - case FTGX_COMPATIBILITY_DEFAULT_TEVOP_GX_MODULATE: - GX_SetTevOp(GX_TEVSTAGE0, GX_MODULATE); - break; - case FTGX_COMPATIBILITY_DEFAULT_TEVOP_GX_DECAL: - GX_SetTevOp(GX_TEVSTAGE0, GX_DECAL); - break; - case FTGX_COMPATIBILITY_DEFAULT_TEVOP_GX_BLEND: - GX_SetTevOp(GX_TEVSTAGE0, GX_BLEND); - break; - case FTGX_COMPATIBILITY_DEFAULT_TEVOP_GX_REPLACE: - GX_SetTevOp(GX_TEVSTAGE0, GX_REPLACE); - break; - case FTGX_COMPATIBILITY_DEFAULT_TEVOP_GX_PASSCLR: - GX_SetTevOp(GX_TEVSTAGE0, GX_PASSCLR); - break; - default: - break; - } - - switch(this->compatibilityMode & 0xFF00) { - case FTGX_COMPATIBILITY_DEFAULT_VTXDESC_GX_NONE: - GX_SetVtxDesc(GX_VA_TEX0, GX_NONE); - break; - case FTGX_COMPATIBILITY_DEFAULT_VTXDESC_GX_DIRECT: - GX_SetVtxDesc(GX_VA_TEX0, GX_DIRECT); - break; - case FTGX_COMPATIBILITY_DEFAULT_VTXDESC_GX_INDEX8: - GX_SetVtxDesc(GX_VA_TEX0, GX_INDEX8); - break; - case FTGX_COMPATIBILITY_DEFAULT_VTXDESC_GX_INDEX16: - GX_SetVtxDesc(GX_VA_TEX0, GX_INDEX16); - break; - default: - break; - } - } -} - -/** - * Loads and processes a specified true type font buffer to a specific point size. - * - * This routine takes a precompiled true type font buffer and loads the necessary processed data into memory. This routine should be called before drawText will succeed. - * - * @param fontBuffer A pointer in memory to a precompiled true type font buffer. - * @param bufferSize Size of the true type font buffer in bytes. - * @param pointSize The desired point size this wrapper's configured font face. - * @param cacheAll Optional flag to specify if all font characters should be cached when the class object is created. If specified as false the characters only become cached the first time they are used. If not specified default value is false. - */ -uint16_t FreeTypeGX::loadFont(uint8_t* fontBuffer, FT_Long bufferSize, FT_UInt pointSize, bool cacheAll) { - this->unloadFont(); - this->ftPointSize = pointSize; - - FT_New_Memory_Face(this->ftLibrary, (FT_Byte *)fontBuffer, bufferSize, 0, &this->ftFace); - - if(this->ftPointSize > 0) - FT_Set_Pixel_Sizes(this->ftFace, 0, this->ftPointSize); - - this->ftSlot = this->ftFace->glyph; - this->ftKerningEnabled = FT_HAS_KERNING(this->ftFace); - - if (cacheAll) { - return this->cacheGlyphDataComplete(); - } - - return 0; -} - -/** - * - * \overload - */ -uint16_t FreeTypeGX::loadFont(const uint8_t* fontBuffer, FT_Long bufferSize, FT_UInt pointSize, bool cacheAll) { - return this->loadFont((uint8_t *)fontBuffer, bufferSize, pointSize, cacheAll); -} - -/** - * Clears all loaded font glyph data. - * - * This routine clears all members of the font map structure and frees all allocated memory back to the system. - */ -void FreeTypeGX::unloadFont() { - if(this->fontData.size() == 0) - return; - - GX_DrawDone(); - GX_Flush(); - - for( std::map::iterator i = this->fontData.begin(); i != this->fontData.end(); i++) { - free(i->second.glyphDataTexture); - } - - this->fontData.clear(); -} - -void FreeTypeGX::changeSize(FT_UInt vPointSize, FT_UInt hPointSize/*=0*/) { - this->unloadFont(); - this->ftPointSize = vPointSize; - FT_Set_Pixel_Sizes(this->ftFace, hPointSize, this->ftPointSize); -} - -/** - * Adjusts the texture data buffer to necessary width for a given texture format. - * - * This routine determines adjusts the given texture width into the required width to hold the necessary texture data for proper alignment. - * - * @param textureWidth The initial guess for the texture width. - * @param textureFormat The texture format to which the data is to be converted. - * @return The correctly adjusted texture width. - */ -uint16_t FreeTypeGX::adjustTextureWidth(uint16_t textureWidth, uint8_t textureFormat) { - uint16_t alignment; - - switch(textureFormat) { - case GX_TF_I4: /* 8x8 Tiles - 4-bit Intensity */ - case GX_TF_I8: /* 8x4 Tiles - 8-bit Intensity */ - case GX_TF_IA4: /* 8x4 Tiles - 4-bit Intensity, , 4-bit Alpha */ - alignment = 8; - break; - - case GX_TF_IA8: /* 4x4 Tiles - 8-bit Intensity, 8-bit Alpha */ - case GX_TF_RGB565: /* 4x4 Tiles - RGB565 Format */ - case GX_TF_RGB5A3: /* 4x4 Tiles - RGB5A3 Format */ - case GX_TF_RGBA8: /* 4x4 Tiles - RGBA8 Dual Cache Line Format */ - default: - alignment = 4; - break; - } - return textureWidth % alignment == 0 ? textureWidth : alignment + textureWidth - (textureWidth % alignment); - -} - -/** - * Adjusts the texture data buffer to necessary height for a given texture format. - * - * This routine determines adjusts the given texture height into the required height to hold the necessary texture data for proper alignment. - * - * @param textureHeight The initial guess for the texture height. - * @param textureFormat The texture format to which the data is to be converted. - * @return The correctly adjusted texture height. - */ -uint16_t FreeTypeGX::adjustTextureHeight(uint16_t textureHeight, uint8_t textureFormat) { - uint16_t alignment; - - switch(textureFormat) { - case GX_TF_I4: /* 8x8 Tiles - 4-bit Intensity */ - alignment = 8; - break; - - case GX_TF_I8: /* 8x4 Tiles - 8-bit Intensity */ - case GX_TF_IA4: /* 8x4 Tiles - 4-bit Intensity, , 4-bit Alpha */ - case GX_TF_IA8: /* 4x4 Tiles - 8-bit Intensity, 8-bit Alpha */ - case GX_TF_RGB565: /* 4x4 Tiles - RGB565 Format */ - case GX_TF_RGB5A3: /* 4x4 Tiles - RGB5A3 Format */ - case GX_TF_RGBA8: /* 4x4 Tiles - RGBA8 Dual Cache Line Format */ - default: - alignment = 4; - break; - } - return textureHeight % alignment == 0 ? textureHeight : alignment + textureHeight - (textureHeight % alignment); - -} - -/** - * Caches the given font glyph in the instance font texture buffer. - * - * This routine renders and stores the requested glyph's bitmap and relevant information into its own quickly addressible - * structure within an instance-specific map. - * - * @param charCode The requested glyph's character code. - * @return A pointer to the allocated font structure. - */ -ftgxCharData *FreeTypeGX::cacheGlyphData(wchar_t charCode) { - FT_UInt gIndex; - uint16_t textureWidth = 0, textureHeight = 0; - - gIndex = FT_Get_Char_Index( this->ftFace, charCode ); - if (!FT_Load_Glyph(this->ftFace, gIndex, FT_LOAD_DEFAULT )) { - FT_Render_Glyph( this->ftSlot, FT_RENDER_MODE_NORMAL ); - - if(this->ftSlot->format == FT_GLYPH_FORMAT_BITMAP) { - FT_Bitmap *glyphBitmap = &this->ftSlot->bitmap; - - textureWidth = adjustTextureWidth(glyphBitmap->width, this->textureFormat); - textureHeight = adjustTextureHeight(glyphBitmap->rows, this->textureFormat); - - this->fontData[charCode] = (ftgxCharData){ - this->ftSlot->bitmap_left, - this->ftSlot->advance.x >> 6, - gIndex, - textureWidth, - textureHeight, - this->ftSlot->bitmap_top, - this->ftSlot->bitmap_top, - glyphBitmap->rows - this->ftSlot->bitmap_top, - NULL - }; - this->loadGlyphData(glyphBitmap, &this->fontData[charCode]); - - return &this->fontData[charCode]; - } - } - - return NULL; -} - -/** - * Locates each character in this wrapper's configured font face and proccess them. - * - * This routine locates each character in the configured font face and renders the glyph's bitmap. - * Each bitmap and relevant information is loaded into its own quickly addressible structure within an instance-specific map. - */ -uint16_t FreeTypeGX::cacheGlyphDataComplete() { - uint16_t i = 0; - FT_UInt gIndex; - FT_ULong charCode = FT_Get_First_Char( this->ftFace, &gIndex ); - while ( gIndex != 0 ) { - - if(this->cacheGlyphData(charCode) != NULL) { - i++; - } - - charCode = FT_Get_Next_Char( this->ftFace, charCode, &gIndex ); - } - - return i; -} - -/** - * Loads the rendered bitmap into the relevant structure's data buffer. - * - * This routine does a simple byte-wise copy of the glyph's rendered 8-bit grayscale bitmap into the structure's buffer. - * Each byte is converted from the bitmap's intensity value into the a uint32_t RGBA value. - * - * @param bmp A pointer to the most recently rendered glyph's bitmap. - * @param charData A pointer to an allocated ftgxCharData structure whose data represent that of the last rendered glyph. - */ -void FreeTypeGX::loadGlyphData(FT_Bitmap *bmp, ftgxCharData *charData) { - - uint32_t *glyphData = (uint32_t *)memalign(32, charData->textureWidth * charData->textureHeight * 4); - memset(glyphData, 0x00, charData->textureWidth * charData->textureHeight * 4); - - for (uint16_t imagePosY = 0; imagePosY < bmp->rows; imagePosY++) { - for (uint16_t imagePosX = 0; imagePosX < bmp->width; imagePosX++) { - uint32_t pixel = (uint32_t) bmp->buffer[imagePosY * bmp->width + imagePosX]; - glyphData[imagePosY * charData->textureWidth + imagePosX] = 0x00000000 | (pixel << 24) | (pixel << 16) | (pixel << 8) | pixel; - } - } - - switch(this->textureFormat) { - case GX_TF_I4: - charData->glyphDataTexture = Metaphrasis::convertBufferToI4(glyphData, charData->textureWidth, charData->textureHeight); - break; - case GX_TF_I8: - charData->glyphDataTexture = Metaphrasis::convertBufferToI8(glyphData, charData->textureWidth, charData->textureHeight); - break; - case GX_TF_IA4: - charData->glyphDataTexture = Metaphrasis::convertBufferToIA4(glyphData, charData->textureWidth, charData->textureHeight); - break; - case GX_TF_IA8: - charData->glyphDataTexture = Metaphrasis::convertBufferToIA8(glyphData, charData->textureWidth, charData->textureHeight); - break; - case GX_TF_RGB565: - charData->glyphDataTexture = Metaphrasis::convertBufferToRGB565(glyphData, charData->textureWidth, charData->textureHeight); - break; - case GX_TF_RGB5A3: - charData->glyphDataTexture = Metaphrasis::convertBufferToRGB5A3(glyphData, charData->textureWidth, charData->textureHeight); - break; - case GX_TF_RGBA8: - default: - charData->glyphDataTexture = Metaphrasis::convertBufferToRGBA8(glyphData, charData->textureWidth, charData->textureHeight); - break; - } - - free(glyphData); -} - -/** - * Determines the x offset of the rendered string. - * - * This routine calculates the x offset of the rendered string based off of a supplied positional format parameter. - * - * @param width Current pixel width of the string. - * @param format Positional format of the string. - */ -int16_t FreeTypeGX::getStyleOffsetWidth(uint16_t width, uint16_t format) { - - switch(format & FTGX_JUSTIFY_MASK) - { - case FTGX_JUSTIFY_LEFT: - return 0; - - default: - case FTGX_JUSTIFY_CENTER: - return -(width >> 1); - - case FTGX_JUSTIFY_RIGHT: - return -width; - } - - return 0; -} - -/** - * Determines the y offset of the rendered string. - * - * This routine calculates the y offset of the rendered string based off of a supplied positional format parameter. - * - * @param offset Current pixel offset data of the string. - * @param format Positional format of the string. - */ -int16_t FreeTypeGX::getStyleOffsetHeight(ftgxDataOffset *offset, uint16_t format) -{ - switch(format & FTGX_ALIGN_MASK) - { - case FTGX_ALIGN_TOP: - return offset->ascender; - - default: - case FTGX_ALIGN_MIDDLE: - return (offset->ascender + offset->descender + 1) >> 1; - - case FTGX_ALIGN_BOTTOM: - return offset->descender; - - case FTGX_ALIGN_BASELINE: - return 0; - - case FTGX_ALIGN_GLYPH_TOP: - return offset->max; - - case FTGX_ALIGN_GLYPH_MIDDLE: - return (offset->max + offset->min + 1) >> 1; - - case FTGX_ALIGN_GLYPH_BOTTOM: - return offset->min; - } - - return 0; -} - -/** - * Processes the supplied text string and prints the results at the specified coordinates. - * - * This routine processes each character of the supplied text string, loads the relevant preprocessed bitmap buffer, - * a texture from said buffer, and loads the resultant texture into the EFB. - * - * @param x Screen X coordinate at which to output the text. - * @param y Screen Y coordinate at which to output the text. Note that this value corresponds to the text string origin and not the top or bottom of the glyphs. - * @param text NULL terminated string to output. - * @param color Optional color to apply to the text characters. If not specified default value is ftgxWhite: (GXColor){0xff, 0xff, 0xff, 0xff} - * @param textStyle Flags which specify any styling which should be applied to the rendered string. - * @return The number of characters printed. - */ -uint16_t FreeTypeGX::drawText(int16_t x, int16_t y, wchar_t *text, GXColor color, uint16_t textStyle) { - uint16_t strLength = wcslen(text); - uint16_t x_pos = x, printed = 0; - uint16_t x_offset = 0, y_offset = 0; - GXTexObj glyphTexture; - FT_Vector pairDelta; - ftgxDataOffset offset; - - if(textStyle & FTGX_JUSTIFY_MASK) { - x_offset = this->getStyleOffsetWidth(this->getWidth(text), textStyle); - } - if(textStyle & FTGX_ALIGN_MASK) { - y_offset = this->getStyleOffsetHeight(this->getOffset(text, &offset), textStyle); - } - - for (uint16_t i = 0; i < strLength; i++) { - - ftgxCharData* glyphData = NULL; - if( this->fontData.find(text[i]) != this->fontData.end() ) { - glyphData = &this->fontData[text[i]]; - } - else { - glyphData = this->cacheGlyphData(text[i]); - } - - if(glyphData != NULL) { - - if(this->ftKerningEnabled && i) { - FT_Get_Kerning( this->ftFace, this->fontData[text[i - 1]].glyphIndex, glyphData->glyphIndex, FT_KERNING_DEFAULT, &pairDelta ); - x_pos += pairDelta.x >> 6; - } - - GX_InitTexObj(&glyphTexture, glyphData->glyphDataTexture, glyphData->textureWidth, glyphData->textureHeight, this->textureFormat, GX_CLAMP, GX_CLAMP, GX_FALSE); - this->copyTextureToFramebuffer(&glyphTexture, glyphData->textureWidth, glyphData->textureHeight, x_pos + glyphData->renderOffsetX + x_offset, y - glyphData->renderOffsetY + y_offset, color); - - x_pos += glyphData->glyphAdvanceX; - printed++; - } - } - - if(textStyle & FTGX_STYLE_MASK) { - this->drawTextFeature(x + x_offset, y + y_offset, this->getWidth(text), this->getOffset(text, &offset), textStyle, color); - } - - return printed; -} - -/** - * \overload - */ -uint16_t FreeTypeGX::drawText(int16_t x, int16_t y, wchar_t const *text, GXColor color, uint16_t textStyle) { - return this->drawText(x, y, (wchar_t *)text, color, textStyle); -} - -void FreeTypeGX::drawTextFeature(int16_t x, int16_t y, uint16_t width, ftgxDataOffset *offsetData, uint16_t format, GXColor color) { - uint16_t featureHeight = this->ftPointSize >> 4 > 0 ? this->ftPointSize >> 4 : 1; - - if (format & FTGX_STYLE_UNDERLINE ) { - switch(format & FTGX_ALIGN_MASK) { -/* - case FTGX_ALIGN_TOP: - this->copyFeatureToFramebuffer(width, featureHeight, x, y + offsetData->max + 1, color); - break; - case FTGX_ALIGN_MIDDLE: - this->copyFeatureToFramebuffer(width, featureHeight, x, y + ((offsetData->max - offsetData->min + 1) >> 1), color); - break; - case FTGX_ALIGN_BOTTOM: - this->copyFeatureToFramebuffer(width, featureHeight, x, y - offsetData->min, color); - break; -*/ - default: - this->copyFeatureToFramebuffer(width, featureHeight, x, y + 1, color); - break; - } - } - - if (format & FTGX_STYLE_STRIKE ) { - switch(format & FTGX_ALIGN_MASK) { -/* - case FTGX_ALIGN_TOP: - this->copyFeatureToFramebuffer(width, featureHeight, x, y + ((offsetData->max - offsetData->min + 1) >> 1), color); - break; - case FTGX_ALIGN_MIDDLE: - this->copyFeatureToFramebuffer(width, featureHeight, x, y, color); - break; - case FTGX_ALIGN_BOTTOM: - this->copyFeatureToFramebuffer(width, featureHeight, x, y - ((offsetData->max + offsetData->min) >> 1), color); - break; -*/ - default: -// this->copyFeatureToFramebuffer(width, featureHeight, x, y - ((offsetData->max - offsetData->min) >> 1), color); - this->copyFeatureToFramebuffer(width, featureHeight, x, y - ((offsetData->max) >> 1), color); - break; - } - } -} - -/** - * Processes the supplied string and return the width of the string in pixels. - * - * This routine processes each character of the supplied text string and calculates the width of the entire string. - * Note that if precaching of the entire font set is not enabled any uncached glyph will be cached after the call to this function. - * - * @param text NULL terminated string to calculate. - * @return The width of the text string in pixels. - */ -uint16_t FreeTypeGX::getWidth(wchar_t *text) { - uint16_t strLength = wcslen(text); - uint16_t strWidth = 0; - FT_Vector pairDelta; - - for (uint16_t i = 0; i < strLength; i++) { - - ftgxCharData* glyphData = NULL; - if( this->fontData.find(text[i]) != this->fontData.end() ) { - glyphData = &this->fontData[text[i]]; - } - else { - glyphData = this->cacheGlyphData(text[i]); - } - - if(glyphData != NULL) { - if(this->ftKerningEnabled && (i > 0)) { - FT_Get_Kerning( this->ftFace, this->fontData[text[i - 1]].glyphIndex, glyphData->glyphIndex, FT_KERNING_DEFAULT, &pairDelta ); - strWidth += pairDelta.x >> 6; - } - - strWidth += glyphData->glyphAdvanceX; - } - } - - return strWidth; -} - -/** - * - * \overload - */ -uint16_t FreeTypeGX::getWidth(wchar_t const *text) { - return this->getWidth((wchar_t *)text); -} - -/** - * Processes the supplied string and return the height of the string in pixels. - * - * This routine processes each character of the supplied text string and calculates the height of the entire string. - * Note that if precaching of the entire font set is not enabled any uncached glyph will be cached after the call to this function. - * - * @param text NULL terminated string to calculate. - * @return The height of the text string in pixels. - */ -uint16_t FreeTypeGX::getHeight(wchar_t *text) { - ftgxDataOffset offset; - this->getOffset(text, &offset); - - return offset.max - offset.min; -} - -/** - * - * \overload - */ -uint16_t FreeTypeGX::getHeight(wchar_t const *text) { - return this->getHeight((wchar_t *)text); -} - -/** - * Get the maximum offset above and minimum offset below the font origin line. - * - * This function calculates the maximum pixel height above the font origin line and the minimum - * pixel height below the font origin line and returns the values in an addressible structure. - * - * @param text NULL terminated string to calculate. - * @param offset returns the max and min values above and below the font origin line - * - */ -ftgxDataOffset* FreeTypeGX::getOffset(wchar_t *text, ftgxDataOffset* offset) { - uint16_t strLength = wcslen(text); - int16_t strMax = 0, strMin = 9999; - - for (uint16_t i = 0; i < strLength; i++) { - - ftgxCharData* glyphData = NULL; - if( this->fontData.find(text[i]) != this->fontData.end() ) { - glyphData = &this->fontData[text[i]]; - } - else { - glyphData = this->cacheGlyphData(text[i]); - } - - if(glyphData != NULL) { - strMax = glyphData->renderOffsetMax > strMax ? glyphData->renderOffsetMax : strMax; - strMin = glyphData->renderOffsetMin < strMin ? glyphData->renderOffsetMin : strMin; - } - } - offset->ascender = this->ftFace->size->metrics.ascender>>6; - offset->descender = this->ftFace->size->metrics.descender>>6; - offset->max = strMax; - offset->min = strMin; - return offset; -} - -/** - * - * \overload - */ -ftgxDataOffset* FreeTypeGX::getOffset(wchar_t const *text, ftgxDataOffset* offset) { - return this->getOffset(text, offset); -} - -/** - * Copies the supplied texture quad to the EFB. - * - * This routine uses the in-built GX quad builder functions to define the texture bounds and location on the EFB target. - * - * @param texObj A pointer to the glyph's initialized texture object. - * @param texWidth The pixel width of the texture object. - * @param texHeight The pixel height of the texture object. - * @param screenX The screen X coordinate at which to output the rendered texture. - * @param screenY The screen Y coordinate at which to output the rendered texture. - * @param color Color to apply to the texture. - */ -void FreeTypeGX::copyTextureToFramebuffer(GXTexObj *texObj, f32 texWidth, f32 texHeight, int16_t screenX, int16_t screenY, GXColor color) { - - GX_LoadTexObj(texObj, GX_TEXMAP0); - GX_InvalidateTexAll(); - - GX_SetTevOp (GX_TEVSTAGE0, GX_MODULATE); - GX_SetVtxDesc (GX_VA_TEX0, GX_DIRECT); - - GX_Begin(GX_QUADS, this->vertexIndex, 4); - GX_Position2s16(screenX, screenY); - GX_Color4u8(color.r, color.g, color.b, color.a); - GX_TexCoord2f32(0.0f, 0.0f); - - GX_Position2s16(texWidth + screenX, screenY); - GX_Color4u8(color.r, color.g, color.b, color.a); - GX_TexCoord2f32(1.0f, 0.0f); - - GX_Position2s16(texWidth + screenX, texHeight + screenY); - GX_Color4u8(color.r, color.g, color.b, color.a); - GX_TexCoord2f32(1.0f, 1.0f); - - GX_Position2s16(screenX, texHeight + screenY); - GX_Color4u8(color.r, color.g, color.b, color.a); - GX_TexCoord2f32(0.0f, 1.0f); - GX_End(); - - this->setDefaultMode(); -} - -/** - * Creates a feature quad to the EFB. - * - * This function creates a simple quad for displaying underline or strikeout text styling. - * - * @param featureWidth The pixel width of the quad. - * @param featureHeight The pixel height of the quad. - * @param screenX The screen X coordinate at which to output the quad. - * @param screenY The screen Y coordinate at which to output the quad. - * @param color Color to apply to the texture. - */ -void FreeTypeGX::copyFeatureToFramebuffer(f32 featureWidth, f32 featureHeight, int16_t screenX, int16_t screenY, GXColor color) { - - GX_SetTevOp (GX_TEVSTAGE0, GX_PASSCLR); - GX_SetVtxDesc (GX_VA_TEX0, GX_NONE); - - GX_Begin(GX_QUADS, this->vertexIndex, 4); - GX_Position2s16(screenX, screenY); - GX_Color4u8(color.r, color.g, color.b, color.a); - - GX_Position2s16(featureWidth + screenX, screenY); - GX_Color4u8(color.r, color.g, color.b, color.a); - - GX_Position2s16(featureWidth + screenX, featureHeight + screenY); - GX_Color4u8(color.r, color.g, color.b, color.a); - - GX_Position2s16(screenX, featureHeight + screenY); - GX_Color4u8(color.r, color.g, color.b, color.a); - GX_End(); - - this->setDefaultMode(); -} diff --git a/source/FreeTypeGX.h b/source/FreeTypeGX.h deleted file mode 100644 index 1b86bbd6..00000000 --- a/source/FreeTypeGX.h +++ /dev/null @@ -1,272 +0,0 @@ -/* - * FreeTypeGX is a wrapper class for libFreeType which renders a compiled - * FreeType parsable font into a GX texture for Wii homebrew development. - * Copyright (C) 2008 Armin Tamzarian - * Modified by Tantric, 2009 - * - * This file is part of FreeTypeGX. - * - * FreeTypeGX 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 3 of the License, or - * (at your option) any later version. - * - * FreeTypeGX 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 FreeTypeGX. If not, see . - */ - -/** \mainpage FreeTypeGX - * - * \section sec_intro Introduction - * - * FreeTypeGX is a wrapper class for libFreeType which renders a compiled FreeType parsable font into a GX texture for Wii homebrew development. - *
- * FreeTypeGX is written in C++ and makes use of a selectable pre-buffered or buffer-on-demand methodology to allow fast and efficient printing of text to the EFB. - *

- * This library was developed in-full by Armin Tamzarian with the support of developers in \#wiibrew on EFnet. - * - * \section sec_installation_source Installation (Source Code) - * - * -# Ensure that you have the libFreeType Wii library installed in your development environment with the library added to your Makefile where appropriate. - * -# Ensure that you have the Metaphrasis library installed in your development environment with the library added to your Makefile where appropriate. - * -# Extract the FreeTypeGX archive. - * -# Copy the contents of the src directory into your project's development path. - * -# Include the FreeTypeGX header file in your code using syntax such as the following: - * \code - * #include "FreeTypeGX.h" - * \endcode - * - * \section sec_installation_library Installation (Library) - * - * -# Ensure that you have the libFreeType Wii library installed in your development environment with the library added to your Makefile where appropriate. - * -# Ensure that you have the Metaphrasis library installed in your development environment with the library added to your Makefile where appropriate. - * -# Extract the FreeTypeGX archive. - * -# Copy the contents of the lib directory into your devKitPro/libogc directory. - * -# Include the FreeTypeGX header file in your code using syntax such as the following: - * \code - * #include "FreeTypeGX.h" - * \endcode - * - * \section sec_freetypegx_prerequisites FreeTypeGX Prerequisites - * - * Before you begin using FreeTypeGX in your project you must ensure that the desired font in compiled into your project. For this example I will assume you are building your project with a Makefile using devKitPro evironment and are attempting to include a font whose filename is rursus_compact_mono.ttf. - * - * -# Copy the font into a directory which will be processed by the project's Makefile. If you are unsure about where you should place your font just copy the it into your project's source directory. - * \n\n - * -# Modify the Makefile to convert the font into an object file: - * \code - * %.ttf.o : %.ttf - * @echo $(notdir $<) - * $(bin2o) - * \endcode - * \n - * -# Include the font object's generated header file in your source code: - * \code - * #include "rursus_compact_mono_ttf.h" - * \endcode - * This header file defines the two variables that you will need for use within your project: - * \code - * extern const u8 rursus_compact_mono_ttf[]; A pointer to the font buffer within the compiled project. - * extern const u32 rursus_compact_mono_ttf_size; The size of the font's buffer in bytes. - * \endcode - * - * \section sec_freetypegx_usage FreeTypeGX Usage - * - * -# Within the file you included the FreeTypeGX.h header create an instance object of the FreeTypeGX class: - * \code - * FreeTypeGX *freeTypeGX = new FreeTypeGX(); - * \endcode - * Alternately you can specify a texture format to which you would like to render the font characters. Note that the default value for this parameter is GX_TF_RGBA8. - * \code - * FreeTypeGX *freeTypeGX = new FreeTypeGX(GX_TF_RGB565); - * \endcode - * Furthermore, you can also specify a vertex format index to avoid conflicts with concurrent libraries or other systems. Note that the default value for this parameter is GX_VTXFMT1. - * \code - * FreeTypeGX *freeTypeGX = new FreeTypeGX(GX_TF_RGB565, GX_VTXFMT1); - * \endcode - * \n - * Currently supported textures are: - * \li GX_TF_I4 - * \li GX_TF_I8 - * \li GX_TF_IA4 - * \li GX_TF_IA8 - * \li GX_TF_RGB565 - * \li GX_TF_RGB5A3 - * \li GX_TF_RGBA8 - * - * \n - * -# Using the allocated FreeTypeGX instance object call the loadFont function to load the font from the compiled buffer and specify the desired point size. Note that this function can be called multiple times to load a new: - * \code - * freeTypeGX->loadFont(rursus_compact_mono_ttf, rursus_compact_mono_ttf_size, 64); - * \endcode - * Alternately you can specify a flag which will load and cache all available font glyphs immidiately. Note that on large font sets enabling this feature could take a significant amount of time. - * \code - * freeTypeGX->loadFont(rursus_compact_mono_ttf, rursus_compact_mono_ttf_size, 64, true); - * \endcode - * \n - * -# If necessary you can enable compatibility modes with concurrent libraries or systems. For more information on this feature see the documentation for setCompatibilityMode: - * \code - * freeTypeGX->setCompatibilityMode(FTGX_COMPATIBILITY_GRRLIB); - * \endcode - * -# Using the allocated FreeTypeGX instance object call the drawText function to print a string at the specified screen X and Y coordinates to the current EFB: - * \code - * freeTypeGX->drawText(10, 25, _TEXT("FreeTypeGX Rocks!")); - * \endcode - * Alternately you can specify a GXColor object you would like to apply to the printed characters: - * \code - * freeTypeGX->drawText(10, 25, _TEXT("FreeTypeGX Rocks!"), - * (GXColor){0xff, 0xee, 0xaa, 0xff}); - * \endcode - * Furthermore you can also specify a group of styling parameters which will modify the positioning or style of the text: - * \code - * freeTypeGX->drawText(10, 25, _TEXT("FreeTypeGX Rocks!"), - * (GXColor){0xff, 0xee, 0xaa, 0xff}, - * FTGX_JUSTIFY_CENTER | FTGX_ALIGN_BOTTOM | FTGX_STYLE_UNDERLINE); - * \endcode - * \n - * Currently style parameters are: - * \li FTGX_JUSTIFY_LEFT - * \li FTGX_JUSTIFY_CENTER - * \li FTGX_JUSTIFY_RIGHT - * \li FTGX_ALIGN_TOP - * \li FTGX_ALIGN_MIDDLE - * \li FTGX_ALIGN_BOTTOM - * \li FTGX_STYLE_UNDERLINE - * \li FTGX_STYLE_STRIKE - * - * \section sec_license License - * - * FreeTypeGX is distributed under the GNU Lesser General Public License. - * - * \section sec_contact Contact - * - * If you have any suggestions, questions, or comments regarding this library feel free to e-mail me at tamzarian1989 [at] gmail [dawt] com. - */ - -#ifndef FREETYPEGX_H_ -#define FREETYPEGX_H_ - -#include -#include -#include FT_FREETYPE_H -#include FT_BITMAP_H -#include - -#include -#include -#include - -/*! forward deklaration of private structures - * - */ -typedef struct ftgxCharData_ ftgxCharData; -typedef struct ftgxDataOffset_ ftgxDataOffset; - -#define _TEXT(t) L ## t /**< Unicode helper macro. */ - -#define FTGX_NULL 0x0000 -#define FTGX_JUSTIFY_LEFT 0x0001 -#define FTGX_JUSTIFY_CENTER 0x0002 -#define FTGX_JUSTIFY_RIGHT 0x0003 -#define FTGX_JUSTIFY_MASK 0x000f - -#define FTGX_ALIGN_TOP 0x0010 -#define FTGX_ALIGN_MIDDLE 0x0020 -#define FTGX_ALIGN_BOTTOM 0x0030 -#define FTGX_ALIGN_BASELINE 0x0040 -#define FTGX_ALIGN_GLYPH_TOP 0x0050 -#define FTGX_ALIGN_GLYPH_MIDDLE 0x0060 -#define FTGX_ALIGN_GLYPH_BOTTOM 0x0070 -#define FTGX_ALIGN_MASK 0x00f0 - -#define FTGX_STYLE_UNDERLINE 0x0100 -#define FTGX_STYLE_STRIKE 0x0200 -#define FTGX_STYLE_MASK 0x0f00 - -#define FTGX_COMPATIBILITY_DEFAULT_TEVOP_GX_MODULATE 0X0001 -#define FTGX_COMPATIBILITY_DEFAULT_TEVOP_GX_DECAL 0X0002 -#define FTGX_COMPATIBILITY_DEFAULT_TEVOP_GX_BLEND 0X0004 -#define FTGX_COMPATIBILITY_DEFAULT_TEVOP_GX_REPLACE 0X0008 -#define FTGX_COMPATIBILITY_DEFAULT_TEVOP_GX_PASSCLR 0X0010 - -#define FTGX_COMPATIBILITY_DEFAULT_VTXDESC_GX_NONE 0X0100 -#define FTGX_COMPATIBILITY_DEFAULT_VTXDESC_GX_DIRECT 0X0200 -#define FTGX_COMPATIBILITY_DEFAULT_VTXDESC_GX_INDEX8 0X0400 -#define FTGX_COMPATIBILITY_DEFAULT_VTXDESC_GX_INDEX16 0X0800 - -#define FTGX_COMPATIBILITY_NONE 0x0000 -#define FTGX_COMPATIBILITY_GRRLIB FTGX_COMPATIBILITY_DEFAULT_TEVOP_GX_PASSCLR | FTGX_COMPATIBILITY_DEFAULT_VTXDESC_GX_NONE -#define FTGX_COMPATIBILITY_LIBWIISPRITE FTGX_COMPATIBILITY_DEFAULT_TEVOP_GX_MODULATE | FTGX_COMPATIBILITY_DEFAULT_VTXDESC_GX_DIRECT - -const GXColor ftgxWhite = (GXColor){0xff, 0xff, 0xff, 0xff}; /**< Constant color value used only to sanitize Doxygen documentation. */ - -/*! \class FreeTypeGX - * \brief Wrapper class for the libFreeType library with GX rendering. - * \author Armin Tamzarian - * \version 0.2.4 - * - * FreeTypeGX acts as a wrapper class for the libFreeType library. It supports precaching of transformed glyph data into - * a specified texture format. Rendering of the data to the EFB is accomplished through the application of high performance - * GX texture functions resulting in high throughput of string rendering. - */ -class FreeTypeGX { - - private: - FT_Library ftLibrary; /**< FreeType FT_Library instance. */ - FT_Face ftFace; /**< FreeType reusable FT_Face typographic object. */ - FT_GlyphSlot ftSlot; /**< FreeType reusable FT_GlyphSlot glyph container object. */ - FT_UInt ftPointSize; /**< Requested size of the rendered font. */ - bool ftKerningEnabled; /**< Flag indicating the availability of font kerning data. */ - - uint8_t textureFormat; /**< Defined texture format of the target EFB. */ - uint8_t vertexIndex; /**< Vertex format descriptor index. */ - uint32_t compatibilityMode; /**< Compatibility mode for default tev operations and vertex descriptors. */ - std::map fontData; /**< Map which holds the glyph data structures for the corresponding characters. */ - - static uint16_t adjustTextureWidth(uint16_t textureWidth, uint8_t textureFormat); - static uint16_t adjustTextureHeight(uint16_t textureHeight, uint8_t textureFormat); - - static int16_t getStyleOffsetWidth(uint16_t width, uint16_t format); - static int16_t getStyleOffsetHeight(ftgxDataOffset *offset, uint16_t format); - - void unloadFont(); - ftgxCharData *cacheGlyphData(wchar_t charCode); - uint16_t cacheGlyphDataComplete(); - void loadGlyphData(FT_Bitmap *bmp, ftgxCharData *charData); - - void setDefaultMode(); - - void drawTextFeature(int16_t x, int16_t y, uint16_t width, ftgxDataOffset *offsetData, uint16_t format, GXColor color); - void copyTextureToFramebuffer(GXTexObj *texObj, f32 texWidth, f32 texHeight, int16_t screenX, int16_t screenY, GXColor color); - void copyFeatureToFramebuffer(f32 featureWidth, f32 featureHeight, int16_t screenX, int16_t screenY, GXColor color); - - public: - FreeTypeGX(uint8_t textureFormat = GX_TF_RGBA8, uint8_t vertexIndex = GX_VTXFMT1); - ~FreeTypeGX(); - - static wchar_t* charToWideChar(char* p); - static wchar_t* charToWideChar(const char* p); - void setVertexFormat(uint8_t vertexIndex); - void setCompatibilityMode(uint32_t compatibilityMode); - - uint16_t loadFont(uint8_t* fontBuffer, FT_Long bufferSize, FT_UInt pointSize, bool cacheAll = false); - uint16_t loadFont(const uint8_t* fontBuffer, FT_Long bufferSize, FT_UInt pointSize, bool cacheAll = false); - void changeSize(FT_UInt vPointSize, FT_UInt hPointSize=0); - - uint16_t drawText(int16_t x, int16_t y, wchar_t *text, GXColor color = ftgxWhite, uint16_t textStyling = FTGX_NULL); - uint16_t drawText(int16_t x, int16_t y, wchar_t const *text, GXColor color = ftgxWhite, uint16_t textStyling = FTGX_NULL); - - uint16_t getWidth(wchar_t *text); - uint16_t getWidth(wchar_t const *text); - uint16_t getHeight(wchar_t *text); - uint16_t getHeight(wchar_t const *text); - ftgxDataOffset* getOffset(wchar_t *text, ftgxDataOffset* offset); - ftgxDataOffset* getOffset(wchar_t const *text, ftgxDataOffset* offset); -}; - -#endif /* FREETYPEGX_H_ */ diff --git a/source/GB2Unicode.c b/source/GB2Unicode.c deleted file mode 100644 index 82a51b0d..00000000 --- a/source/GB2Unicode.c +++ /dev/null @@ -1,997 +0,0 @@ -//GB2Unicode.c - - -#include "GB2Unicode.h" - - - - -unsigned short bGbUnicodedat1[]={ -0x3000,0x3001,0x3002,0x00B7,0x02C9,0x02C7,0x00A8,0x3003, -0x3005,0x2014,0xFF5E,0x2016,0x2026,0x2018,0x2019,0x201C, -0x201D,0x3014,0x3015,0x3008,0x3009,0x300A,0x300B,0x300C, -0x300D,0x300E,0x300F,0x3016,0x3017,0x3010,0x3011,0x00B1, -0x00D7,0x00F7,0x2236,0x2227,0x2228,0x2211,0x220F,0x222A, -0x2229,0x2208,0x2237,0x221A,0x22A5,0x2225,0x2220,0x2312, -0x2299,0x222B,0x222E,0x2261,0x224C,0x2248,0x223D,0x221D, -0x2260,0x226E,0x226F,0x2264,0x2265,0x221E,0x2235,0x2234, -0x2642,0x2640,0x00B0,0x2032,0x2033,0x2103,0xFF04,0x00A4, -0xFFE0,0xFFE1,0x2030,0x00A7,0x2116,0x2606,0x2605,0x25CB, -0x25CF,0x25CE,0x25C7,0x25C6,0x25A1,0x25A0,0x25B3,0x25B2, -0x203B,0x2192,0x2190,0x2191,0x2193,0x3013,0x2170,0x2171, -0x2172,0x2173,0x2174,0x2175,0x2176,0x2177,0x2178,0x2179, -0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2488,0x2489, -0x248A,0x248B,0x248C,0x248D,0x248E,0x248F,0x2490,0x2491, -0x2492,0x2493,0x2494,0x2495,0x2496,0x2497,0x2498,0x2499, -0x249A,0x249B,0x2474,0x2475,0x2476,0x2477,0x2478,0x2479, -0x247A,0x247B,0x247C,0x247D,0x247E,0x247F,0x2480,0x2481, -0x2482,0x2483,0x2484,0x2485,0x2486,0x2487,0x2460,0x2461, -0x2462,0x2463,0x2464,0x2465,0x2466,0x2467,0x2468,0x2469, -0x2000,0x2000,0x3220,0x3221,0x3222,0x3223,0x3224,0x3225, -0x3226,0x3227,0x3228,0x3229,0x2000,0x2000,0x2160,0x2161, -0x2162,0x2163,0x2164,0x2165,0x2166,0x2167,0x2168,0x2169, -0x216A,0x216B,0x2000,0x2000,0xFF01,0xFF02,0xFF03,0xFFE5, -0xFF05,0xFF06,0xFF07,0xFF08,0xFF09,0xFF0A,0xFF0B,0xFF0C, -0xFF0D,0xFF0E,0xFF0F,0xFF10,0xFF11,0xFF12,0xFF13,0xFF14, -0xFF15,0xFF16,0xFF17,0xFF18,0xFF19,0xFF1A,0xFF1B,0xFF1C, -0xFF1D,0xFF1E,0xFF1F,0xFF20,0xFF21,0xFF22,0xFF23,0xFF24, -0xFF25,0xFF26,0xFF27,0xFF28,0xFF29,0xFF2A,0xFF2B,0xFF2C, -0xFF2D,0xFF2E,0xFF2F,0xFF30,0xFF31,0xFF32,0xFF33,0xFF34, -0xFF35,0xFF36,0xFF37,0xFF38,0xFF39,0xFF3A,0xFF3B,0xFF3C, -0xFF3D,0xFF3E,0xFF3F,0xFF40,0xFF41,0xFF42,0xFF43,0xFF44, -0xFF45,0xFF46,0xFF47,0xFF48,0xFF49,0xFF4A,0xFF4B,0xFF4C, -0xFF4D,0xFF4E,0xFF4F,0xFF50,0xFF51,0xFF52,0xFF53,0xFF54, -0xFF55,0xFF56,0xFF57,0xFF58,0xFF59,0xFF5A,0xFF5B,0xFF5C, -0xFF5D,0xFFE3,0x3041,0x3042,0x3043,0x3044,0x3045,0x3046, -0x3047,0x3048,0x3049,0x304A,0x304B,0x304C,0x304D,0x304E, -0x304F,0x3050,0x3051,0x3052,0x3053,0x3054,0x3055,0x3056, -0x3057,0x3058,0x3059,0x305A,0x305B,0x305C,0x305D,0x305E, -0x305F,0x3060,0x3061,0x3062,0x3063,0x3064,0x3065,0x3066, -0x3067,0x3068,0x3069,0x306A,0x306B,0x306C,0x306D,0x306E, -0x306F,0x3070,0x3071,0x3072,0x3073,0x3074,0x3075,0x3076, -0x3077,0x3078,0x3079,0x307A,0x307B,0x307C,0x307D,0x307E, -0x307F,0x3080,0x3081,0x3082,0x3083,0x3084,0x3085,0x3086, -0x3087,0x3088,0x3089,0x308A,0x308B,0x308C,0x308D,0x308E, -0x308F,0x3090,0x3091,0x3092,0x3093,0x2000,0x2000,0x2000, -0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000, -0x30A1,0x30A2,0x30A3,0x30A4,0x30A5,0x30A6,0x30A7,0x30A8, -0x30A9,0x30AA,0x30AB,0x30AC,0x30AD,0x30AE,0x30AF,0x30B0, -0x30B1,0x30B2,0x30B3,0x30B4,0x30B5,0x30B6,0x30B7,0x30B8, -0x30B9,0x30BA,0x30BB,0x30BC,0x30BD,0x30BE,0x30BF,0x30C0, -0x30C1,0x30C2,0x30C3,0x30C4,0x30C5,0x30C6,0x30C7,0x30C8, -0x30C9,0x30CA,0x30CB,0x30CC,0x30CD,0x30CE,0x30CF,0x30D0, -0x30D1,0x30D2,0x30D3,0x30D4,0x30D5,0x30D6,0x30D7,0x30D8, -0x30D9,0x30DA,0x30DB,0x30DC,0x30DD,0x30DE,0x30DF,0x30E0, -0x30E1,0x30E2,0x30E3,0x30E4,0x30E5,0x30E6,0x30E7,0x30E8, -0x30E9,0x30EA,0x30EB,0x30EC,0x30ED,0x30EE,0x30EF,0x30F0, -0x30F1,0x30F2,0x30F3,0x30F4,0x30F5,0x30F6,0x2000,0x2000, -0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x0391,0x0392, -0x0393,0x0394,0x0395,0x0396,0x0397,0x0398,0x0399,0x039A, -0x039B,0x039C,0x039D,0x039E,0x039F,0x03A0,0x03A1,0x03A3, -0x03A4,0x03A5,0x03A6,0x03A7,0x03A8,0x03A9,0x2000,0x2000, -0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x03B1,0x03B2, -0x03B3,0x03B4,0x03B5,0x03B6,0x03B7,0x03B8,0x03B9,0x03BA, -0x03BB,0x03BC,0x03BD,0x03BE,0x03BF,0x03C0,0x03C1,0x03C3, -0x03C4,0x03C5,0x03C6,0x03C7,0x03C8,0x03C9,0x2000,0x2000, -0x2000,0x2000,0x2000,0x2000,0x2000,0xFE35,0xFE36,0xFE39, -0xFE3A,0xFE3F,0xFE40,0xFE3D,0xFE3E,0xFE41,0xFE42,0xFE43, -0xFE44,0x2000,0x2000,0xFE3B,0xFE3C,0xFE37,0xFE38,0xFE31, -0x2000,0xFE33,0xFE34,0x2000,0x2000,0x2000,0x2000,0x2000, -0x2000,0x2000,0x2000,0x2000,0x0410,0x0411,0x0412,0x0413, -0x0414,0x0415,0x0401,0x0416,0x0417,0x0418,0x0419,0x041A, -0x041B,0x041C,0x041D,0x041E,0x041F,0x0420,0x0421,0x0422, -0x0423,0x0424,0x0425,0x0426,0x0427,0x0428,0x0429,0x042A, -0x042B,0x042C,0x042D,0x042E,0x042F,0x2000,0x2000,0x2000, -0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000, -0x2000,0x2000,0x2000,0x2000,0x0430,0x0431,0x0432,0x0433, -0x0434,0x0435,0x0451,0x0436,0x0437,0x0438,0x0439,0x043A, -0x043B,0x043C,0x043D,0x043E,0x043F,0x0440,0x0441,0x0442, -0x0443,0x0444,0x0445,0x0446,0x0447,0x0448,0x0449,0x044A, -0x044B,0x044C,0x044D,0x044E,0x044F,0x2000,0x2000,0x2000, -0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000, -0x2000,0x2000,0x0101,0x00E1,0x01CE,0x00E0,0x0113,0x00E9, -0x011B,0x00E8,0x012B,0x00ED,0x01D0,0x00EC,0x014D,0x00F3, -0x01D2,0x00F2,0x016B,0x00FA,0x01D4,0x00F9,0x01D6,0x01D8, -0x01DA,0x01DC,0x00FC,0x00EA,0x0251,0xE7C7,0x0144,0x0148, -0xE7C8,0x0261,0x2000,0x2000,0x2000,0x2000,0x3105,0x3106, -0x3107,0x3108,0x3109,0x310A,0x310B,0x310C,0x310D,0x310E, -0x310F,0x3110,0x3111,0x3112,0x3113,0x3114,0x3115,0x3116, -0x3117,0x3118,0x3119,0x311A,0x311B,0x311C,0x311D,0x311E, -0x311F,0x3120,0x3121,0x3122,0x3123,0x3124,0x3125,0x3126, -0x3127,0x3128,0x3129,0x2000,0x2000,0x2000,0x2000,0x2000, -0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000, -0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000, -0x2000,0x2000,0x2000,0x2500,0x2501,0x2502,0x2503,0x2504, -0x2505,0x2506,0x2507,0x2508,0x2509,0x250A,0x250B,0x250C, -0x250D,0x250E,0x250F,0x2510,0x2511,0x2512,0x2513,0x2514, -0x2515,0x2516,0x2517,0x2518,0x2519,0x251A,0x251B,0x251C, -0x251D,0x251E,0x251F,0x2520,0x2521,0x2522,0x2523,0x2524, -0x2525,0x2526,0x2527,0x2528,0x2529,0x252A,0x252B,0x252C, -0x252D,0x252E,0x252F,0x2530,0x2531,0x2532,0x2533,0x2534, -0x2535,0x2536,0x2537,0x2538,0x2539,0x253A,0x253B,0x253C, -0x253D,0x253E,0x253F,0x2540,0x2541,0x2542,0x2543,0x2544, -0x2545,0x2546,0x2547,0x2548,0x2549,0x254A,0x254B,0x2000, -0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000, -0x2000,0x2000,0x2000,0x2000,0x2000,0x2000 -}; -unsigned short bGbUnicodedat2[]={ -0x554A,0x963F,0x57C3,0x6328,0x54CE,0x5509,0x54C0,0x7691, -0x764C,0x853C,0x77EE,0x827E,0x788D,0x7231,0x9698,0x978D, -0x6C28,0x5B89,0x4FFA,0x6309,0x6697,0x5CB8,0x80FA,0x6848, -0x80AE,0x6602,0x76CE,0x51F9,0x6556,0x71AC,0x7FF1,0x8884, -0x50B2,0x5965,0x61CA,0x6FB3,0x82AD,0x634C,0x6252,0x53ED, -0x5427,0x7B06,0x516B,0x75A4,0x5DF4,0x62D4,0x8DCB,0x9776, -0x628A,0x8019,0x575D,0x9738,0x7F62,0x7238,0x767D,0x67CF, -0x767E,0x6446,0x4F70,0x8D25,0x62DC,0x7A17,0x6591,0x73ED, -0x642C,0x6273,0x822C,0x9881,0x677F,0x7248,0x626E,0x62CC, -0x4F34,0x74E3,0x534A,0x529E,0x7ECA,0x90A6,0x5E2E,0x6886, -0x699C,0x8180,0x7ED1,0x68D2,0x78C5,0x868C,0x9551,0x508D, -0x8C24,0x82DE,0x80DE,0x5305,0x8912,0x5265,0x8584,0x96F9, -0x4FDD,0x5821,0x9971,0x5B9D,0x62B1,0x62A5,0x66B4,0x8C79, -0x9C8D,0x7206,0x676F,0x7891,0x60B2,0x5351,0x5317,0x8F88, -0x80CC,0x8D1D,0x94A1,0x500D,0x72C8,0x5907,0x60EB,0x7119, -0x88AB,0x5954,0x82EF,0x672C,0x7B28,0x5D29,0x7EF7,0x752D, -0x6CF5,0x8E66,0x8FF8,0x903C,0x9F3B,0x6BD4,0x9119,0x7B14, -0x5F7C,0x78A7,0x84D6,0x853D,0x6BD5,0x6BD9,0x6BD6,0x5E01, -0x5E87,0x75F9,0x95ED,0x655D,0x5F0A,0x5FC5,0x8F9F,0x58C1, -0x81C2,0x907F,0x965B,0x97AD,0x8FB9,0x7F16,0x8D2C,0x6241, -0x4FBF,0x53D8,0x535E,0x8FA8,0x8FA9,0x8FAB,0x904D,0x6807, -0x5F6A,0x8198,0x8868,0x9CD6,0x618B,0x522B,0x762A,0x5F6C, -0x658C,0x6FD2,0x6EE8,0x5BBE,0x6448,0x5175,0x51B0,0x67C4, -0x4E19,0x79C9,0x997C,0x70B3,0x75C5,0x5E76,0x73BB,0x83E0, -0x64AD,0x62E8,0x94B5,0x6CE2,0x535A,0x52C3,0x640F,0x94C2, -0x7B94,0x4F2F,0x5E1B,0x8236,0x8116,0x818A,0x6E24,0x6CCA, -0x9A73,0x6355,0x535C,0x54FA,0x8865,0x57E0,0x4E0D,0x5E03, -0x6B65,0x7C3F,0x90E8,0x6016,0x64E6,0x731C,0x88C1,0x6750, -0x624D,0x8D22,0x776C,0x8E29,0x91C7,0x5F69,0x83DC,0x8521, -0x9910,0x53C2,0x8695,0x6B8B,0x60ED,0x60E8,0x707F,0x82CD, -0x8231,0x4ED3,0x6CA7,0x85CF,0x64CD,0x7CD9,0x69FD,0x66F9, -0x8349,0x5395,0x7B56,0x4FA7,0x518C,0x6D4B,0x5C42,0x8E6D, -0x63D2,0x53C9,0x832C,0x8336,0x67E5,0x78B4,0x643D,0x5BDF, -0x5C94,0x5DEE,0x8BE7,0x62C6,0x67F4,0x8C7A,0x6400,0x63BA, -0x8749,0x998B,0x8C17,0x7F20,0x94F2,0x4EA7,0x9610,0x98A4, -0x660C,0x7316,0x573A,0x5C1D,0x5E38,0x957F,0x507F,0x80A0, -0x5382,0x655E,0x7545,0x5531,0x5021,0x8D85,0x6284,0x949E, -0x671D,0x5632,0x6F6E,0x5DE2,0x5435,0x7092,0x8F66,0x626F, -0x64A4,0x63A3,0x5F7B,0x6F88,0x90F4,0x81E3,0x8FB0,0x5C18, -0x6668,0x5FF1,0x6C89,0x9648,0x8D81,0x886C,0x6491,0x79F0, -0x57CE,0x6A59,0x6210,0x5448,0x4E58,0x7A0B,0x60E9,0x6F84, -0x8BDA,0x627F,0x901E,0x9A8B,0x79E4,0x5403,0x75F4,0x6301, -0x5319,0x6C60,0x8FDF,0x5F1B,0x9A70,0x803B,0x9F7F,0x4F88, -0x5C3A,0x8D64,0x7FC5,0x65A5,0x70BD,0x5145,0x51B2,0x866B, -0x5D07,0x5BA0,0x62BD,0x916C,0x7574,0x8E0C,0x7A20,0x6101, -0x7B79,0x4EC7,0x7EF8,0x7785,0x4E11,0x81ED,0x521D,0x51FA, -0x6A71,0x53A8,0x8E87,0x9504,0x96CF,0x6EC1,0x9664,0x695A, -0x7840,0x50A8,0x77D7,0x6410,0x89E6,0x5904,0x63E3,0x5DDD, -0x7A7F,0x693D,0x4F20,0x8239,0x5598,0x4E32,0x75AE,0x7A97, -0x5E62,0x5E8A,0x95EF,0x521B,0x5439,0x708A,0x6376,0x9524, -0x5782,0x6625,0x693F,0x9187,0x5507,0x6DF3,0x7EAF,0x8822, -0x6233,0x7EF0,0x75B5,0x8328,0x78C1,0x96CC,0x8F9E,0x6148, -0x74F7,0x8BCD,0x6B64,0x523A,0x8D50,0x6B21,0x806A,0x8471, -0x56F1,0x5306,0x4ECE,0x4E1B,0x51D1,0x7C97,0x918B,0x7C07, -0x4FC3,0x8E7F,0x7BE1,0x7A9C,0x6467,0x5D14,0x50AC,0x8106, -0x7601,0x7CB9,0x6DEC,0x7FE0,0x6751,0x5B58,0x5BF8,0x78CB, -0x64AE,0x6413,0x63AA,0x632B,0x9519,0x642D,0x8FBE,0x7B54, -0x7629,0x6253,0x5927,0x5446,0x6B79,0x50A3,0x6234,0x5E26, -0x6B86,0x4EE3,0x8D37,0x888B,0x5F85,0x902E,0x6020,0x803D, -0x62C5,0x4E39,0x5355,0x90F8,0x63B8,0x80C6,0x65E6,0x6C2E, -0x4F46,0x60EE,0x6DE1,0x8BDE,0x5F39,0x86CB,0x5F53,0x6321, -0x515A,0x8361,0x6863,0x5200,0x6363,0x8E48,0x5012,0x5C9B, -0x7977,0x5BFC,0x5230,0x7A3B,0x60BC,0x9053,0x76D7,0x5FB7, -0x5F97,0x7684,0x8E6C,0x706F,0x767B,0x7B49,0x77AA,0x51F3, -0x9093,0x5824,0x4F4E,0x6EF4,0x8FEA,0x654C,0x7B1B,0x72C4, -0x6DA4,0x7FDF,0x5AE1,0x62B5,0x5E95,0x5730,0x8482,0x7B2C, -0x5E1D,0x5F1F,0x9012,0x7F14,0x98A0,0x6382,0x6EC7,0x7898, -0x70B9,0x5178,0x975B,0x57AB,0x7535,0x4F43,0x7538,0x5E97, -0x60E6,0x5960,0x6DC0,0x6BBF,0x7889,0x53FC,0x96D5,0x51CB, -0x5201,0x6389,0x540A,0x9493,0x8C03,0x8DCC,0x7239,0x789F, -0x8776,0x8FED,0x8C0D,0x53E0,0x4E01,0x76EF,0x53EE,0x9489, -0x9876,0x9F0E,0x952D,0x5B9A,0x8BA2,0x4E22,0x4E1C,0x51AC, -0x8463,0x61C2,0x52A8,0x680B,0x4F97,0x606B,0x51BB,0x6D1E, -0x515C,0x6296,0x6597,0x9661,0x8C46,0x9017,0x75D8,0x90FD, -0x7763,0x6BD2,0x728A,0x72EC,0x8BFB,0x5835,0x7779,0x8D4C, -0x675C,0x9540,0x809A,0x5EA6,0x6E21,0x5992,0x7AEF,0x77ED, -0x953B,0x6BB5,0x65AD,0x7F0E,0x5806,0x5151,0x961F,0x5BF9, -0x58A9,0x5428,0x8E72,0x6566,0x987F,0x56E4,0x949D,0x76FE, -0x9041,0x6387,0x54C6,0x591A,0x593A,0x579B,0x8EB2,0x6735, -0x8DFA,0x8235,0x5241,0x60F0,0x5815,0x86FE,0x5CE8,0x9E45, -0x4FC4,0x989D,0x8BB9,0x5A25,0x6076,0x5384,0x627C,0x904F, -0x9102,0x997F,0x6069,0x800C,0x513F,0x8033,0x5C14,0x9975, -0x6D31,0x4E8C,0x8D30,0x53D1,0x7F5A,0x7B4F,0x4F10,0x4E4F, -0x9600,0x6CD5,0x73D0,0x85E9,0x5E06,0x756A,0x7FFB,0x6A0A, -0x77FE,0x9492,0x7E41,0x51E1,0x70E6,0x53CD,0x8FD4,0x8303, -0x8D29,0x72AF,0x996D,0x6CDB,0x574A,0x82B3,0x65B9,0x80AA, -0x623F,0x9632,0x59A8,0x4EFF,0x8BBF,0x7EBA,0x653E,0x83F2, -0x975E,0x5561,0x98DE,0x80A5,0x532A,0x8BFD,0x5420,0x80BA, -0x5E9F,0x6CB8,0x8D39,0x82AC,0x915A,0x5429,0x6C1B,0x5206, -0x7EB7,0x575F,0x711A,0x6C7E,0x7C89,0x594B,0x4EFD,0x5FFF, -0x6124,0x7CAA,0x4E30,0x5C01,0x67AB,0x8702,0x5CF0,0x950B, -0x98CE,0x75AF,0x70FD,0x9022,0x51AF,0x7F1D,0x8BBD,0x5949, -0x51E4,0x4F5B,0x5426,0x592B,0x6577,0x80A4,0x5B75,0x6276, -0x62C2,0x8F90,0x5E45,0x6C1F,0x7B26,0x4F0F,0x4FD8,0x670D, -0x6D6E,0x6DAA,0x798F,0x88B1,0x5F17,0x752B,0x629A,0x8F85, -0x4FEF,0x91DC,0x65A7,0x812F,0x8151,0x5E9C,0x8150,0x8D74, -0x526F,0x8986,0x8D4B,0x590D,0x5085,0x4ED8,0x961C,0x7236, -0x8179,0x8D1F,0x5BCC,0x8BA3,0x9644,0x5987,0x7F1A,0x5490, -0x5676,0x560E,0x8BE5,0x6539,0x6982,0x9499,0x76D6,0x6E89, -0x5E72,0x7518,0x6746,0x67D1,0x7AFF,0x809D,0x8D76,0x611F, -0x79C6,0x6562,0x8D63,0x5188,0x521A,0x94A2,0x7F38,0x809B, -0x7EB2,0x5C97,0x6E2F,0x6760,0x7BD9,0x768B,0x9AD8,0x818F, -0x7F94,0x7CD5,0x641E,0x9550,0x7A3F,0x544A,0x54E5,0x6B4C, -0x6401,0x6208,0x9E3D,0x80F3,0x7599,0x5272,0x9769,0x845B, -0x683C,0x86E4,0x9601,0x9694,0x94EC,0x4E2A,0x5404,0x7ED9, -0x6839,0x8DDF,0x8015,0x66F4,0x5E9A,0x7FB9,0x57C2,0x803F, -0x6897,0x5DE5,0x653B,0x529F,0x606D,0x9F9A,0x4F9B,0x8EAC, -0x516C,0x5BAB,0x5F13,0x5DE9,0x6C5E,0x62F1,0x8D21,0x5171, -0x94A9,0x52FE,0x6C9F,0x82DF,0x72D7,0x57A2,0x6784,0x8D2D, -0x591F,0x8F9C,0x83C7,0x5495,0x7B8D,0x4F30,0x6CBD,0x5B64, -0x59D1,0x9F13,0x53E4,0x86CA,0x9AA8,0x8C37,0x80A1,0x6545, -0x987E,0x56FA,0x96C7,0x522E,0x74DC,0x5250,0x5BE1,0x6302, -0x8902,0x4E56,0x62D0,0x602A,0x68FA,0x5173,0x5B98,0x51A0, -0x89C2,0x7BA1,0x9986,0x7F50,0x60EF,0x704C,0x8D2F,0x5149, -0x5E7F,0x901B,0x7470,0x89C4,0x572D,0x7845,0x5F52,0x9F9F, -0x95FA,0x8F68,0x9B3C,0x8BE1,0x7678,0x6842,0x67DC,0x8DEA, -0x8D35,0x523D,0x8F8A,0x6EDA,0x68CD,0x9505,0x90ED,0x56FD, -0x679C,0x88F9,0x8FC7,0x54C8,0x9AB8,0x5B69,0x6D77,0x6C26, -0x4EA5,0x5BB3,0x9A87,0x9163,0x61A8,0x90AF,0x97E9,0x542B, -0x6DB5,0x5BD2,0x51FD,0x558A,0x7F55,0x7FF0,0x64BC,0x634D, -0x65F1,0x61BE,0x608D,0x710A,0x6C57,0x6C49,0x592F,0x676D, -0x822A,0x58D5,0x568E,0x8C6A,0x6BEB,0x90DD,0x597D,0x8017, -0x53F7,0x6D69,0x5475,0x559D,0x8377,0x83CF,0x6838,0x79BE, -0x548C,0x4F55,0x5408,0x76D2,0x8C89,0x9602,0x6CB3,0x6DB8, -0x8D6B,0x8910,0x9E64,0x8D3A,0x563F,0x9ED1,0x75D5,0x5F88, -0x72E0,0x6068,0x54FC,0x4EA8,0x6A2A,0x8861,0x6052,0x8F70, -0x54C4,0x70D8,0x8679,0x9E3F,0x6D2A,0x5B8F,0x5F18,0x7EA2, -0x5589,0x4FAF,0x7334,0x543C,0x539A,0x5019,0x540E,0x547C, -0x4E4E,0x5FFD,0x745A,0x58F6,0x846B,0x80E1,0x8774,0x72D0, -0x7CCA,0x6E56,0x5F27,0x864E,0x552C,0x62A4,0x4E92,0x6CAA, -0x6237,0x82B1,0x54D7,0x534E,0x733E,0x6ED1,0x753B,0x5212, -0x5316,0x8BDD,0x69D0,0x5F8A,0x6000,0x6DEE,0x574F,0x6B22, -0x73AF,0x6853,0x8FD8,0x7F13,0x6362,0x60A3,0x5524,0x75EA, -0x8C62,0x7115,0x6DA3,0x5BA6,0x5E7B,0x8352,0x614C,0x9EC4, -0x78FA,0x8757,0x7C27,0x7687,0x51F0,0x60F6,0x714C,0x6643, -0x5E4C,0x604D,0x8C0E,0x7070,0x6325,0x8F89,0x5FBD,0x6062, -0x86D4,0x56DE,0x6BC1,0x6094,0x6167,0x5349,0x60E0,0x6666, -0x8D3F,0x79FD,0x4F1A,0x70E9,0x6C47,0x8BB3,0x8BF2,0x7ED8, -0x8364,0x660F,0x5A5A,0x9B42,0x6D51,0x6DF7,0x8C41,0x6D3B, -0x4F19,0x706B,0x83B7,0x6216,0x60D1,0x970D,0x8D27,0x7978, -0x51FB,0x573E,0x57FA,0x673A,0x7578,0x7A3D,0x79EF,0x7B95, -0x808C,0x9965,0x8FF9,0x6FC0,0x8BA5,0x9E21,0x59EC,0x7EE9, -0x7F09,0x5409,0x6781,0x68D8,0x8F91,0x7C4D,0x96C6,0x53CA, -0x6025,0x75BE,0x6C72,0x5373,0x5AC9,0x7EA7,0x6324,0x51E0, -0x810A,0x5DF1,0x84DF,0x6280,0x5180,0x5B63,0x4F0E,0x796D, -0x5242,0x60B8,0x6D4E,0x5BC4,0x5BC2,0x8BA1,0x8BB0,0x65E2, -0x5FCC,0x9645,0x5993,0x7EE7,0x7EAA,0x5609,0x67B7,0x5939, -0x4F73,0x5BB6,0x52A0,0x835A,0x988A,0x8D3E,0x7532,0x94BE, -0x5047,0x7A3C,0x4EF7,0x67B6,0x9A7E,0x5AC1,0x6B7C,0x76D1, -0x575A,0x5C16,0x7B3A,0x95F4,0x714E,0x517C,0x80A9,0x8270, -0x5978,0x7F04,0x8327,0x68C0,0x67EC,0x78B1,0x7877,0x62E3, -0x6361,0x7B80,0x4FED,0x526A,0x51CF,0x8350,0x69DB,0x9274, -0x8DF5,0x8D31,0x89C1,0x952E,0x7BAD,0x4EF6,0x5065,0x8230, -0x5251,0x996F,0x6E10,0x6E85,0x6DA7,0x5EFA,0x50F5,0x59DC, -0x5C06,0x6D46,0x6C5F,0x7586,0x848B,0x6868,0x5956,0x8BB2, -0x5320,0x9171,0x964D,0x8549,0x6912,0x7901,0x7126,0x80F6, -0x4EA4,0x90CA,0x6D47,0x9A84,0x5A07,0x56BC,0x6405,0x94F0, -0x77EB,0x4FA5,0x811A,0x72E1,0x89D2,0x997A,0x7F34,0x7EDE, -0x527F,0x6559,0x9175,0x8F7F,0x8F83,0x53EB,0x7A96,0x63ED, -0x63A5,0x7686,0x79F8,0x8857,0x9636,0x622A,0x52AB,0x8282, -0x6854,0x6770,0x6377,0x776B,0x7AED,0x6D01,0x7ED3,0x89E3, -0x59D0,0x6212,0x85C9,0x82A5,0x754C,0x501F,0x4ECB,0x75A5, -0x8BEB,0x5C4A,0x5DFE,0x7B4B,0x65A4,0x91D1,0x4ECA,0x6D25, -0x895F,0x7D27,0x9526,0x4EC5,0x8C28,0x8FDB,0x9773,0x664B, -0x7981,0x8FD1,0x70EC,0x6D78,0x5C3D,0x52B2,0x8346,0x5162, -0x830E,0x775B,0x6676,0x9CB8,0x4EAC,0x60CA,0x7CBE,0x7CB3, -0x7ECF,0x4E95,0x8B66,0x666F,0x9888,0x9759,0x5883,0x656C, -0x955C,0x5F84,0x75C9,0x9756,0x7ADF,0x7ADE,0x51C0,0x70AF, -0x7A98,0x63EA,0x7A76,0x7EA0,0x7396,0x97ED,0x4E45,0x7078, -0x4E5D,0x9152,0x53A9,0x6551,0x65E7,0x81FC,0x8205,0x548E, -0x5C31,0x759A,0x97A0,0x62D8,0x72D9,0x75BD,0x5C45,0x9A79, -0x83CA,0x5C40,0x5480,0x77E9,0x4E3E,0x6CAE,0x805A,0x62D2, -0x636E,0x5DE8,0x5177,0x8DDD,0x8E1E,0x952F,0x4FF1,0x53E5, -0x60E7,0x70AC,0x5267,0x6350,0x9E43,0x5A1F,0x5026,0x7737, -0x5377,0x7EE2,0x6485,0x652B,0x6289,0x6398,0x5014,0x7235, -0x89C9,0x51B3,0x8BC0,0x7EDD,0x5747,0x83CC,0x94A7,0x519B, -0x541B,0x5CFB,0x4FCA,0x7AE3,0x6D5A,0x90E1,0x9A8F,0x5580, -0x5496,0x5361,0x54AF,0x5F00,0x63E9,0x6977,0x51EF,0x6168, -0x520A,0x582A,0x52D8,0x574E,0x780D,0x770B,0x5EB7,0x6177, -0x7CE0,0x625B,0x6297,0x4EA2,0x7095,0x8003,0x62F7,0x70E4, -0x9760,0x5777,0x82DB,0x67EF,0x68F5,0x78D5,0x9897,0x79D1, -0x58F3,0x54B3,0x53EF,0x6E34,0x514B,0x523B,0x5BA2,0x8BFE, -0x80AF,0x5543,0x57A6,0x6073,0x5751,0x542D,0x7A7A,0x6050, -0x5B54,0x63A7,0x62A0,0x53E3,0x6263,0x5BC7,0x67AF,0x54ED, -0x7A9F,0x82E6,0x9177,0x5E93,0x88E4,0x5938,0x57AE,0x630E, -0x8DE8,0x80EF,0x5757,0x7B77,0x4FA9,0x5FEB,0x5BBD,0x6B3E, -0x5321,0x7B50,0x72C2,0x6846,0x77FF,0x7736,0x65F7,0x51B5, -0x4E8F,0x76D4,0x5CBF,0x7AA5,0x8475,0x594E,0x9B41,0x5080, -0x9988,0x6127,0x6E83,0x5764,0x6606,0x6346,0x56F0,0x62EC, -0x6269,0x5ED3,0x9614,0x5783,0x62C9,0x5587,0x8721,0x814A, -0x8FA3,0x5566,0x83B1,0x6765,0x8D56,0x84DD,0x5A6A,0x680F, -0x62E6,0x7BEE,0x9611,0x5170,0x6F9C,0x8C30,0x63FD,0x89C8, -0x61D2,0x7F06,0x70C2,0x6EE5,0x7405,0x6994,0x72FC,0x5ECA, -0x90CE,0x6717,0x6D6A,0x635E,0x52B3,0x7262,0x8001,0x4F6C, -0x59E5,0x916A,0x70D9,0x6D9D,0x52D2,0x4E50,0x96F7,0x956D, -0x857E,0x78CA,0x7D2F,0x5121,0x5792,0x64C2,0x808B,0x7C7B, -0x6CEA,0x68F1,0x695E,0x51B7,0x5398,0x68A8,0x7281,0x9ECE, -0x7BF1,0x72F8,0x79BB,0x6F13,0x7406,0x674E,0x91CC,0x9CA4, -0x793C,0x8389,0x8354,0x540F,0x6817,0x4E3D,0x5389,0x52B1, -0x783E,0x5386,0x5229,0x5088,0x4F8B,0x4FD0,0x75E2,0x7ACB, -0x7C92,0x6CA5,0x96B6,0x529B,0x7483,0x54E9,0x4FE9,0x8054, -0x83B2,0x8FDE,0x9570,0x5EC9,0x601C,0x6D9F,0x5E18,0x655B, -0x8138,0x94FE,0x604B,0x70BC,0x7EC3,0x7CAE,0x51C9,0x6881, -0x7CB1,0x826F,0x4E24,0x8F86,0x91CF,0x667E,0x4EAE,0x8C05, -0x64A9,0x804A,0x50DA,0x7597,0x71CE,0x5BE5,0x8FBD,0x6F66, -0x4E86,0x6482,0x9563,0x5ED6,0x6599,0x5217,0x88C2,0x70C8, -0x52A3,0x730E,0x7433,0x6797,0x78F7,0x9716,0x4E34,0x90BB, -0x9CDE,0x6DCB,0x51DB,0x8D41,0x541D,0x62CE,0x73B2,0x83F1, -0x96F6,0x9F84,0x94C3,0x4F36,0x7F9A,0x51CC,0x7075,0x9675, -0x5CAD,0x9886,0x53E6,0x4EE4,0x6E9C,0x7409,0x69B4,0x786B, -0x998F,0x7559,0x5218,0x7624,0x6D41,0x67F3,0x516D,0x9F99, -0x804B,0x5499,0x7B3C,0x7ABF,0x9686,0x5784,0x62E2,0x9647, -0x697C,0x5A04,0x6402,0x7BD3,0x6F0F,0x964B,0x82A6,0x5362, -0x9885,0x5E90,0x7089,0x63B3,0x5364,0x864F,0x9C81,0x9E93, -0x788C,0x9732,0x8DEF,0x8D42,0x9E7F,0x6F5E,0x7984,0x5F55, -0x9646,0x622E,0x9A74,0x5415,0x94DD,0x4FA3,0x65C5,0x5C65, -0x5C61,0x7F15,0x8651,0x6C2F,0x5F8B,0x7387,0x6EE4,0x7EFF, -0x5CE6,0x631B,0x5B6A,0x6EE6,0x5375,0x4E71,0x63A0,0x7565, -0x62A1,0x8F6E,0x4F26,0x4ED1,0x6CA6,0x7EB6,0x8BBA,0x841D, -0x87BA,0x7F57,0x903B,0x9523,0x7BA9,0x9AA1,0x88F8,0x843D, -0x6D1B,0x9A86,0x7EDC,0x5988,0x9EBB,0x739B,0x7801,0x8682, -0x9A6C,0x9A82,0x561B,0x5417,0x57CB,0x4E70,0x9EA6,0x5356, -0x8FC8,0x8109,0x7792,0x9992,0x86EE,0x6EE1,0x8513,0x66FC, -0x6162,0x6F2B,0x8C29,0x8292,0x832B,0x76F2,0x6C13,0x5FD9, -0x83BD,0x732B,0x8305,0x951A,0x6BDB,0x77DB,0x94C6,0x536F, -0x8302,0x5192,0x5E3D,0x8C8C,0x8D38,0x4E48,0x73AB,0x679A, -0x6885,0x9176,0x9709,0x7164,0x6CA1,0x7709,0x5A92,0x9541, -0x6BCF,0x7F8E,0x6627,0x5BD0,0x59B9,0x5A9A,0x95E8,0x95F7, -0x4EEC,0x840C,0x8499,0x6AAC,0x76DF,0x9530,0x731B,0x68A6, -0x5B5F,0x772F,0x919A,0x9761,0x7CDC,0x8FF7,0x8C1C,0x5F25, -0x7C73,0x79D8,0x89C5,0x6CCC,0x871C,0x5BC6,0x5E42,0x68C9, -0x7720,0x7EF5,0x5195,0x514D,0x52C9,0x5A29,0x7F05,0x9762, -0x82D7,0x63CF,0x7784,0x85D0,0x79D2,0x6E3A,0x5E99,0x5999, -0x8511,0x706D,0x6C11,0x62BF,0x76BF,0x654F,0x60AF,0x95FD, -0x660E,0x879F,0x9E23,0x94ED,0x540D,0x547D,0x8C2C,0x6478, -0x6479,0x8611,0x6A21,0x819C,0x78E8,0x6469,0x9B54,0x62B9, -0x672B,0x83AB,0x58A8,0x9ED8,0x6CAB,0x6F20,0x5BDE,0x964C, -0x8C0B,0x725F,0x67D0,0x62C7,0x7261,0x4EA9,0x59C6,0x6BCD, -0x5893,0x66AE,0x5E55,0x52DF,0x6155,0x6728,0x76EE,0x7766, -0x7267,0x7A46,0x62FF,0x54EA,0x5450,0x94A0,0x90A3,0x5A1C, -0x7EB3,0x6C16,0x4E43,0x5976,0x8010,0x5948,0x5357,0x7537, -0x96BE,0x56CA,0x6320,0x8111,0x607C,0x95F9,0x6DD6,0x5462, -0x9981,0x5185,0x5AE9,0x80FD,0x59AE,0x9713,0x502A,0x6CE5, -0x5C3C,0x62DF,0x4F60,0x533F,0x817B,0x9006,0x6EBA,0x852B, -0x62C8,0x5E74,0x78BE,0x64B5,0x637B,0x5FF5,0x5A18,0x917F, -0x9E1F,0x5C3F,0x634F,0x8042,0x5B7D,0x556E,0x954A,0x954D, -0x6D85,0x60A8,0x67E0,0x72DE,0x51DD,0x5B81,0x62E7,0x6CDE, -0x725B,0x626D,0x94AE,0x7EBD,0x8113,0x6D53,0x519C,0x5F04, -0x5974,0x52AA,0x6012,0x5973,0x6696,0x8650,0x759F,0x632A, -0x61E6,0x7CEF,0x8BFA,0x54E6,0x6B27,0x9E25,0x6BB4,0x85D5, -0x5455,0x5076,0x6CA4,0x556A,0x8DB4,0x722C,0x5E15,0x6015, -0x7436,0x62CD,0x6392,0x724C,0x5F98,0x6E43,0x6D3E,0x6500, -0x6F58,0x76D8,0x78D0,0x76FC,0x7554,0x5224,0x53DB,0x4E53, -0x5E9E,0x65C1,0x802A,0x80D6,0x629B,0x5486,0x5228,0x70AE, -0x888D,0x8DD1,0x6CE1,0x5478,0x80DA,0x57F9,0x88F4,0x8D54, -0x966A,0x914D,0x4F69,0x6C9B,0x55B7,0x76C6,0x7830,0x62A8, -0x70F9,0x6F8E,0x5F6D,0x84EC,0x68DA,0x787C,0x7BF7,0x81A8, -0x670B,0x9E4F,0x6367,0x78B0,0x576F,0x7812,0x9739,0x6279, -0x62AB,0x5288,0x7435,0x6BD7,0x5564,0x813E,0x75B2,0x76AE, -0x5339,0x75DE,0x50FB,0x5C41,0x8B6C,0x7BC7,0x504F,0x7247, -0x9A97,0x98D8,0x6F02,0x74E2,0x7968,0x6487,0x77A5,0x62FC, -0x9891,0x8D2B,0x54C1,0x8058,0x4E52,0x576A,0x82F9,0x840D, -0x5E73,0x51ED,0x74F6,0x8BC4,0x5C4F,0x5761,0x6CFC,0x9887, -0x5A46,0x7834,0x9B44,0x8FEB,0x7C95,0x5256,0x6251,0x94FA, -0x4EC6,0x8386,0x8461,0x83E9,0x84B2,0x57D4,0x6734,0x5703, -0x666E,0x6D66,0x8C31,0x66DD,0x7011,0x671F,0x6B3A,0x6816, -0x621A,0x59BB,0x4E03,0x51C4,0x6F06,0x67D2,0x6C8F,0x5176, -0x68CB,0x5947,0x6B67,0x7566,0x5D0E,0x8110,0x9F50,0x65D7, -0x7948,0x7941,0x9A91,0x8D77,0x5C82,0x4E5E,0x4F01,0x542F, -0x5951,0x780C,0x5668,0x6C14,0x8FC4,0x5F03,0x6C7D,0x6CE3, -0x8BAB,0x6390,0x6070,0x6D3D,0x7275,0x6266,0x948E,0x94C5, -0x5343,0x8FC1,0x7B7E,0x4EDF,0x8C26,0x4E7E,0x9ED4,0x94B1, -0x94B3,0x524D,0x6F5C,0x9063,0x6D45,0x8C34,0x5811,0x5D4C, -0x6B20,0x6B49,0x67AA,0x545B,0x8154,0x7F8C,0x5899,0x8537, -0x5F3A,0x62A2,0x6A47,0x9539,0x6572,0x6084,0x6865,0x77A7, -0x4E54,0x4FA8,0x5DE7,0x9798,0x64AC,0x7FD8,0x5CED,0x4FCF, -0x7A8D,0x5207,0x8304,0x4E14,0x602F,0x7A83,0x94A6,0x4FB5, -0x4EB2,0x79E6,0x7434,0x52E4,0x82B9,0x64D2,0x79BD,0x5BDD, -0x6C81,0x9752,0x8F7B,0x6C22,0x503E,0x537F,0x6E05,0x64CE, -0x6674,0x6C30,0x60C5,0x9877,0x8BF7,0x5E86,0x743C,0x7A77, -0x79CB,0x4E18,0x90B1,0x7403,0x6C42,0x56DA,0x914B,0x6CC5, -0x8D8B,0x533A,0x86C6,0x66F2,0x8EAF,0x5C48,0x9A71,0x6E20, -0x53D6,0x5A36,0x9F8B,0x8DA3,0x53BB,0x5708,0x98A7,0x6743, -0x919B,0x6CC9,0x5168,0x75CA,0x62F3,0x72AC,0x5238,0x529D, -0x7F3A,0x7094,0x7638,0x5374,0x9E4A,0x69B7,0x786E,0x96C0, -0x88D9,0x7FA4,0x7136,0x71C3,0x5189,0x67D3,0x74E4,0x58E4, -0x6518,0x56B7,0x8BA9,0x9976,0x6270,0x7ED5,0x60F9,0x70ED, -0x58EC,0x4EC1,0x4EBA,0x5FCD,0x97E7,0x4EFB,0x8BA4,0x5203, -0x598A,0x7EAB,0x6254,0x4ECD,0x65E5,0x620E,0x8338,0x84C9, -0x8363,0x878D,0x7194,0x6EB6,0x5BB9,0x7ED2,0x5197,0x63C9, -0x67D4,0x8089,0x8339,0x8815,0x5112,0x5B7A,0x5982,0x8FB1, -0x4E73,0x6C5D,0x5165,0x8925,0x8F6F,0x962E,0x854A,0x745E, -0x9510,0x95F0,0x6DA6,0x82E5,0x5F31,0x6492,0x6D12,0x8428, -0x816E,0x9CC3,0x585E,0x8D5B,0x4E09,0x53C1,0x4F1E,0x6563, -0x6851,0x55D3,0x4E27,0x6414,0x9A9A,0x626B,0x5AC2,0x745F, -0x8272,0x6DA9,0x68EE,0x50E7,0x838E,0x7802,0x6740,0x5239, -0x6C99,0x7EB1,0x50BB,0x5565,0x715E,0x7B5B,0x6652,0x73CA, -0x82EB,0x6749,0x5C71,0x5220,0x717D,0x886B,0x95EA,0x9655, -0x64C5,0x8D61,0x81B3,0x5584,0x6C55,0x6247,0x7F2E,0x5892, -0x4F24,0x5546,0x8D4F,0x664C,0x4E0A,0x5C1A,0x88F3,0x68A2, -0x634E,0x7A0D,0x70E7,0x828D,0x52FA,0x97F6,0x5C11,0x54E8, -0x90B5,0x7ECD,0x5962,0x8D4A,0x86C7,0x820C,0x820D,0x8D66, -0x6444,0x5C04,0x6151,0x6D89,0x793E,0x8BBE,0x7837,0x7533, -0x547B,0x4F38,0x8EAB,0x6DF1,0x5A20,0x7EC5,0x795E,0x6C88, -0x5BA1,0x5A76,0x751A,0x80BE,0x614E,0x6E17,0x58F0,0x751F, -0x7525,0x7272,0x5347,0x7EF3,0x7701,0x76DB,0x5269,0x80DC, -0x5723,0x5E08,0x5931,0x72EE,0x65BD,0x6E7F,0x8BD7,0x5C38, -0x8671,0x5341,0x77F3,0x62FE,0x65F6,0x4EC0,0x98DF,0x8680, -0x5B9E,0x8BC6,0x53F2,0x77E2,0x4F7F,0x5C4E,0x9A76,0x59CB, -0x5F0F,0x793A,0x58EB,0x4E16,0x67FF,0x4E8B,0x62ED,0x8A93, -0x901D,0x52BF,0x662F,0x55DC,0x566C,0x9002,0x4ED5,0x4F8D, -0x91CA,0x9970,0x6C0F,0x5E02,0x6043,0x5BA4,0x89C6,0x8BD5, -0x6536,0x624B,0x9996,0x5B88,0x5BFF,0x6388,0x552E,0x53D7, -0x7626,0x517D,0x852C,0x67A2,0x68B3,0x6B8A,0x6292,0x8F93, -0x53D4,0x8212,0x6DD1,0x758F,0x4E66,0x8D4E,0x5B70,0x719F, -0x85AF,0x6691,0x66D9,0x7F72,0x8700,0x9ECD,0x9F20,0x5C5E, -0x672F,0x8FF0,0x6811,0x675F,0x620D,0x7AD6,0x5885,0x5EB6, -0x6570,0x6F31,0x6055,0x5237,0x800D,0x6454,0x8870,0x7529, -0x5E05,0x6813,0x62F4,0x971C,0x53CC,0x723D,0x8C01,0x6C34, -0x7761,0x7A0E,0x542E,0x77AC,0x987A,0x821C,0x8BF4,0x7855, -0x6714,0x70C1,0x65AF,0x6495,0x5636,0x601D,0x79C1,0x53F8, -0x4E1D,0x6B7B,0x8086,0x5BFA,0x55E3,0x56DB,0x4F3A,0x4F3C, -0x9972,0x5DF3,0x677E,0x8038,0x6002,0x9882,0x9001,0x5B8B, -0x8BBC,0x8BF5,0x641C,0x8258,0x64DE,0x55FD,0x82CF,0x9165, -0x4FD7,0x7D20,0x901F,0x7C9F,0x50F3,0x5851,0x6EAF,0x5BBF, -0x8BC9,0x8083,0x9178,0x849C,0x7B97,0x867D,0x968B,0x968F, -0x7EE5,0x9AD3,0x788E,0x5C81,0x7A57,0x9042,0x96A7,0x795F, -0x5B59,0x635F,0x7B0B,0x84D1,0x68AD,0x5506,0x7F29,0x7410, -0x7D22,0x9501,0x6240,0x584C,0x4ED6,0x5B83,0x5979,0x5854, -0x736D,0x631E,0x8E4B,0x8E0F,0x80CE,0x82D4,0x62AC,0x53F0, -0x6CF0,0x915E,0x592A,0x6001,0x6C70,0x574D,0x644A,0x8D2A, -0x762B,0x6EE9,0x575B,0x6A80,0x75F0,0x6F6D,0x8C2D,0x8C08, -0x5766,0x6BEF,0x8892,0x78B3,0x63A2,0x53F9,0x70AD,0x6C64, -0x5858,0x642A,0x5802,0x68E0,0x819B,0x5510,0x7CD6,0x5018, -0x8EBA,0x6DCC,0x8D9F,0x70EB,0x638F,0x6D9B,0x6ED4,0x7EE6, -0x8404,0x6843,0x9003,0x6DD8,0x9676,0x8BA8,0x5957,0x7279, -0x85E4,0x817E,0x75BC,0x8A8A,0x68AF,0x5254,0x8E22,0x9511, -0x63D0,0x9898,0x8E44,0x557C,0x4F53,0x66FF,0x568F,0x60D5, -0x6D95,0x5243,0x5C49,0x5929,0x6DFB,0x586B,0x7530,0x751C, -0x606C,0x8214,0x8146,0x6311,0x6761,0x8FE2,0x773A,0x8DF3, -0x8D34,0x94C1,0x5E16,0x5385,0x542C,0x70C3,0x6C40,0x5EF7, -0x505C,0x4EAD,0x5EAD,0x633A,0x8247,0x901A,0x6850,0x916E, -0x77B3,0x540C,0x94DC,0x5F64,0x7AE5,0x6876,0x6345,0x7B52, -0x7EDF,0x75DB,0x5077,0x6295,0x5934,0x900F,0x51F8,0x79C3, -0x7A81,0x56FE,0x5F92,0x9014,0x6D82,0x5C60,0x571F,0x5410, -0x5154,0x6E4D,0x56E2,0x63A8,0x9893,0x817F,0x8715,0x892A, -0x9000,0x541E,0x5C6F,0x81C0,0x62D6,0x6258,0x8131,0x9E35, -0x9640,0x9A6E,0x9A7C,0x692D,0x59A5,0x62D3,0x553E,0x6316, -0x54C7,0x86D9,0x6D3C,0x5A03,0x74E6,0x889C,0x6B6A,0x5916, -0x8C4C,0x5F2F,0x6E7E,0x73A9,0x987D,0x4E38,0x70F7,0x5B8C, -0x7897,0x633D,0x665A,0x7696,0x60CB,0x5B9B,0x5A49,0x4E07, -0x8155,0x6C6A,0x738B,0x4EA1,0x6789,0x7F51,0x5F80,0x65FA, -0x671B,0x5FD8,0x5984,0x5A01,0x5DCD,0x5FAE,0x5371,0x97E6, -0x8FDD,0x6845,0x56F4,0x552F,0x60DF,0x4E3A,0x6F4D,0x7EF4, -0x82C7,0x840E,0x59D4,0x4F1F,0x4F2A,0x5C3E,0x7EAC,0x672A, -0x851A,0x5473,0x754F,0x80C3,0x5582,0x9B4F,0x4F4D,0x6E2D, -0x8C13,0x5C09,0x6170,0x536B,0x761F,0x6E29,0x868A,0x6587, -0x95FB,0x7EB9,0x543B,0x7A33,0x7D0A,0x95EE,0x55E1,0x7FC1, -0x74EE,0x631D,0x8717,0x6DA1,0x7A9D,0x6211,0x65A1,0x5367, -0x63E1,0x6C83,0x5DEB,0x545C,0x94A8,0x4E4C,0x6C61,0x8BEC, -0x5C4B,0x65E0,0x829C,0x68A7,0x543E,0x5434,0x6BCB,0x6B66, -0x4E94,0x6342,0x5348,0x821E,0x4F0D,0x4FAE,0x575E,0x620A, -0x96FE,0x6664,0x7269,0x52FF,0x52A1,0x609F,0x8BEF,0x6614, -0x7199,0x6790,0x897F,0x7852,0x77FD,0x6670,0x563B,0x5438, -0x9521,0x727A,0x7A00,0x606F,0x5E0C,0x6089,0x819D,0x5915, -0x60DC,0x7184,0x70EF,0x6EAA,0x6C50,0x7280,0x6A84,0x88AD, -0x5E2D,0x4E60,0x5AB3,0x559C,0x94E3,0x6D17,0x7CFB,0x9699, -0x620F,0x7EC6,0x778E,0x867E,0x5323,0x971E,0x8F96,0x6687, -0x5CE1,0x4FA0,0x72ED,0x4E0B,0x53A6,0x590F,0x5413,0x6380, -0x9528,0x5148,0x4ED9,0x9C9C,0x7EA4,0x54B8,0x8D24,0x8854, -0x8237,0x95F2,0x6D8E,0x5F26,0x5ACC,0x663E,0x9669,0x73B0, -0x732E,0x53BF,0x817A,0x9985,0x7FA1,0x5BAA,0x9677,0x9650, -0x7EBF,0x76F8,0x53A2,0x9576,0x9999,0x7BB1,0x8944,0x6E58, -0x4E61,0x7FD4,0x7965,0x8BE6,0x60F3,0x54CD,0x4EAB,0x9879, -0x5DF7,0x6A61,0x50CF,0x5411,0x8C61,0x8427,0x785D,0x9704, -0x524A,0x54EE,0x56A3,0x9500,0x6D88,0x5BB5,0x6DC6,0x6653, -0x5C0F,0x5B5D,0x6821,0x8096,0x5578,0x7B11,0x6548,0x6954, -0x4E9B,0x6B47,0x874E,0x978B,0x534F,0x631F,0x643A,0x90AA, -0x659C,0x80C1,0x8C10,0x5199,0x68B0,0x5378,0x87F9,0x61C8, -0x6CC4,0x6CFB,0x8C22,0x5C51,0x85AA,0x82AF,0x950C,0x6B23, -0x8F9B,0x65B0,0x5FFB,0x5FC3,0x4FE1,0x8845,0x661F,0x8165, -0x7329,0x60FA,0x5174,0x5211,0x578B,0x5F62,0x90A2,0x884C, -0x9192,0x5E78,0x674F,0x6027,0x59D3,0x5144,0x51F6,0x80F8, -0x5308,0x6C79,0x96C4,0x718A,0x4F11,0x4FEE,0x7F9E,0x673D, -0x55C5,0x9508,0x79C0,0x8896,0x7EE3,0x589F,0x620C,0x9700, -0x865A,0x5618,0x987B,0x5F90,0x8BB8,0x84C4,0x9157,0x53D9, -0x65ED,0x5E8F,0x755C,0x6064,0x7D6E,0x5A7F,0x7EEA,0x7EED, -0x8F69,0x55A7,0x5BA3,0x60AC,0x65CB,0x7384,0x9009,0x7663, -0x7729,0x7EDA,0x9774,0x859B,0x5B66,0x7A74,0x96EA,0x8840, -0x52CB,0x718F,0x5FAA,0x65EC,0x8BE2,0x5BFB,0x9A6F,0x5DE1, -0x6B89,0x6C5B,0x8BAD,0x8BAF,0x900A,0x8FC5,0x538B,0x62BC, -0x9E26,0x9E2D,0x5440,0x4E2B,0x82BD,0x7259,0x869C,0x5D16, -0x8859,0x6DAF,0x96C5,0x54D1,0x4E9A,0x8BB6,0x7109,0x54BD, -0x9609,0x70DF,0x6DF9,0x76D0,0x4E25,0x7814,0x8712,0x5CA9, -0x5EF6,0x8A00,0x989C,0x960E,0x708E,0x6CBF,0x5944,0x63A9, -0x773C,0x884D,0x6F14,0x8273,0x5830,0x71D5,0x538C,0x781A, -0x96C1,0x5501,0x5F66,0x7130,0x5BB4,0x8C1A,0x9A8C,0x6B83, -0x592E,0x9E2F,0x79E7,0x6768,0x626C,0x4F6F,0x75A1,0x7F8A, -0x6D0B,0x9633,0x6C27,0x4EF0,0x75D2,0x517B,0x6837,0x6F3E, -0x9080,0x8170,0x5996,0x7476,0x6447,0x5C27,0x9065,0x7A91, -0x8C23,0x59DA,0x54AC,0x8200,0x836F,0x8981,0x8000,0x6930, -0x564E,0x8036,0x7237,0x91CE,0x51B6,0x4E5F,0x9875,0x6396, -0x4E1A,0x53F6,0x66F3,0x814B,0x591C,0x6DB2,0x4E00,0x58F9, -0x533B,0x63D6,0x94F1,0x4F9D,0x4F0A,0x8863,0x9890,0x5937, -0x9057,0x79FB,0x4EEA,0x80F0,0x7591,0x6C82,0x5B9C,0x59E8, -0x5F5D,0x6905,0x8681,0x501A,0x5DF2,0x4E59,0x77E3,0x4EE5, -0x827A,0x6291,0x6613,0x9091,0x5C79,0x4EBF,0x5F79,0x81C6, -0x9038,0x8084,0x75AB,0x4EA6,0x88D4,0x610F,0x6BC5,0x5FC6, -0x4E49,0x76CA,0x6EA2,0x8BE3,0x8BAE,0x8C0A,0x8BD1,0x5F02, -0x7FFC,0x7FCC,0x7ECE,0x8335,0x836B,0x56E0,0x6BB7,0x97F3, -0x9634,0x59FB,0x541F,0x94F6,0x6DEB,0x5BC5,0x996E,0x5C39, -0x5F15,0x9690,0x5370,0x82F1,0x6A31,0x5A74,0x9E70,0x5E94, -0x7F28,0x83B9,0x8424,0x8425,0x8367,0x8747,0x8FCE,0x8D62, -0x76C8,0x5F71,0x9896,0x786C,0x6620,0x54DF,0x62E5,0x4F63, -0x81C3,0x75C8,0x5EB8,0x96CD,0x8E0A,0x86F9,0x548F,0x6CF3, -0x6D8C,0x6C38,0x607F,0x52C7,0x7528,0x5E7D,0x4F18,0x60A0, -0x5FE7,0x5C24,0x7531,0x90AE,0x94C0,0x72B9,0x6CB9,0x6E38, -0x9149,0x6709,0x53CB,0x53F3,0x4F51,0x91C9,0x8BF1,0x53C8, -0x5E7C,0x8FC2,0x6DE4,0x4E8E,0x76C2,0x6986,0x865E,0x611A, -0x8206,0x4F59,0x4FDE,0x903E,0x9C7C,0x6109,0x6E1D,0x6E14, -0x9685,0x4E88,0x5A31,0x96E8,0x4E0E,0x5C7F,0x79B9,0x5B87, -0x8BED,0x7FBD,0x7389,0x57DF,0x828B,0x90C1,0x5401,0x9047, -0x55BB,0x5CEA,0x5FA1,0x6108,0x6B32,0x72F1,0x80B2,0x8A89, -0x6D74,0x5BD3,0x88D5,0x9884,0x8C6B,0x9A6D,0x9E33,0x6E0A, -0x51A4,0x5143,0x57A3,0x8881,0x539F,0x63F4,0x8F95,0x56ED, -0x5458,0x5706,0x733F,0x6E90,0x7F18,0x8FDC,0x82D1,0x613F, -0x6028,0x9662,0x66F0,0x7EA6,0x8D8A,0x8DC3,0x94A5,0x5CB3, -0x7CA4,0x6708,0x60A6,0x9605,0x8018,0x4E91,0x90E7,0x5300, -0x9668,0x5141,0x8FD0,0x8574,0x915D,0x6655,0x97F5,0x5B55, -0x531D,0x7838,0x6742,0x683D,0x54C9,0x707E,0x5BB0,0x8F7D, -0x518D,0x5728,0x54B1,0x6512,0x6682,0x8D5E,0x8D43,0x810F, -0x846C,0x906D,0x7CDF,0x51FF,0x85FB,0x67A3,0x65E9,0x6FA1, -0x86A4,0x8E81,0x566A,0x9020,0x7682,0x7076,0x71E5,0x8D23, -0x62E9,0x5219,0x6CFD,0x8D3C,0x600E,0x589E,0x618E,0x66FE, -0x8D60,0x624E,0x55B3,0x6E23,0x672D,0x8F67,0x94E1,0x95F8, -0x7728,0x6805,0x69A8,0x548B,0x4E4D,0x70B8,0x8BC8,0x6458, -0x658B,0x5B85,0x7A84,0x503A,0x5BE8,0x77BB,0x6BE1,0x8A79, -0x7C98,0x6CBE,0x76CF,0x65A9,0x8F97,0x5D2D,0x5C55,0x8638, -0x6808,0x5360,0x6218,0x7AD9,0x6E5B,0x7EFD,0x6A1F,0x7AE0, -0x5F70,0x6F33,0x5F20,0x638C,0x6DA8,0x6756,0x4E08,0x5E10, -0x8D26,0x4ED7,0x80C0,0x7634,0x969C,0x62DB,0x662D,0x627E, -0x6CBC,0x8D75,0x7167,0x7F69,0x5146,0x8087,0x53EC,0x906E, -0x6298,0x54F2,0x86F0,0x8F99,0x8005,0x9517,0x8517,0x8FD9, -0x6D59,0x73CD,0x659F,0x771F,0x7504,0x7827,0x81FB,0x8D1E, -0x9488,0x4FA6,0x6795,0x75B9,0x8BCA,0x9707,0x632F,0x9547, -0x9635,0x84B8,0x6323,0x7741,0x5F81,0x72F0,0x4E89,0x6014, -0x6574,0x62EF,0x6B63,0x653F,0x5E27,0x75C7,0x90D1,0x8BC1, -0x829D,0x679D,0x652F,0x5431,0x8718,0x77E5,0x80A2,0x8102, -0x6C41,0x4E4B,0x7EC7,0x804C,0x76F4,0x690D,0x6B96,0x6267, -0x503C,0x4F84,0x5740,0x6307,0x6B62,0x8DBE,0x53EA,0x65E8, -0x7EB8,0x5FD7,0x631A,0x63B7,0x81F3,0x81F4,0x7F6E,0x5E1C, -0x5CD9,0x5236,0x667A,0x79E9,0x7A1A,0x8D28,0x7099,0x75D4, -0x6EDE,0x6CBB,0x7A92,0x4E2D,0x76C5,0x5FE0,0x949F,0x8877, -0x7EC8,0x79CD,0x80BF,0x91CD,0x4EF2,0x4F17,0x821F,0x5468, -0x5DDE,0x6D32,0x8BCC,0x7CA5,0x8F74,0x8098,0x5E1A,0x5492, -0x76B1,0x5B99,0x663C,0x9AA4,0x73E0,0x682A,0x86DB,0x6731, -0x732A,0x8BF8,0x8BDB,0x9010,0x7AF9,0x70DB,0x716E,0x62C4, -0x77A9,0x5631,0x4E3B,0x8457,0x67F1,0x52A9,0x86C0,0x8D2E, -0x94F8,0x7B51,0x4F4F,0x6CE8,0x795D,0x9A7B,0x6293,0x722A, -0x62FD,0x4E13,0x7816,0x8F6C,0x64B0,0x8D5A,0x7BC6,0x6869, -0x5E84,0x88C5,0x5986,0x649E,0x58EE,0x72B6,0x690E,0x9525, -0x8FFD,0x8D58,0x5760,0x7F00,0x8C06,0x51C6,0x6349,0x62D9, -0x5353,0x684C,0x7422,0x8301,0x914C,0x5544,0x7740,0x707C, -0x6D4A,0x5179,0x54A8,0x8D44,0x59FF,0x6ECB,0x6DC4,0x5B5C, -0x7D2B,0x4ED4,0x7C7D,0x6ED3,0x5B50,0x81EA,0x6E0D,0x5B57, -0x9B03,0x68D5,0x8E2A,0x5B97,0x7EFC,0x603B,0x7EB5,0x90B9, -0x8D70,0x594F,0x63CD,0x79DF,0x8DB3,0x5352,0x65CF,0x7956, -0x8BC5,0x963B,0x7EC4,0x94BB,0x7E82,0x5634,0x9189,0x6700, -0x7F6A,0x5C0A,0x9075,0x6628,0x5DE6,0x4F50,0x67DE,0x505A, -0x4F5C,0x5750,0x5EA7,0x2000,0x2000,0x2000,0x2000,0x2000, -0x4E8D,0x4E0C,0x5140,0x4E10,0x5EFF,0x5345,0x4E15,0x4E98, -0x4E1E,0x9B32,0x5B6C,0x5669,0x4E28,0x79BA,0x4E3F,0x5315, -0x4E47,0x592D,0x723B,0x536E,0x6C10,0x56DF,0x80E4,0x9997, -0x6BD3,0x777E,0x9F17,0x4E36,0x4E9F,0x9F10,0x4E5C,0x4E69, -0x4E93,0x8288,0x5B5B,0x556C,0x560F,0x4EC4,0x538D,0x539D, -0x53A3,0x53A5,0x53AE,0x9765,0x8D5D,0x531A,0x53F5,0x5326, -0x532E,0x533E,0x8D5C,0x5366,0x5363,0x5202,0x5208,0x520E, -0x522D,0x5233,0x523F,0x5240,0x524C,0x525E,0x5261,0x525C, -0x84AF,0x527D,0x5282,0x5281,0x5290,0x5293,0x5182,0x7F54, -0x4EBB,0x4EC3,0x4EC9,0x4EC2,0x4EE8,0x4EE1,0x4EEB,0x4EDE, -0x4F1B,0x4EF3,0x4F22,0x4F64,0x4EF5,0x4F25,0x4F27,0x4F09, -0x4F2B,0x4F5E,0x4F67,0x6538,0x4F5A,0x4F5D,0x4F5F,0x4F57, -0x4F32,0x4F3D,0x4F76,0x4F74,0x4F91,0x4F89,0x4F83,0x4F8F, -0x4F7E,0x4F7B,0x4FAA,0x4F7C,0x4FAC,0x4F94,0x4FE6,0x4FE8, -0x4FEA,0x4FC5,0x4FDA,0x4FE3,0x4FDC,0x4FD1,0x4FDF,0x4FF8, -0x5029,0x504C,0x4FF3,0x502C,0x500F,0x502E,0x502D,0x4FFE, -0x501C,0x500C,0x5025,0x5028,0x507E,0x5043,0x5055,0x5048, -0x504E,0x506C,0x507B,0x50A5,0x50A7,0x50A9,0x50BA,0x50D6, -0x5106,0x50ED,0x50EC,0x50E6,0x50EE,0x5107,0x510B,0x4EDD, -0x6C3D,0x4F58,0x4F65,0x4FCE,0x9FA0,0x6C46,0x7C74,0x516E, -0x5DFD,0x9EC9,0x9998,0x5181,0x5914,0x52F9,0x530D,0x8A07, -0x5310,0x51EB,0x5919,0x5155,0x4EA0,0x5156,0x4EB3,0x886E, -0x88A4,0x4EB5,0x8114,0x88D2,0x7980,0x5B34,0x8803,0x7FB8, -0x51AB,0x51B1,0x51BD,0x51BC,0x51C7,0x5196,0x51A2,0x51A5, -0x8BA0,0x8BA6,0x8BA7,0x8BAA,0x8BB4,0x8BB5,0x8BB7,0x8BC2, -0x8BC3,0x8BCB,0x8BCF,0x8BCE,0x8BD2,0x8BD3,0x8BD4,0x8BD6, -0x8BD8,0x8BD9,0x8BDC,0x8BDF,0x8BE0,0x8BE4,0x8BE8,0x8BE9, -0x8BEE,0x8BF0,0x8BF3,0x8BF6,0x8BF9,0x8BFC,0x8BFF,0x8C00, -0x8C02,0x8C04,0x8C07,0x8C0C,0x8C0F,0x8C11,0x8C12,0x8C14, -0x8C15,0x8C16,0x8C19,0x8C1B,0x8C18,0x8C1D,0x8C1F,0x8C20, -0x8C21,0x8C25,0x8C27,0x8C2A,0x8C2B,0x8C2E,0x8C2F,0x8C32, -0x8C33,0x8C35,0x8C36,0x5369,0x537A,0x961D,0x9622,0x9621, -0x9631,0x962A,0x963D,0x963C,0x9642,0x9649,0x9654,0x965F, -0x9667,0x966C,0x9672,0x9674,0x9688,0x968D,0x9697,0x96B0, -0x9097,0x909B,0x909D,0x9099,0x90AC,0x90A1,0x90B4,0x90B3, -0x90B6,0x90BA,0x90B8,0x90B0,0x90CF,0x90C5,0x90BE,0x90D0, -0x90C4,0x90C7,0x90D3,0x90E6,0x90E2,0x90DC,0x90D7,0x90DB, -0x90EB,0x90EF,0x90FE,0x9104,0x9122,0x911E,0x9123,0x9131, -0x912F,0x9139,0x9143,0x9146,0x520D,0x5942,0x52A2,0x52AC, -0x52AD,0x52BE,0x54FF,0x52D0,0x52D6,0x52F0,0x53DF,0x71EE, -0x77CD,0x5EF4,0x51F5,0x51FC,0x9B2F,0x53B6,0x5F01,0x755A, -0x5DEF,0x574C,0x57A9,0x57A1,0x587E,0x58BC,0x58C5,0x58D1, -0x5729,0x572C,0x572A,0x5733,0x5739,0x572E,0x572F,0x575C, -0x573B,0x5742,0x5769,0x5785,0x576B,0x5786,0x577C,0x577B, -0x5768,0x576D,0x5776,0x5773,0x57AD,0x57A4,0x578C,0x57B2, -0x57CF,0x57A7,0x57B4,0x5793,0x57A0,0x57D5,0x57D8,0x57DA, -0x57D9,0x57D2,0x57B8,0x57F4,0x57EF,0x57F8,0x57E4,0x57DD, -0x580B,0x580D,0x57FD,0x57ED,0x5800,0x581E,0x5819,0x5844, -0x5820,0x5865,0x586C,0x5881,0x5889,0x589A,0x5880,0x99A8, -0x9F19,0x61FF,0x8279,0x827D,0x827F,0x828F,0x828A,0x82A8, -0x8284,0x828E,0x8291,0x8297,0x8299,0x82AB,0x82B8,0x82BE, -0x82B0,0x82C8,0x82CA,0x82E3,0x8298,0x82B7,0x82AE,0x82CB, -0x82CC,0x82C1,0x82A9,0x82B4,0x82A1,0x82AA,0x829F,0x82C4, -0x82CE,0x82A4,0x82E1,0x8309,0x82F7,0x82E4,0x830F,0x8307, -0x82DC,0x82F4,0x82D2,0x82D8,0x830C,0x82FB,0x82D3,0x8311, -0x831A,0x8306,0x8314,0x8315,0x82E0,0x82D5,0x831C,0x8351, -0x835B,0x835C,0x8308,0x8392,0x833C,0x8334,0x8331,0x839B, -0x835E,0x832F,0x834F,0x8347,0x8343,0x835F,0x8340,0x8317, -0x8360,0x832D,0x833A,0x8333,0x8366,0x8365,0x8368,0x831B, -0x8369,0x836C,0x836A,0x836D,0x836E,0x83B0,0x8378,0x83B3, -0x83B4,0x83A0,0x83AA,0x8393,0x839C,0x8385,0x837C,0x83B6, -0x83A9,0x837D,0x83B8,0x837B,0x8398,0x839E,0x83A8,0x83BA, -0x83BC,0x83C1,0x8401,0x83E5,0x83D8,0x5807,0x8418,0x840B, -0x83DD,0x83FD,0x83D6,0x841C,0x8438,0x8411,0x8406,0x83D4, -0x83DF,0x840F,0x8403,0x83F8,0x83F9,0x83EA,0x83C5,0x83C0, -0x8426,0x83F0,0x83E1,0x845C,0x8451,0x845A,0x8459,0x8473, -0x8487,0x8488,0x847A,0x8489,0x8478,0x843C,0x8446,0x8469, -0x8476,0x848C,0x848E,0x8431,0x846D,0x84C1,0x84CD,0x84D0, -0x84E6,0x84BD,0x84D3,0x84CA,0x84BF,0x84BA,0x84E0,0x84A1, -0x84B9,0x84B4,0x8497,0x84E5,0x84E3,0x850C,0x750D,0x8538, -0x84F0,0x8539,0x851F,0x853A,0x8556,0x853B,0x84FF,0x84FC, -0x8559,0x8548,0x8568,0x8564,0x855E,0x857A,0x77A2,0x8543, -0x8572,0x857B,0x85A4,0x85A8,0x8587,0x858F,0x8579,0x85AE, -0x859C,0x8585,0x85B9,0x85B7,0x85B0,0x85D3,0x85C1,0x85DC, -0x85FF,0x8627,0x8605,0x8629,0x8616,0x863C,0x5EFE,0x5F08, -0x593C,0x5941,0x8037,0x5955,0x595A,0x5958,0x530F,0x5C22, -0x5C25,0x5C2C,0x5C34,0x624C,0x626A,0x629F,0x62BB,0x62CA, -0x62DA,0x62D7,0x62EE,0x6322,0x62F6,0x6339,0x634B,0x6343, -0x63AD,0x63F6,0x6371,0x637A,0x638E,0x63B4,0x636D,0x63AC, -0x638A,0x6369,0x63AE,0x63BC,0x63F2,0x63F8,0x63E0,0x63FF, -0x63C4,0x63DE,0x63CE,0x6452,0x63C6,0x63BE,0x6445,0x6441, -0x640B,0x641B,0x6420,0x640C,0x6426,0x6421,0x645E,0x6484, -0x646D,0x6496,0x647A,0x64B7,0x64B8,0x6499,0x64BA,0x64C0, -0x64D0,0x64D7,0x64E4,0x64E2,0x6509,0x6525,0x652E,0x5F0B, -0x5FD2,0x7519,0x5F11,0x535F,0x53F1,0x53FD,0x53E9,0x53E8, -0x53FB,0x5412,0x5416,0x5406,0x544B,0x5452,0x5453,0x5454, -0x5456,0x5443,0x5421,0x5457,0x5459,0x5423,0x5432,0x5482, -0x5494,0x5477,0x5471,0x5464,0x549A,0x549B,0x5484,0x5476, -0x5466,0x549D,0x54D0,0x54AD,0x54C2,0x54B4,0x54D2,0x54A7, -0x54A6,0x54D3,0x54D4,0x5472,0x54A3,0x54D5,0x54BB,0x54BF, -0x54CC,0x54D9,0x54DA,0x54DC,0x54A9,0x54AA,0x54A4,0x54DD, -0x54CF,0x54DE,0x551B,0x54E7,0x5520,0x54FD,0x5514,0x54F3, -0x5522,0x5523,0x550F,0x5511,0x5527,0x552A,0x5567,0x558F, -0x55B5,0x5549,0x556D,0x5541,0x5555,0x553F,0x5550,0x553C, -0x5537,0x5556,0x5575,0x5576,0x5577,0x5533,0x5530,0x555C, -0x558B,0x55D2,0x5583,0x55B1,0x55B9,0x5588,0x5581,0x559F, -0x557E,0x55D6,0x5591,0x557B,0x55DF,0x55BD,0x55BE,0x5594, -0x5599,0x55EA,0x55F7,0x55C9,0x561F,0x55D1,0x55EB,0x55EC, -0x55D4,0x55E6,0x55DD,0x55C4,0x55EF,0x55E5,0x55F2,0x55F3, -0x55CC,0x55CD,0x55E8,0x55F5,0x55E4,0x8F94,0x561E,0x5608, -0x560C,0x5601,0x5624,0x5623,0x55FE,0x5600,0x5627,0x562D, -0x5658,0x5639,0x5657,0x562C,0x564D,0x5662,0x5659,0x565C, -0x564C,0x5654,0x5686,0x5664,0x5671,0x566B,0x567B,0x567C, -0x5685,0x5693,0x56AF,0x56D4,0x56D7,0x56DD,0x56E1,0x56F5, -0x56EB,0x56F9,0x56FF,0x5704,0x570A,0x5709,0x571C,0x5E0F, -0x5E19,0x5E14,0x5E11,0x5E31,0x5E3B,0x5E3C,0x5E37,0x5E44, -0x5E54,0x5E5B,0x5E5E,0x5E61,0x5C8C,0x5C7A,0x5C8D,0x5C90, -0x5C96,0x5C88,0x5C98,0x5C99,0x5C91,0x5C9A,0x5C9C,0x5CB5, -0x5CA2,0x5CBD,0x5CAC,0x5CAB,0x5CB1,0x5CA3,0x5CC1,0x5CB7, -0x5CC4,0x5CD2,0x5CE4,0x5CCB,0x5CE5,0x5D02,0x5D03,0x5D27, -0x5D26,0x5D2E,0x5D24,0x5D1E,0x5D06,0x5D1B,0x5D58,0x5D3E, -0x5D34,0x5D3D,0x5D6C,0x5D5B,0x5D6F,0x5D5D,0x5D6B,0x5D4B, -0x5D4A,0x5D69,0x5D74,0x5D82,0x5D99,0x5D9D,0x8C73,0x5DB7, -0x5DC5,0x5F73,0x5F77,0x5F82,0x5F87,0x5F89,0x5F8C,0x5F95, -0x5F99,0x5F9C,0x5FA8,0x5FAD,0x5FB5,0x5FBC,0x8862,0x5F61, -0x72AD,0x72B0,0x72B4,0x72B7,0x72B8,0x72C3,0x72C1,0x72CE, -0x72CD,0x72D2,0x72E8,0x72EF,0x72E9,0x72F2,0x72F4,0x72F7, -0x7301,0x72F3,0x7303,0x72FA,0x72FB,0x7317,0x7313,0x7321, -0x730A,0x731E,0x731D,0x7315,0x7322,0x7339,0x7325,0x732C, -0x7338,0x7331,0x7350,0x734D,0x7357,0x7360,0x736C,0x736F, -0x737E,0x821B,0x5925,0x98E7,0x5924,0x5902,0x9963,0x9967, -0x9968,0x9969,0x996A,0x996B,0x996C,0x9974,0x9977,0x997D, -0x9980,0x9984,0x9987,0x998A,0x998D,0x9990,0x9991,0x9993, -0x9994,0x9995,0x5E80,0x5E91,0x5E8B,0x5E96,0x5EA5,0x5EA0, -0x5EB9,0x5EB5,0x5EBE,0x5EB3,0x8D53,0x5ED2,0x5ED1,0x5EDB, -0x5EE8,0x5EEA,0x81BA,0x5FC4,0x5FC9,0x5FD6,0x5FCF,0x6003, -0x5FEE,0x6004,0x5FE1,0x5FE4,0x5FFE,0x6005,0x6006,0x5FEA, -0x5FED,0x5FF8,0x6019,0x6035,0x6026,0x601B,0x600F,0x600D, -0x6029,0x602B,0x600A,0x603F,0x6021,0x6078,0x6079,0x607B, -0x607A,0x6042,0x606A,0x607D,0x6096,0x609A,0x60AD,0x609D, -0x6083,0x6092,0x608C,0x609B,0x60EC,0x60BB,0x60B1,0x60DD, -0x60D8,0x60C6,0x60DA,0x60B4,0x6120,0x6126,0x6115,0x6123, -0x60F4,0x6100,0x610E,0x612B,0x614A,0x6175,0x61AC,0x6194, -0x61A7,0x61B7,0x61D4,0x61F5,0x5FDD,0x96B3,0x95E9,0x95EB, -0x95F1,0x95F3,0x95F5,0x95F6,0x95FC,0x95FE,0x9603,0x9604, -0x9606,0x9608,0x960A,0x960B,0x960C,0x960D,0x960F,0x9612, -0x9615,0x9616,0x9617,0x9619,0x961A,0x4E2C,0x723F,0x6215, -0x6C35,0x6C54,0x6C5C,0x6C4A,0x6CA3,0x6C85,0x6C90,0x6C94, -0x6C8C,0x6C68,0x6C69,0x6C74,0x6C76,0x6C86,0x6CA9,0x6CD0, -0x6CD4,0x6CAD,0x6CF7,0x6CF8,0x6CF1,0x6CD7,0x6CB2,0x6CE0, -0x6CD6,0x6CFA,0x6CEB,0x6CEE,0x6CB1,0x6CD3,0x6CEF,0x6CFE, -0x6D39,0x6D27,0x6D0C,0x6D43,0x6D48,0x6D07,0x6D04,0x6D19, -0x6D0E,0x6D2B,0x6D4D,0x6D2E,0x6D35,0x6D1A,0x6D4F,0x6D52, -0x6D54,0x6D33,0x6D91,0x6D6F,0x6D9E,0x6DA0,0x6D5E,0x6D93, -0x6D94,0x6D5C,0x6D60,0x6D7C,0x6D63,0x6E1A,0x6DC7,0x6DC5, -0x6DDE,0x6E0E,0x6DBF,0x6DE0,0x6E11,0x6DE6,0x6DDD,0x6DD9, -0x6E16,0x6DAB,0x6E0C,0x6DAE,0x6E2B,0x6E6E,0x6E4E,0x6E6B, -0x6EB2,0x6E5F,0x6E86,0x6E53,0x6E54,0x6E32,0x6E25,0x6E44, -0x6EDF,0x6EB1,0x6E98,0x6EE0,0x6F2D,0x6EE2,0x6EA5,0x6EA7, -0x6EBD,0x6EBB,0x6EB7,0x6ED7,0x6EB4,0x6ECF,0x6E8F,0x6EC2, -0x6E9F,0x6F62,0x6F46,0x6F47,0x6F24,0x6F15,0x6EF9,0x6F2F, -0x6F36,0x6F4B,0x6F74,0x6F2A,0x6F09,0x6F29,0x6F89,0x6F8D, -0x6F8C,0x6F78,0x6F72,0x6F7C,0x6F7A,0x6FD1,0x6FC9,0x6FA7, -0x6FB9,0x6FB6,0x6FC2,0x6FE1,0x6FEE,0x6FDE,0x6FE0,0x6FEF, -0x701A,0x7023,0x701B,0x7039,0x7035,0x704F,0x705E,0x5B80, -0x5B84,0x5B95,0x5B93,0x5BA5,0x5BB8,0x752F,0x9A9E,0x6434, -0x5BE4,0x5BEE,0x8930,0x5BF0,0x8E47,0x8B07,0x8FB6,0x8FD3, -0x8FD5,0x8FE5,0x8FEE,0x8FE4,0x8FE9,0x8FE6,0x8FF3,0x8FE8, -0x9005,0x9004,0x900B,0x9026,0x9011,0x900D,0x9016,0x9021, -0x9035,0x9036,0x902D,0x902F,0x9044,0x9051,0x9052,0x9050, -0x9068,0x9058,0x9062,0x905B,0x66B9,0x9074,0x907D,0x9082, -0x9088,0x9083,0x908B,0x5F50,0x5F57,0x5F56,0x5F58,0x5C3B, -0x54AB,0x5C50,0x5C59,0x5B71,0x5C63,0x5C66,0x7FBC,0x5F2A, -0x5F29,0x5F2D,0x8274,0x5F3C,0x9B3B,0x5C6E,0x5981,0x5983, -0x598D,0x59A9,0x59AA,0x59A3,0x5997,0x59CA,0x59AB,0x599E, -0x59A4,0x59D2,0x59B2,0x59AF,0x59D7,0x59BE,0x5A05,0x5A06, -0x59DD,0x5A08,0x59E3,0x59D8,0x59F9,0x5A0C,0x5A09,0x5A32, -0x5A34,0x5A11,0x5A23,0x5A13,0x5A40,0x5A67,0x5A4A,0x5A55, -0x5A3C,0x5A62,0x5A75,0x80EC,0x5AAA,0x5A9B,0x5A77,0x5A7A, -0x5ABE,0x5AEB,0x5AB2,0x5AD2,0x5AD4,0x5AB8,0x5AE0,0x5AE3, -0x5AF1,0x5AD6,0x5AE6,0x5AD8,0x5ADC,0x5B09,0x5B17,0x5B16, -0x5B32,0x5B37,0x5B40,0x5C15,0x5C1C,0x5B5A,0x5B65,0x5B73, -0x5B51,0x5B53,0x5B62,0x9A75,0x9A77,0x9A78,0x9A7A,0x9A7F, -0x9A7D,0x9A80,0x9A81,0x9A85,0x9A88,0x9A8A,0x9A90,0x9A92, -0x9A93,0x9A96,0x9A98,0x9A9B,0x9A9C,0x9A9D,0x9A9F,0x9AA0, -0x9AA2,0x9AA3,0x9AA5,0x9AA7,0x7E9F,0x7EA1,0x7EA3,0x7EA5, -0x7EA8,0x7EA9,0x7EAD,0x7EB0,0x7EBE,0x7EC0,0x7EC1,0x7EC2, -0x7EC9,0x7ECB,0x7ECC,0x7ED0,0x7ED4,0x7ED7,0x7EDB,0x7EE0, -0x7EE1,0x7EE8,0x7EEB,0x7EEE,0x7EEF,0x7EF1,0x7EF2,0x7F0D, -0x7EF6,0x7EFA,0x7EFB,0x7EFE,0x7F01,0x7F02,0x7F03,0x7F07, -0x7F08,0x7F0B,0x7F0C,0x7F0F,0x7F11,0x7F12,0x7F17,0x7F19, -0x7F1C,0x7F1B,0x7F1F,0x7F21,0x7F22,0x7F23,0x7F24,0x7F25, -0x7F26,0x7F27,0x7F2A,0x7F2B,0x7F2C,0x7F2D,0x7F2F,0x7F30, -0x7F31,0x7F32,0x7F33,0x7F35,0x5E7A,0x757F,0x5DDB,0x753E, -0x9095,0x738E,0x7391,0x73AE,0x73A2,0x739F,0x73CF,0x73C2, -0x73D1,0x73B7,0x73B3,0x73C0,0x73C9,0x73C8,0x73E5,0x73D9, -0x987C,0x740A,0x73E9,0x73E7,0x73DE,0x73BA,0x73F2,0x740F, -0x742A,0x745B,0x7426,0x7425,0x7428,0x7430,0x742E,0x742C, -0x741B,0x741A,0x7441,0x745C,0x7457,0x7455,0x7459,0x7477, -0x746D,0x747E,0x749C,0x748E,0x7480,0x7481,0x7487,0x748B, -0x749E,0x74A8,0x74A9,0x7490,0x74A7,0x74D2,0x74BA,0x97EA, -0x97EB,0x97EC,0x674C,0x6753,0x675E,0x6748,0x6769,0x67A5, -0x6787,0x676A,0x6773,0x6798,0x67A7,0x6775,0x67A8,0x679E, -0x67AD,0x678B,0x6777,0x677C,0x67F0,0x6809,0x67D8,0x680A, -0x67E9,0x67B0,0x680C,0x67D9,0x67B5,0x67DA,0x67B3,0x67DD, -0x6800,0x67C3,0x67B8,0x67E2,0x680E,0x67C1,0x67FD,0x6832, -0x6833,0x6860,0x6861,0x684E,0x6862,0x6844,0x6864,0x6883, -0x681D,0x6855,0x6866,0x6841,0x6867,0x6840,0x683E,0x684A, -0x6849,0x6829,0x68B5,0x688F,0x6874,0x6877,0x6893,0x686B, -0x68C2,0x696E,0x68FC,0x691F,0x6920,0x68F9,0x6924,0x68F0, -0x690B,0x6901,0x6957,0x68E3,0x6910,0x6971,0x6939,0x6960, -0x6942,0x695D,0x6984,0x696B,0x6980,0x6998,0x6978,0x6934, -0x69CC,0x6987,0x6988,0x69CE,0x6989,0x6966,0x6963,0x6979, -0x699B,0x69A7,0x69BB,0x69AB,0x69AD,0x69D4,0x69B1,0x69C1, -0x69CA,0x69DF,0x6995,0x69E0,0x698D,0x69FF,0x6A2F,0x69ED, -0x6A17,0x6A18,0x6A65,0x69F2,0x6A44,0x6A3E,0x6AA0,0x6A50, -0x6A5B,0x6A35,0x6A8E,0x6A79,0x6A3D,0x6A28,0x6A58,0x6A7C, -0x6A91,0x6A90,0x6AA9,0x6A97,0x6AAB,0x7337,0x7352,0x6B81, -0x6B82,0x6B87,0x6B84,0x6B92,0x6B93,0x6B8D,0x6B9A,0x6B9B, -0x6BA1,0x6BAA,0x8F6B,0x8F6D,0x8F71,0x8F72,0x8F73,0x8F75, -0x8F76,0x8F78,0x8F77,0x8F79,0x8F7A,0x8F7C,0x8F7E,0x8F81, -0x8F82,0x8F84,0x8F87,0x8F8B,0x8F8D,0x8F8E,0x8F8F,0x8F98, -0x8F9A,0x8ECE,0x620B,0x6217,0x621B,0x621F,0x6222,0x6221, -0x6225,0x6224,0x622C,0x81E7,0x74EF,0x74F4,0x74FF,0x750F, -0x7511,0x7513,0x6534,0x65EE,0x65EF,0x65F0,0x660A,0x6619, -0x6772,0x6603,0x6615,0x6600,0x7085,0x66F7,0x661D,0x6634, -0x6631,0x6636,0x6635,0x8006,0x665F,0x6654,0x6641,0x664F, -0x6656,0x6661,0x6657,0x6677,0x6684,0x668C,0x66A7,0x669D, -0x66BE,0x66DB,0x66DC,0x66E6,0x66E9,0x8D32,0x8D33,0x8D36, -0x8D3B,0x8D3D,0x8D40,0x8D45,0x8D46,0x8D48,0x8D49,0x8D47, -0x8D4D,0x8D55,0x8D59,0x89C7,0x89CA,0x89CB,0x89CC,0x89CE, -0x89CF,0x89D0,0x89D1,0x726E,0x729F,0x725D,0x7266,0x726F, -0x727E,0x727F,0x7284,0x728B,0x728D,0x728F,0x7292,0x6308, -0x6332,0x63B0,0x643F,0x64D8,0x8004,0x6BEA,0x6BF3,0x6BFD, -0x6BF5,0x6BF9,0x6C05,0x6C07,0x6C06,0x6C0D,0x6C15,0x6C18, -0x6C19,0x6C1A,0x6C21,0x6C29,0x6C24,0x6C2A,0x6C32,0x6535, -0x6555,0x656B,0x724D,0x7252,0x7256,0x7230,0x8662,0x5216, -0x809F,0x809C,0x8093,0x80BC,0x670A,0x80BD,0x80B1,0x80AB, -0x80AD,0x80B4,0x80B7,0x80E7,0x80E8,0x80E9,0x80EA,0x80DB, -0x80C2,0x80C4,0x80D9,0x80CD,0x80D7,0x6710,0x80DD,0x80EB, -0x80F1,0x80F4,0x80ED,0x810D,0x810E,0x80F2,0x80FC,0x6715, -0x8112,0x8C5A,0x8136,0x811E,0x812C,0x8118,0x8132,0x8148, -0x814C,0x8153,0x8174,0x8159,0x815A,0x8171,0x8160,0x8169, -0x817C,0x817D,0x816D,0x8167,0x584D,0x5AB5,0x8188,0x8182, -0x8191,0x6ED5,0x81A3,0x81AA,0x81CC,0x6726,0x81CA,0x81BB, -0x81C1,0x81A6,0x6B24,0x6B37,0x6B39,0x6B43,0x6B46,0x6B59, -0x98D1,0x98D2,0x98D3,0x98D5,0x98D9,0x98DA,0x6BB3,0x5F40, -0x6BC2,0x89F3,0x6590,0x9F51,0x6593,0x65BC,0x65C6,0x65C4, -0x65C3,0x65CC,0x65CE,0x65D2,0x65D6,0x7080,0x709C,0x7096, -0x709D,0x70BB,0x70C0,0x70B7,0x70AB,0x70B1,0x70E8,0x70CA, -0x7110,0x7113,0x7116,0x712F,0x7131,0x7173,0x715C,0x7168, -0x7145,0x7172,0x714A,0x7178,0x717A,0x7198,0x71B3,0x71B5, -0x71A8,0x71A0,0x71E0,0x71D4,0x71E7,0x71F9,0x721D,0x7228, -0x706C,0x7118,0x7166,0x71B9,0x623E,0x623D,0x6243,0x6248, -0x6249,0x793B,0x7940,0x7946,0x7949,0x795B,0x795C,0x7953, -0x795A,0x7962,0x7957,0x7960,0x796F,0x7967,0x797A,0x7985, -0x798A,0x799A,0x79A7,0x79B3,0x5FD1,0x5FD0,0x603C,0x605D, -0x605A,0x6067,0x6041,0x6059,0x6063,0x60AB,0x6106,0x610D, -0x615D,0x61A9,0x619D,0x61CB,0x61D1,0x6206,0x8080,0x807F, -0x6C93,0x6CF6,0x6DFC,0x77F6,0x77F8,0x7800,0x7809,0x7817, -0x7818,0x7811,0x65AB,0x782D,0x781C,0x781D,0x7839,0x783A, -0x783B,0x781F,0x783C,0x7825,0x782C,0x7823,0x7829,0x784E, -0x786D,0x7856,0x7857,0x7826,0x7850,0x7847,0x784C,0x786A, -0x789B,0x7893,0x789A,0x7887,0x789C,0x78A1,0x78A3,0x78B2, -0x78B9,0x78A5,0x78D4,0x78D9,0x78C9,0x78EC,0x78F2,0x7905, -0x78F4,0x7913,0x7924,0x791E,0x7934,0x9F9B,0x9EF9,0x9EFB, -0x9EFC,0x76F1,0x7704,0x770D,0x76F9,0x7707,0x7708,0x771A, -0x7722,0x7719,0x772D,0x7726,0x7735,0x7738,0x7750,0x7751, -0x7747,0x7743,0x775A,0x7768,0x7762,0x7765,0x777F,0x778D, -0x777D,0x7780,0x778C,0x7791,0x779F,0x77A0,0x77B0,0x77B5, -0x77BD,0x753A,0x7540,0x754E,0x754B,0x7548,0x755B,0x7572, -0x7579,0x7583,0x7F58,0x7F61,0x7F5F,0x8A48,0x7F68,0x7F74, -0x7F71,0x7F79,0x7F81,0x7F7E,0x76CD,0x76E5,0x8832,0x9485, -0x9486,0x9487,0x948B,0x948A,0x948C,0x948D,0x948F,0x9490, -0x9494,0x9497,0x9495,0x949A,0x949B,0x949C,0x94A3,0x94A4, -0x94AB,0x94AA,0x94AD,0x94AC,0x94AF,0x94B0,0x94B2,0x94B4, -0x94B6,0x94B7,0x94B8,0x94B9,0x94BA,0x94BC,0x94BD,0x94BF, -0x94C4,0x94C8,0x94C9,0x94CA,0x94CB,0x94CC,0x94CD,0x94CE, -0x94D0,0x94D1,0x94D2,0x94D5,0x94D6,0x94D7,0x94D9,0x94D8, -0x94DB,0x94DE,0x94DF,0x94E0,0x94E2,0x94E4,0x94E5,0x94E7, -0x94E8,0x94EA,0x94E9,0x94EB,0x94EE,0x94EF,0x94F3,0x94F4, -0x94F5,0x94F7,0x94F9,0x94FC,0x94FD,0x94FF,0x9503,0x9502, -0x9506,0x9507,0x9509,0x950A,0x950D,0x950E,0x950F,0x9512, -0x9513,0x9514,0x9515,0x9516,0x9518,0x951B,0x951D,0x951E, -0x951F,0x9522,0x952A,0x952B,0x9529,0x952C,0x9531,0x9532, -0x9534,0x9536,0x9537,0x9538,0x953C,0x953E,0x953F,0x9542, -0x9535,0x9544,0x9545,0x9546,0x9549,0x954C,0x954E,0x954F, -0x9552,0x9553,0x9554,0x9556,0x9557,0x9558,0x9559,0x955B, -0x955E,0x955F,0x955D,0x9561,0x9562,0x9564,0x9565,0x9566, -0x9567,0x9568,0x9569,0x956A,0x956B,0x956C,0x956F,0x9571, -0x9572,0x9573,0x953A,0x77E7,0x77EC,0x96C9,0x79D5,0x79ED, -0x79E3,0x79EB,0x7A06,0x5D47,0x7A03,0x7A02,0x7A1E,0x7A14, -0x7A39,0x7A37,0x7A51,0x9ECF,0x99A5,0x7A70,0x7688,0x768E, -0x7693,0x7699,0x76A4,0x74DE,0x74E0,0x752C,0x9E20,0x9E22, -0x9E28,0x9E29,0x9E2A,0x9E2B,0x9E2C,0x9E32,0x9E31,0x9E36, -0x9E38,0x9E37,0x9E39,0x9E3A,0x9E3E,0x9E41,0x9E42,0x9E44, -0x9E46,0x9E47,0x9E48,0x9E49,0x9E4B,0x9E4C,0x9E4E,0x9E51, -0x9E55,0x9E57,0x9E5A,0x9E5B,0x9E5C,0x9E5E,0x9E63,0x9E66, -0x9E67,0x9E68,0x9E69,0x9E6A,0x9E6B,0x9E6C,0x9E71,0x9E6D, -0x9E73,0x7592,0x7594,0x7596,0x75A0,0x759D,0x75AC,0x75A3, -0x75B3,0x75B4,0x75B8,0x75C4,0x75B1,0x75B0,0x75C3,0x75C2, -0x75D6,0x75CD,0x75E3,0x75E8,0x75E6,0x75E4,0x75EB,0x75E7, -0x7603,0x75F1,0x75FC,0x75FF,0x7610,0x7600,0x7605,0x760C, -0x7617,0x760A,0x7625,0x7618,0x7615,0x7619,0x761B,0x763C, -0x7622,0x7620,0x7640,0x762D,0x7630,0x763F,0x7635,0x7643, -0x763E,0x7633,0x764D,0x765E,0x7654,0x765C,0x7656,0x766B, -0x766F,0x7FCA,0x7AE6,0x7A78,0x7A79,0x7A80,0x7A86,0x7A88, -0x7A95,0x7AA6,0x7AA0,0x7AAC,0x7AA8,0x7AAD,0x7AB3,0x8864, -0x8869,0x8872,0x887D,0x887F,0x8882,0x88A2,0x88C6,0x88B7, -0x88BC,0x88C9,0x88E2,0x88CE,0x88E3,0x88E5,0x88F1,0x891A, -0x88FC,0x88E8,0x88FE,0x88F0,0x8921,0x8919,0x8913,0x891B, -0x890A,0x8934,0x892B,0x8936,0x8941,0x8966,0x897B,0x758B, -0x80E5,0x76B2,0x76B4,0x77DC,0x8012,0x8014,0x8016,0x801C, -0x8020,0x8022,0x8025,0x8026,0x8027,0x8029,0x8028,0x8031, -0x800B,0x8035,0x8043,0x8046,0x804D,0x8052,0x8069,0x8071, -0x8983,0x9878,0x9880,0x9883,0x9889,0x988C,0x988D,0x988F, -0x9894,0x989A,0x989B,0x989E,0x989F,0x98A1,0x98A2,0x98A5, -0x98A6,0x864D,0x8654,0x866C,0x866E,0x867F,0x867A,0x867C, -0x867B,0x86A8,0x868D,0x868B,0x86AC,0x869D,0x86A7,0x86A3, -0x86AA,0x8693,0x86A9,0x86B6,0x86C4,0x86B5,0x86CE,0x86B0, -0x86BA,0x86B1,0x86AF,0x86C9,0x86CF,0x86B4,0x86E9,0x86F1, -0x86F2,0x86ED,0x86F3,0x86D0,0x8713,0x86DE,0x86F4,0x86DF, -0x86D8,0x86D1,0x8703,0x8707,0x86F8,0x8708,0x870A,0x870D, -0x8709,0x8723,0x873B,0x871E,0x8725,0x872E,0x871A,0x873E, -0x8748,0x8734,0x8731,0x8729,0x8737,0x873F,0x8782,0x8722, -0x877D,0x877E,0x877B,0x8760,0x8770,0x874C,0x876E,0x878B, -0x8753,0x8763,0x877C,0x8764,0x8759,0x8765,0x8793,0x87AF, -0x87A8,0x87D2,0x87C6,0x8788,0x8785,0x87AD,0x8797,0x8783, -0x87AB,0x87E5,0x87AC,0x87B5,0x87B3,0x87CB,0x87D3,0x87BD, -0x87D1,0x87C0,0x87CA,0x87DB,0x87EA,0x87E0,0x87EE,0x8816, -0x8813,0x87FE,0x880A,0x881B,0x8821,0x8839,0x883C,0x7F36, -0x7F42,0x7F44,0x7F45,0x8210,0x7AFA,0x7AFD,0x7B08,0x7B03, -0x7B04,0x7B15,0x7B0A,0x7B2B,0x7B0F,0x7B47,0x7B38,0x7B2A, -0x7B19,0x7B2E,0x7B31,0x7B20,0x7B25,0x7B24,0x7B33,0x7B3E, -0x7B1E,0x7B58,0x7B5A,0x7B45,0x7B75,0x7B4C,0x7B5D,0x7B60, -0x7B6E,0x7B7B,0x7B62,0x7B72,0x7B71,0x7B90,0x7BA6,0x7BA7, -0x7BB8,0x7BAC,0x7B9D,0x7BA8,0x7B85,0x7BAA,0x7B9C,0x7BA2, -0x7BAB,0x7BB4,0x7BD1,0x7BC1,0x7BCC,0x7BDD,0x7BDA,0x7BE5, -0x7BE6,0x7BEA,0x7C0C,0x7BFE,0x7BFC,0x7C0F,0x7C16,0x7C0B, -0x7C1F,0x7C2A,0x7C26,0x7C38,0x7C41,0x7C40,0x81FE,0x8201, -0x8202,0x8204,0x81EC,0x8844,0x8221,0x8222,0x8223,0x822D, -0x822F,0x8228,0x822B,0x8238,0x823B,0x8233,0x8234,0x823E, -0x8244,0x8249,0x824B,0x824F,0x825A,0x825F,0x8268,0x887E, -0x8885,0x8888,0x88D8,0x88DF,0x895E,0x7F9D,0x7F9F,0x7FA7, -0x7FAF,0x7FB0,0x7FB2,0x7C7C,0x6549,0x7C91,0x7C9D,0x7C9C, -0x7C9E,0x7CA2,0x7CB2,0x7CBC,0x7CBD,0x7CC1,0x7CC7,0x7CCC, -0x7CCD,0x7CC8,0x7CC5,0x7CD7,0x7CE8,0x826E,0x66A8,0x7FBF, -0x7FCE,0x7FD5,0x7FE5,0x7FE1,0x7FE6,0x7FE9,0x7FEE,0x7FF3, -0x7CF8,0x7D77,0x7DA6,0x7DAE,0x7E47,0x7E9B,0x9EB8,0x9EB4, -0x8D73,0x8D84,0x8D94,0x8D91,0x8DB1,0x8D67,0x8D6D,0x8C47, -0x8C49,0x914A,0x9150,0x914E,0x914F,0x9164,0x9162,0x9161, -0x9170,0x9169,0x916F,0x917D,0x917E,0x9172,0x9174,0x9179, -0x918C,0x9185,0x9190,0x918D,0x9191,0x91A2,0x91A3,0x91AA, -0x91AD,0x91AE,0x91AF,0x91B5,0x91B4,0x91BA,0x8C55,0x9E7E, -0x8DB8,0x8DEB,0x8E05,0x8E59,0x8E69,0x8DB5,0x8DBF,0x8DBC, -0x8DBA,0x8DC4,0x8DD6,0x8DD7,0x8DDA,0x8DDE,0x8DCE,0x8DCF, -0x8DDB,0x8DC6,0x8DEC,0x8DF7,0x8DF8,0x8DE3,0x8DF9,0x8DFB, -0x8DE4,0x8E09,0x8DFD,0x8E14,0x8E1D,0x8E1F,0x8E2C,0x8E2E, -0x8E23,0x8E2F,0x8E3A,0x8E40,0x8E39,0x8E35,0x8E3D,0x8E31, -0x8E49,0x8E41,0x8E42,0x8E51,0x8E52,0x8E4A,0x8E70,0x8E76, -0x8E7C,0x8E6F,0x8E74,0x8E85,0x8E8F,0x8E94,0x8E90,0x8E9C, -0x8E9E,0x8C78,0x8C82,0x8C8A,0x8C85,0x8C98,0x8C94,0x659B, -0x89D6,0x89DE,0x89DA,0x89DC,0x89E5,0x89EB,0x89EF,0x8A3E, -0x8B26,0x9753,0x96E9,0x96F3,0x96EF,0x9706,0x9701,0x9708, -0x970F,0x970E,0x972A,0x972D,0x9730,0x973E,0x9F80,0x9F83, -0x9F85,0x9F86,0x9F87,0x9F88,0x9F89,0x9F8A,0x9F8C,0x9EFE, -0x9F0B,0x9F0D,0x96B9,0x96BC,0x96BD,0x96CE,0x96D2,0x77BF, -0x96E0,0x928E,0x92AE,0x92C8,0x933E,0x936A,0x93CA,0x938F, -0x943E,0x946B,0x9C7F,0x9C82,0x9C85,0x9C86,0x9C87,0x9C88, -0x7A23,0x9C8B,0x9C8E,0x9C90,0x9C91,0x9C92,0x9C94,0x9C95, -0x9C9A,0x9C9B,0x9C9E,0x9C9F,0x9CA0,0x9CA1,0x9CA2,0x9CA3, -0x9CA5,0x9CA6,0x9CA7,0x9CA8,0x9CA9,0x9CAB,0x9CAD,0x9CAE, -0x9CB0,0x9CB1,0x9CB2,0x9CB3,0x9CB4,0x9CB5,0x9CB6,0x9CB7, -0x9CBA,0x9CBB,0x9CBC,0x9CBD,0x9CC4,0x9CC5,0x9CC6,0x9CC7, -0x9CCA,0x9CCB,0x9CCC,0x9CCD,0x9CCE,0x9CCF,0x9CD0,0x9CD3, -0x9CD4,0x9CD5,0x9CD7,0x9CD8,0x9CD9,0x9CDC,0x9CDD,0x9CDF, -0x9CE2,0x977C,0x9785,0x9791,0x9792,0x9794,0x97AF,0x97AB, -0x97A3,0x97B2,0x97B4,0x9AB1,0x9AB0,0x9AB7,0x9E58,0x9AB6, -0x9ABA,0x9ABC,0x9AC1,0x9AC0,0x9AC5,0x9AC2,0x9ACB,0x9ACC, -0x9AD1,0x9B45,0x9B43,0x9B47,0x9B49,0x9B48,0x9B4D,0x9B51, -0x98E8,0x990D,0x992E,0x9955,0x9954,0x9ADF,0x9AE1,0x9AE6, -0x9AEF,0x9AEB,0x9AFB,0x9AED,0x9AF9,0x9B08,0x9B0F,0x9B13, -0x9B1F,0x9B23,0x9EBD,0x9EBE,0x7E3B,0x9E82,0x9E87,0x9E88, -0x9E8B,0x9E92,0x93D6,0x9E9D,0x9E9F,0x9EDB,0x9EDC,0x9EDD, -0x9EE0,0x9EDF,0x9EE2,0x9EE9,0x9EE7,0x9EE5,0x9EEA,0x9EEF, -0x9F22,0x9F2C,0x9F2F,0x9F39,0x9F37,0x9F3D,0x9F3E,0x9F44 -}; - -//#define B_DEBUG -int ConverGB2Unicode(char *szFrom,wchar_t *wszTo) -{ - int i=0; - int j=0; - int k=0; - int size=strlen(szFrom); - unsigned char utemp=0; - - for(i=0;i=0xA1A1 && j<=0xA9FE) - wszTo[k]=bGbUnicodedat1[(szFrom[i]-0xA1)*94+ (unsigned char)szFrom[i+1]-0xA1]; - if (j>=0xB0A1 && j<=0xF7FE) - wszTo[k]=bGbUnicodedat2[(szFrom[i]-0xB0)*94+ (unsigned char)szFrom[i+1]-0xA1]; - i++; - k++; - } - } - wszTo[k]=0; - return k; -} - diff --git a/source/GB2Unicode.h b/source/GB2Unicode.h deleted file mode 100644 index 3ca3dfa8..00000000 --- a/source/GB2Unicode.h +++ /dev/null @@ -1,24 +0,0 @@ -//GB2Unicode.h - - -#ifndef GB2UNICODE_H_ -#define GB2UNICODE_H_ - -#include -#include -#include - - - -#ifdef __cplusplus -extern "C" { -#endif - -int ConverGB2Unicode(char *szFrom,wchar_t *wszTo); - -#ifdef __cplusplus -} -#endif - -#endif //GB2UNICODE_H_ - diff --git a/source/apploader.c b/source/apploader.c deleted file mode 100644 index 6b25d522..00000000 --- a/source/apploader.c +++ /dev/null @@ -1,331 +0,0 @@ -#include -#include -#include - -#include "apploader.h" -#include "wdvd.h" -#include "wpad.h" -#include "patchcode.h" -#include "kenobiwii.h" /*FISHEARS*/ - -/*KENOBI! - FISHEARS*/ -extern const unsigned char kenobiwii[]; -extern const int kenobiwii_size; -/*KENOBI! - FISHEARS*/ - -/* Apploader function pointers */ -typedef int (*app_main)(void **dst, int *size, int *offset); -typedef void (*app_init)(void (*report)(const char *fmt, ...)); -typedef void *(*app_final)(); -typedef void (*app_entry)(void (**init)(void (*report)(const char *fmt, ...)), int (**main)(), void *(**final)()); - -/* Apploader pointers */ -static u8 *appldr = (u8 *)0x81200000; - - -/* Constants */ -#define APPLDR_OFFSET 0x2440 - -/* Variables */ -static u32 buffer[0x20] ATTRIBUTE_ALIGN(32); - - -static void __noprint(const char *fmt, ...) -{ -} - - - -bool compare_videomodes(GXRModeObj* mode1, GXRModeObj* mode2) -{ - if (mode1->viTVMode != mode2->viTVMode || mode1->fbWidth != mode2->fbWidth || mode1->efbHeight != mode2->efbHeight || mode1->xfbHeight != mode2->xfbHeight || - mode1->viXOrigin != mode2->viXOrigin || mode1->viYOrigin != mode2->viYOrigin || mode1->viWidth != mode2->viWidth || mode1->viHeight != mode2->viHeight || - mode1->xfbMode != mode2->xfbMode || mode1->field_rendering != mode2->field_rendering || mode1->aa != mode2->aa || mode1->sample_pattern[0][0] != mode2->sample_pattern[0][0] || - mode1->sample_pattern[1][0] != mode2->sample_pattern[1][0] || mode1->sample_pattern[2][0] != mode2->sample_pattern[2][0] || - mode1->sample_pattern[3][0] != mode2->sample_pattern[3][0] || mode1->sample_pattern[4][0] != mode2->sample_pattern[4][0] || - mode1->sample_pattern[5][0] != mode2->sample_pattern[5][0] || mode1->sample_pattern[6][0] != mode2->sample_pattern[6][0] || - mode1->sample_pattern[7][0] != mode2->sample_pattern[7][0] || mode1->sample_pattern[8][0] != mode2->sample_pattern[8][0] || - mode1->sample_pattern[9][0] != mode2->sample_pattern[9][0] || mode1->sample_pattern[10][0] != mode2->sample_pattern[10][0] || - mode1->sample_pattern[11][0] != mode2->sample_pattern[11][0] || mode1->sample_pattern[0][1] != mode2->sample_pattern[0][1] || - mode1->sample_pattern[1][1] != mode2->sample_pattern[1][1] || mode1->sample_pattern[2][1] != mode2->sample_pattern[2][1] || - mode1->sample_pattern[3][1] != mode2->sample_pattern[3][1] || mode1->sample_pattern[4][1] != mode2->sample_pattern[4][1] || - mode1->sample_pattern[5][1] != mode2->sample_pattern[5][1] || mode1->sample_pattern[6][1] != mode2->sample_pattern[6][1] || - mode1->sample_pattern[7][1] != mode2->sample_pattern[7][1] || mode1->sample_pattern[8][1] != mode2->sample_pattern[8][1] || - mode1->sample_pattern[9][1] != mode2->sample_pattern[9][1] || mode1->sample_pattern[10][1] != mode2->sample_pattern[10][1] || - mode1->sample_pattern[11][1] != mode2->sample_pattern[11][1] || mode1->vfilter[0] != mode2->vfilter[0] || - mode1->vfilter[1] != mode2->vfilter[1] || mode1->vfilter[2] != mode2->vfilter[2] || mode1->vfilter[3] != mode2->vfilter[3] || mode1->vfilter[4] != mode2->vfilter[4] || - mode1->vfilter[5] != mode2->vfilter[5] || mode1->vfilter[6] != mode2->vfilter[6] ) - { - return false; - } else - { - return true; - } -} - - -void patch_videomode(GXRModeObj* mode1, GXRModeObj* mode2) -{ - mode1->viTVMode = mode2->viTVMode; - mode1->fbWidth = mode2->fbWidth; - mode1->efbHeight = mode2->efbHeight; - mode1->xfbHeight = mode2->xfbHeight; - mode1->viXOrigin = mode2->viXOrigin; - mode1->viYOrigin = mode2->viYOrigin; - mode1->viWidth = mode2->viWidth; - mode1->viHeight = mode2->viHeight; - mode1->xfbMode = mode2->xfbMode; - mode1->field_rendering = mode2->field_rendering; - mode1->aa = mode2->aa; - mode1->sample_pattern[0][0] = mode2->sample_pattern[0][0]; - mode1->sample_pattern[1][0] = mode2->sample_pattern[1][0]; - mode1->sample_pattern[2][0] = mode2->sample_pattern[2][0]; - mode1->sample_pattern[3][0] = mode2->sample_pattern[3][0]; - mode1->sample_pattern[4][0] = mode2->sample_pattern[4][0]; - mode1->sample_pattern[5][0] = mode2->sample_pattern[5][0]; - mode1->sample_pattern[6][0] = mode2->sample_pattern[6][0]; - mode1->sample_pattern[7][0] = mode2->sample_pattern[7][0]; - mode1->sample_pattern[8][0] = mode2->sample_pattern[8][0]; - mode1->sample_pattern[9][0] = mode2->sample_pattern[9][0]; - mode1->sample_pattern[10][0] = mode2->sample_pattern[10][0]; - mode1->sample_pattern[11][0] = mode2->sample_pattern[11][0]; - mode1->sample_pattern[0][1] = mode2->sample_pattern[0][1]; - mode1->sample_pattern[1][1] = mode2->sample_pattern[1][1]; - mode1->sample_pattern[2][1] = mode2->sample_pattern[2][1]; - mode1->sample_pattern[3][1] = mode2->sample_pattern[3][1]; - mode1->sample_pattern[4][1] = mode2->sample_pattern[4][1]; - mode1->sample_pattern[5][1] = mode2->sample_pattern[5][1]; - mode1->sample_pattern[6][1] = mode2->sample_pattern[6][1]; - mode1->sample_pattern[7][1] = mode2->sample_pattern[7][1]; - mode1->sample_pattern[8][1] = mode2->sample_pattern[8][1]; - mode1->sample_pattern[9][1] = mode2->sample_pattern[9][1]; - mode1->sample_pattern[10][1] = mode2->sample_pattern[10][1]; - mode1->sample_pattern[11][1] = mode2->sample_pattern[11][1]; - mode1->vfilter[0] = mode2->vfilter[0]; - mode1->vfilter[1] = mode2->vfilter[1]; - mode1->vfilter[2] = mode2->vfilter[2]; - mode1->vfilter[3] = mode2->vfilter[3]; - mode1->vfilter[4] = mode2->vfilter[4]; - mode1->vfilter[5] = mode2->vfilter[5]; - mode1->vfilter[6] = mode2->vfilter[6]; -} - -GXRModeObj* vmodes[] = { - &TVNtsc240Ds, - &TVNtsc240DsAa, - &TVNtsc240Int, - &TVNtsc240IntAa, - &TVNtsc480IntDf, - &TVNtsc480IntAa, - &TVNtsc480Prog, - &TVMpal480IntDf, - &TVPal264Ds, - &TVPal264DsAa, - &TVPal264Int, - &TVPal264IntAa, - &TVPal524IntAa, - &TVPal528Int, - &TVPal528IntDf, - &TVPal574IntDfScale, - &TVEurgb60Hz240Ds, - &TVEurgb60Hz240DsAa, - &TVEurgb60Hz240Int, - &TVEurgb60Hz240IntAa, - &TVEurgb60Hz480Int, - &TVEurgb60Hz480IntDf, - &TVEurgb60Hz480IntAa, - &TVEurgb60Hz480Prog, - &TVEurgb60Hz480ProgSoft, - &TVEurgb60Hz480ProgAa -}; - -GXRModeObj* PAL2NTSC[]={ - &TVMpal480IntDf, &TVNtsc480IntDf, - &TVPal264Ds, &TVNtsc240Ds, - &TVPal264DsAa, &TVNtsc240DsAa, - &TVPal264Int, &TVNtsc240Int, - &TVPal264IntAa, &TVNtsc240IntAa, - &TVPal524IntAa, &TVNtsc480IntAa, - &TVPal528Int, &TVNtsc480IntAa, - &TVPal528IntDf, &TVNtsc480IntDf, - &TVPal574IntDfScale, &TVNtsc480IntDf, - &TVEurgb60Hz240Ds, &TVNtsc240Ds, - &TVEurgb60Hz240DsAa, &TVNtsc240DsAa, - &TVEurgb60Hz240Int, &TVNtsc240Int, - &TVEurgb60Hz240IntAa, &TVNtsc240IntAa, - &TVEurgb60Hz480Int, &TVNtsc480IntAa, - &TVEurgb60Hz480IntDf, &TVNtsc480IntDf, - &TVEurgb60Hz480IntAa, &TVNtsc480IntAa, - &TVEurgb60Hz480Prog, &TVNtsc480Prog, - &TVEurgb60Hz480ProgSoft,&TVNtsc480Prog, - &TVEurgb60Hz480ProgAa, &TVNtsc480Prog, - 0,0 -}; - -GXRModeObj* NTSC2PAL[]={ - &TVNtsc240Ds, &TVPal264Ds, - &TVNtsc240DsAa, &TVPal264DsAa, - &TVNtsc240Int, &TVPal264Int, - &TVNtsc240IntAa, &TVPal264IntAa, - &TVNtsc480IntDf, &TVPal528IntDf, - &TVNtsc480IntAa, &TVPal524IntAa, - &TVNtsc480Prog, &TVPal528IntDf, - 0,0 -}; - -GXRModeObj* NTSC2PAL60[]={ - &TVNtsc240Ds, &TVEurgb60Hz240Ds, - &TVNtsc240DsAa, &TVEurgb60Hz240DsAa, - &TVNtsc240Int, &TVEurgb60Hz240Int, - &TVNtsc240IntAa, &TVEurgb60Hz240IntAa, - &TVNtsc480IntDf, &TVEurgb60Hz480IntDf, - &TVNtsc480IntAa, &TVEurgb60Hz480IntAa, - &TVNtsc480Prog, &TVEurgb60Hz480Prog, - 0,0 -}; -bool Search_and_patch_Video_Modes(void *Address, u32 Size, GXRModeObj* Table[]) -{ - u8 *Addr = (u8 *)Address; - bool found = 0; - u32 i; - - while(Size >= sizeof(GXRModeObj)) - { - - - - for(i = 0; Table[i]; i+=2) - { - - - if(compare_videomodes(Table[i], (GXRModeObj*)Addr)) - - { - found = 1; - patch_videomode((GXRModeObj*)Addr, Table[i+1]); - Addr += (sizeof(GXRModeObj)-4); - Size -= (sizeof(GXRModeObj)-4); - break; - } - } - - Addr += 4; - Size -= 4; - } - - - return found; -} - -s32 Apploader_Run(entry_point *entry, u8 cheat, u8 videoSelected, u8 vipatch, u8 patchcountrystring) -{ - app_entry appldr_entry; - app_init appldr_init; - app_main appldr_main; - app_final appldr_final; - - u32 appldr_len; - s32 ret; - - /* Read apploader header */ - ret = WDVD_Read(buffer, 0x20, APPLDR_OFFSET); - if (ret < 0) - return ret; - - /* Calculate apploader length */ - appldr_len = buffer[5] + buffer[6]; - - /* Read apploader code */ - ret = WDVD_Read(appldr, appldr_len, APPLDR_OFFSET + 0x20); - if (ret < 0) - return ret; - - /* Set apploader entry function */ - appldr_entry = (app_entry)buffer[4]; - - /* Call apploader entry */ - appldr_entry(&appldr_init, &appldr_main, &appldr_final); - - /* Initialize apploader */ - appldr_init(__noprint); - - if (cheat) - { - /*HOOKS STUFF - FISHEARS*/ - memset((void*)0x80001800,0,kenobiwii_size); - memcpy((void*)0x80001800,kenobiwii,kenobiwii_size); - DCFlushRange((void*)0x80001800,kenobiwii_size); - hooktype = 1; - memcpy((void*)0x80001800, (char*)0x80000000, 6); // For WiiRD - /*HOOKS STUFF - FISHEARS*/ - } - - for (;;) { - void *dst = NULL; - int len = 0, offset = 0; - GXRModeObj** table = NULL; - - /* Run apploader main function */ - ret = appldr_main(&dst, &len, &offset); - if (!ret) - break; - - /* Read data from DVD */ - WDVD_Read(dst, len, (u64)(offset << 2)); - - - if (videoSelected == 5) // patch - - { - switch(CONF_GetVideo()) - { - case CONF_VIDEO_PAL: - if(CONF_GetEuRGB60() > 0) - { - table = NTSC2PAL60; - } - else - { - table = NTSC2PAL; - } - break; - - case CONF_VIDEO_MPAL: - - - - table = NTSC2PAL; - break; - - - default: - table = PAL2NTSC; - break; - } - Search_and_patch_Video_Modes(dst, len, table); - } - - /*GAME HOOK - FISHEARS*/ - dogamehooks(dst,len); - - if (vipatch) - vidolpatcher(dst,len); - - - /*LANGUAGE PATCH - FISHEARS*/ - langpatcher(dst,len); - - /*Thanks to WiiPower*/ - if(patchcountrystring == 1) - PatchCountryStrings(dst, len); - - DCFlushRange(dst, len); - } - /* Set entry point from apploader */ - *entry = appldr_final(); - - return 0; -} -#ifdef __cplusplus -} -#endif diff --git a/source/apploader.h b/source/apploader.h deleted file mode 100644 index c1d75c00..00000000 --- a/source/apploader.h +++ /dev/null @@ -1,10 +0,0 @@ -#ifndef _APPLOADER_H_ -#define _APPLOADER_H_ - -/* Entry point */ -typedef void (*entry_point)(void); - -/* Prototypes */ -s32 Apploader_Run(entry_point *, u8, u8, u8, u8); - -#endif diff --git a/source/audio.cpp b/source/audio.cpp deleted file mode 100644 index 8d0b8854..00000000 --- a/source/audio.cpp +++ /dev/null @@ -1,35 +0,0 @@ -/**************************************************************************** - * libwiigui Template - * Tantric 2009 - * - * audio.cpp - * Audio support - ***************************************************************************/ - -#include -#include -#include - -/**************************************************************************** - * InitAudio - * - * Initializes the Wii's audio subsystem - ***************************************************************************/ -void InitAudio() -{ - AUDIO_Init(NULL); - ASND_Init(); - ASND_Pause(0); -} - -/**************************************************************************** - * ShutdownAudio - * - * Shuts down audio subsystem. Useful to avoid unpleasant sounds if a - * crash occurs during shutdown. - ***************************************************************************/ -void ShutdownAudio() -{ - ASND_Pause(1); - ASND_End(); -} diff --git a/source/audio.h b/source/audio.h deleted file mode 100644 index 6efdf6d5..00000000 --- a/source/audio.h +++ /dev/null @@ -1,15 +0,0 @@ -/**************************************************************************** - * libwiigui Template - * Tantric 2009 - * - * audio.h - * Audio support - ***************************************************************************/ - -#ifndef _AUDIO_H_ -#define _AUDIO_H_ - -void InitAudio(); -void ShutdownAudio(); - -#endif diff --git a/source/cfg.c b/source/cfg.c deleted file mode 100644 index ba08ff06..00000000 --- a/source/cfg.c +++ /dev/null @@ -1,1523 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include "cfg.h" -#include "language.h" -/*<<<<<<< .mine -//#include "language.c" -extern void language_set(); -extern void lang_default(); -extern void language_set(); -extern char* strcopy(); -======= - ->>>>>>> .r348*/ -struct SSettings Settings; -//struct SSettings2 Settings2; - - -char *cfg_path = "SD:/apps/usbloader/"; -//char *setting_path = "SD:/apps/usbloader/GXGameSettings.cfg"; -char current_path[100]; - -/* configurable fields */ - -/* default */ -//int ENTRIES_PER_PAGE = 12; -//int MAX_CHARACTERS = 37; -//int CONSOLE_XCOORD = 260; -//int CONSOLE_YCOORD = 30; -//int CONSOLE_WIDTH = 340; -//int CONSOLE_HEIGHT = 290; -//int CONSOLE_FG_COLOR = 15; -//int CONSOLE_BG_COLOR = 0; -//int COVER_XCOORD = 28; -//int COVER_YCOORD = 105; - -//define variables - -struct CFG CFG; -struct THEME THEME; -u8 ocarinaChoice = 0; -u8 videoChoice = 0; -u8 faveChoice = no; -u8 languageChoice = 0; -u8 viChoice = 0; -u8 iosChoice = 0; -u8 parentalcontrolChoice = 0; -u8 xflip = 0; -u8 sort = 0; -u8 fave = 0; -u8 qboot = 0; -u8 wsprompt = 0; -u8 keyset = 0; -u8 favorite = 0; -u16 count = 0; -u8 listDisplay = 0; - -#define TITLE_MAX 65 - -struct ID_Title -{ - u8 id[5]; - char title[TITLE_MAX]; - u8 block; -}; - -// renamed titles -int num_title = 0; //number of titles -struct ID_Title *cfg_title = NULL; - -#define MAX_SAVED_GAMES 1000 -#define MAX_SAVED_GAME_NUM 1000 -int num_saved_games = 0; -int num_saved_game_num = 0; -struct Game_CFG cfg_game[MAX_SAVED_GAMES]; -struct Game_NUM cfg_game_num[MAX_SAVED_GAME_NUM]; - - -/* For Mapping */ - -static char *cfg_name, *cfg_val; - -struct TextMap -{ - char *name; - int id; -}; - -struct TextMap map_video[] = -{ - { "system", CFG_VIDEO_SYS }, - { "game", CFG_VIDEO_GAME }, - { "patch", CFG_VIDEO_PATCH }, - { "pal50", CFG_VIDEO_PAL50 }, - { "pal60", CFG_VIDEO_PAL60 }, - { "ntsc", CFG_VIDEO_NTSC }, - { NULL, -1 } -}; - -struct TextMap map_language[] = -{ - { "console", CFG_LANG_CONSOLE }, - { "japanese", CFG_LANG_JAPANESE }, - { "english", CFG_LANG_ENGLISH }, - { "german", CFG_LANG_GERMAN }, - { "french", CFG_LANG_FRENCH }, - { "spanish", CFG_LANG_SPANISH }, - { "italian", CFG_LANG_ITALIAN }, - { "dutch", CFG_LANG_DUTCH }, - { "s.chinese", CFG_LANG_S_CHINESE }, - { "t.chinese", CFG_LANG_T_CHINESE }, - { "korean", CFG_LANG_KOREAN }, - { NULL, -1 } -}; - - -struct TextMap map_alignment[] = -{ - { "left", CFG_ALIGN_LEFT }, - { "right", CFG_ALIGN_RIGHT }, - { "center", CFG_ALIGN_CENTRE }, - { "top", CFG_ALIGN_TOP }, - { "bottom", CFG_ALIGN_BOTTOM }, - { "middle", CFG_ALIGN_MIDDLE }, - { NULL, -1 } -}; - -int map_get_id(struct TextMap *map, char *name) -{ - int i; - for (i=0; map[i].name != NULL; i++) { - if (strcmp(name, map[i].name) == 0) return map[i].id; - } - return -1; -} - -char* map_get_name(struct TextMap *map, short id) -{ - int i; - for (i=0; map[i].name != NULL; i++) { - if (id == map[i].id) return map[i].name; - } - return NULL; -} - -bool map_auto(char *name, char *name2, char *val, struct TextMap *map, short *var) -{ - if (strcmp(name, name2) != 0) return false; - int id = map_get_id(map, val); - if (id == -1) { - //printf("MAP FAIL: %s=%s : %d\n", name, val, id); sleep(1); - return false; - } - *var = id; - //printf("MAP AUTO: %s=%s : %d\n", name, val, id); sleep(1); - return true; -} - -bool cfg_map_auto(char *name, struct TextMap *map, short *var) -{ - return map_auto(name, cfg_name, cfg_val, map, var); -} - -bool cfg_map(char *name, char *val, short *var, short id) -{ - if (strcmp(name, cfg_name)==0 && strcmpi(val, cfg_val)==0) - { - *var = id; - return true; - } - return false; -} - -int subfoldercheck(char * dircovers) { - //check forsubfolders - char dircheck[100]; - char dirslash[100]; - int cnt = 0; - char * pch; - struct stat st; - - sprintf(dirslash, "%s/", dircovers); - - if(stat(dirslash, &st) != 0) { - pch = strrchr(dircovers, '/'); - cnt = pch-dircovers; - snprintf(dircheck, cnt+1, "%s", dircovers); - subfoldercheck(dircheck); - } - - if (mkdir(dircovers, 0777) == -1) { - return 0; - } - -return 1; -} - -bool cfg_bool(char *name, short *var) -{ - return (cfg_map(name, "0", var, 0) || cfg_map(name, "1", var, 1)); -} - -void cfg_int(char *name, short *var, int count) -{ - char tmp[5]; - short i; - - if (count > 10) //avoid overflow - return; - - for (i = 0; i < count; i++) - { - sprintf(tmp, "%d", i); - cfg_map(name, tmp, var, i); - } -} - -/* Mapping */ - -//static char bg_path[100]; - -void CFG_Default(int widescreen) // -1 = non forced Mode -{ - if(widescreen == -1) - CFG.widescreen = CONF_GetAspectRatio(); - else - CFG.widescreen = widescreen; - - if (CFG.widescreen) { - snprintf(CFG.theme_path, sizeof(CFG.theme_path), "SD:/wtheme/"); - } - else - { - snprintf(CFG.theme_path, sizeof(CFG.theme_path), "SD:/theme/"); - } - - snprintf(CFG.covers_path, sizeof(CFG.covers_path), "SD:/images/"); //default image path - snprintf(CFG.disc_path, sizeof(CFG.disc_path), "SD:/images/disc/"); - snprintf(CFG.titlestxt_path, sizeof(CFG.titlestxt_path), "SD:/config/");//default path for disc images - snprintf(CFG.unlockCode, sizeof(CFG.unlockCode), "ab121b"); // default password - snprintf(CFG.language_path, sizeof(CFG.language_path), "SD:/config/language/"); - snprintf(CFG.oggload_path, sizeof(CFG.oggload_path), "SD:/config/backgroundmusic/"); - snprintf(CFG.update_path, sizeof(CFG.update_path), "SD:/apps/usbloader_gx/"); - sprintf(CFG.ogg_path, "notset"); - - CFG.parentalcontrol = 0; -// CFG.maxcharacters = 38; - CFG.godmode = 0; - CFG.xflip = 0; - CFG.wsprompt = 0; - - //all alignments are left top here - THEME.selection_x = 200; - THEME.selection_y = 49;//40; - THEME.selection_w = 396; - THEME.selection_h = 280; - THEME.batteryUnused = 70; - THEME.cover_x = 26; - THEME.cover_y = 55; - THEME.showID = 1; -// THEME.maxcharacters = 36; - THEME.id_x = 68; - THEME.id_y = 305; - THEME.region_x = 68; - THEME.region_y = 30; - THEME.power_x = 576; - THEME.power_y = 355; - THEME.home_x = 485;//215; - THEME.home_y = 367; - THEME.setting_x = 60;//-210 - THEME.setting_y = 367; - THEME.showHDD = -1; //default, non-force mode - THEME.showGameCnt = -1; //default, non-force mode - THEME.showToolTip = 1; //1 means use settings, 0 means force turn off - THEME.install_x = 16;//-280 - THEME.install_y = 355; - THEME.showBattery = 1; - THEME.showRegion = 1; - THEME.hddInfo_x = 0; - THEME.hddInfo_y = 410; - THEME.hddInfoAlign = CFG_ALIGN_CENTRE; - THEME.gameCnt_x = 0; - THEME.gameCnt_y = 430; - THEME.gameCntAlign = CFG_ALIGN_CENTRE; - THEME.battery1_x = 245; - THEME.battery1_y = 400; - THEME.battery2_x = 335; - THEME.battery2_y = 400; - THEME.battery3_x = 245; - THEME.battery3_y = 425; - THEME.battery4_x = 335; - THEME.battery4_y = 425; - THEME.info_r = 63; - THEME.info_g = 154; - THEME.info_b = 192; - THEME.prompttxt_r = 0; - THEME.prompttxt_g = 0; - THEME.prompttxt_b = 0; - THEME.clock_x = 0; - THEME.clock_y = 335;//330; - THEME.clockAlign = CFG_ALIGN_CENTRE; - THEME.sdcard_x = 160; - THEME.sdcard_y = 390; - THEME.gameText_r = 0; - THEME.gameText_g = 0; - THEME.gameText_b = 0; - THEME.pagesize = 9; - THEME.favorite_x = 4; - THEME.favorite_y = 13; - THEME.abc_x = 36; - THEME.abc_y = 13; - THEME.list_x = 100; - THEME.list_y = 13; - THEME.grid_x = 132; - THEME.grid_y = 13; - THEME.carousel_x = 164; - THEME.carousel_y = 13; - THEME.count_x = 68; - THEME.count_y = 13; - THEME.sortBarOffset = 100; -} - - - - -char *cfg_get_title(u8 *id) -{ - int i; - for (i=0; iid); - if (title) return title; - return header->title; -} - -void title_set(char *id, char *title, u8 block) -{ - char *idt = cfg_get_title((u8*)id); - if (idt) { - // replace - strcopy(idt, title, TITLE_MAX); - } else { - cfg_title = realloc(cfg_title, (num_title+1) * sizeof(struct ID_Title)); - if (!cfg_title) { - // error - num_title = 0; - return; - } - // add - memcpy(cfg_title[num_title].id, id, 4); - cfg_title[num_title].id[4] = 0; - cfg_title[num_title].block = block; - strcopy(cfg_title[num_title].title, title, TITLE_MAX); - num_title++; - } -} - -u8 cfg_get_block(u8 *id) -{ - int i; - for (i=0; iid); -} - -// trim leading and trailing whitespace -// copy at max n or at max size-1 -char* trim_n_copy(char *dest, char *src, int n, int size) -{ - int len; - // trim leading white space - while (isspace(*src)) { src++; n--; } - len = strlen(src); - if (len > n) len = n; - // trim trailing white space - while (len > 0 && isspace(src[len-1])) len--; - if (len >= size) len = size-1; - strncpy(dest, src, len); - dest[len] = 0; - //printf("trim_copy: '%s' %d\n", dest, len); //sleep(1); - return dest; -} - -char* trimcopy(char *dest, char *src, int size) -{ - int len; - while (*src == ' ') src++; - len = strlen(src); - // trim trailing " \r\n" - while (len > 0 && strchr(" \r\n", src[len-1])) len--; - if (len >= size) len = size-1; - strncpy(dest, src, len); - dest[len] = 0; - return dest; -} - -void widescreen_set(char *name, char *val) -{ - cfg_name = name; - cfg_val = val; - - short widescreen; - if (cfg_bool("widescreen", &widescreen) && CFG.widescreen != widescreen) - CFG_Default(widescreen); //reset default when forced an other Screenmode -/* - if (cfg_bool("widescreen", &CFG.widescreen)) //reset default - { - if (CFG.widescreen) { -// snprintf(CFG.covers_path, sizeof(CFG.covers_path), "SD:/wimages/"); - snprintf(CFG.theme_path, sizeof(CFG.theme_path), "SD:/wtheme/"); - } - else - { -// snprintf(CFG.covers_path, sizeof(CFG.covers_path), "SD:/images/"); - snprintf(CFG.theme_path, sizeof(CFG.theme_path), "SD:/theme/"); - } - } -*/ -} - - - -void cfg_set(char *name, char *val) -{ - cfg_name = name; - cfg_val = val; -/* - if (!CFG.widescreen &&(strcmp(name, "images_path") == 0)) { - strcopy(CFG.images_path, val, sizeof(CFG.images_path)); - snprintf(bg_path, sizeof(bg_path), "%sbg.png", CFG.images_path); //reset path - return; - } - - if (CFG.widescreen && strcmp(name, "wimages_path") == 0) { - strcopy(CFG.images_path, val, sizeof(CFG.images_path)); - snprintf(bg_path, sizeof(bg_path), "%swbg.png", CFG.images_path); //reset path - return; - } - - if (cfg_map_auto("video", map_video, &CFG.video)) - return; - - if (cfg_map_auto("language", map_language, &CFG.language)) - return; - - if (cfg_map_auto("layout", map_layout, &CFG.layout)) { - cfg_layout(); - } - - cfg_bool("ocarina", &CFG.ocarina); - cfg_bool("covers", &CFG.covers); - cfg_bool("download", &CFG.download); - cfg_bool("savesettings", &CFG.savesettings); - cfg_bool("installdownload", &CFG.installdownload); - cfg_bool("hidesettingmenu", &CFG.hidesettingmenu); - cfg_map("home", "exit", &CFG.home, CFG_HOME_EXIT); - cfg_map("home", "reboot", &CFG.home, CFG_HOME_REBOOT); - cfg_int("simple", &CFG.simple, 3); -*/ - - // if these are defined in txt file, use them. otherwise use defaults - - if (!CFG.widescreen &&(strcmp(name, "theme_path") == 0)) {// if in 4:3 - strcopy(CFG.theme_path, val, sizeof(CFG.theme_path)); - return; - } - - - if (CFG.widescreen && strcmp(name, "wtheme_path") == 0) { // if in 16:9 - strcopy(CFG.theme_path, val, sizeof(CFG.theme_path)); - return; - } - - if (strcmp(name, "cover_path") == 0) { - strcopy(CFG.covers_path, val, sizeof(CFG.covers_path)); - return; - } - - if (strcmp(name, "disc_path") == 0) { - strcopy(CFG.disc_path, val, sizeof(CFG.disc_path)); - return; - } - if (strcmp(name, "titlestxt_path") == 0) { - strcopy(CFG.titlestxt_path, val, sizeof(CFG.titlestxt_path)); - return; - } - if (strcmp(name, "language_path") == 0) { - strcopy(CFG.language_path, val, sizeof(CFG.language_path)); - return; - } - if (strcmp(name, "update_path") == 0) { - strcopy(CFG.update_path, val, sizeof(CFG.update_path)); - return; - } - if (strcmp(name, "oggload_path") == 0) { - strcopy(CFG.oggload_path, val, sizeof(CFG.oggload_path)); - return; - } - if (strcmp(name, "ogg_path") == 0) { - strcopy(CFG.ogg_path, val, sizeof(CFG.ogg_path)); - return; - } - - cfg_int("parentalcontrol", &CFG.parentalcontrol, 4); - cfg_bool("godmode", &CFG.godmode); - - if (strcmp(name, "unlock_code") == 0) { - strcopy(CFG.unlockCode, val, sizeof(CFG.unlockCode)); - return; - } -} - - - -void theme_set(char *name, char *val) -{ - cfg_name = name; - cfg_val = val; - - if(strcmp(cfg_name, "gamelist_coords") == 0) { - int x,y,w,h; - if (sscanf(val, "%d,%d,%d,%d", &x, &y, &w, &h) == 4) { - THEME.selection_x = x - (x % 4); - THEME.selection_y = y; - THEME.selection_w = w; - THEME.selection_h = h; - } - } - - else if (strcmp(cfg_name, "covers_coords") == 0) { - short x,y; - if (sscanf(val, "%hd,%hd", &x, &y) == 2) { - THEME.cover_x = x - (x % 4); - THEME.cover_y = y; - } - } - - else if (strcmp(cfg_name, "id_coords") == 0) { - short x,y; - if (sscanf(val, "%hd,%hd", &x, &y) == 2) { - THEME.id_x = x - (x % 4); - THEME.id_y = y; - } - } - - else if (strcmp(cfg_name, "hddinfo_coords") == 0) { - short x,y; - if (sscanf(val, "%hd,%hd", &x, &y) == 2) { - THEME.hddInfo_x = x - (x % 4); - THEME.hddInfo_y = y; - } - } - - else if (strcmp(cfg_name, "gamecount_coords") == 0) { - short x,y; - if (sscanf(val, "%hd,%hd", &x, &y) == 2) { - THEME.gameCnt_x = x - (x % 4); - THEME.gameCnt_y = y; - } - } - - else if (strcmp(cfg_name, "region_coords") == 0) { - short x,y; - if (sscanf(val, "%hd,%hd", &x, &y) == 2) { - THEME.region_x = x - (x % 4); - THEME.region_y = y; - } - } - - else if (strcmp(cfg_name, "power_coords") == 0) { - short x,y; - if (sscanf(val, "%hd,%hd", &x, &y) == 2) { - THEME.power_x = x - (x % 4); - THEME.power_y = y; - } - } - - else if (strcmp(cfg_name, "home_coords") == 0) { - short x,y; - if (sscanf(val, "%hd,%hd", &x, &y) == 2) { - THEME.home_x = x - (x % 4); - THEME.home_y = y; - } - } - - else if (strcmp(cfg_name, "setting_coords") == 0) { - short x,y; - if (sscanf(val, "%hd,%hd", &x, &y) == 2) { - THEME.setting_x = x - (x % 4); - THEME.setting_y = y; - } - } - - else if (strcmp(cfg_name, "install_coords") == 0) { - short x,y; - if (sscanf(val, "%hd,%hd", &x, &y) == 2) { - THEME.install_x = x - (x % 4); - THEME.install_y = y; - } - } - - else if (strcmp(cfg_name, "battery1_coords") == 0) { - short x,y; - if (sscanf(val, "%hd,%hd", &x, &y) == 2) { - THEME.battery1_x = x - (x % 4); - THEME.battery1_y = y; - } - } - - else if (strcmp(cfg_name, "battery2_coords") == 0) { - short x,y; - if (sscanf(val, "%hd,%hd", &x, &y) == 2) { - THEME.battery2_x = x - (x % 4); - THEME.battery2_y = y; - } - } - - else if (strcmp(cfg_name, "battery3_coords") == 0) { - short x,y; - if (sscanf(val, "%hd,%hd", &x, &y) == 2) { - THEME.battery3_x = x - (x % 4); - THEME.battery3_y = y; - } - } - - else if (strcmp(cfg_name, "battery4_coords") == 0) { - short x,y; - if (sscanf(val, "%hd,%hd", &x, &y) == 2) { - THEME.battery4_x = x - (x % 4); - THEME.battery4_y = y; - } - } - - else if (strcmp(cfg_name, "clock_coords") == 0) { - short x,y; - if (sscanf(val, "%hd,%hd", &x, &y) == 2) { - THEME.clock_x = x - (x % 4); - THEME.clock_y = y; - } - } - - else if (strcmp(cfg_name, "sdcard_coords") == 0) { - short x,y; - if (sscanf(val, "%hd,%hd", &x, &y) == 2) { - THEME.sdcard_x = x - (x % 4); - THEME.sdcard_y = y; - } - } - - else if (strcmp(cfg_name, "favorite_coords") == 0) { - short x,y; - if (sscanf(val, "%hd,%hd", &x, &y) == 2) { - THEME.favorite_x = x - (x % 4); - THEME.favorite_y = y; - } - } - - else if (strcmp(cfg_name, "abc_coords") == 0) { - short x,y; - if (sscanf(val, "%hd,%hd", &x, &y) == 2) { - THEME.abc_x = x - (x % 4); - THEME.abc_y = y; - } - } - - else if (strcmp(cfg_name, "count_coords") == 0) { - short x,y; - if (sscanf(val, "%hd,%hd", &x, &y) == 2) { - THEME.count_x = x - (x % 4); - THEME.count_y = y; - } - } - - else if (strcmp(cfg_name, "carousel_coords") == 0) { - short x,y; - if (sscanf(val, "%hd,%hd", &x, &y) == 2) { - THEME.carousel_x = x - (x % 4); - THEME.carousel_y = y; - } - } - - else if (strcmp(cfg_name, "grid_coords") == 0) { - short x,y; - if (sscanf(val, "%hd,%hd", &x, &y) == 2) { - THEME.grid_x = x - (x % 4); - THEME.grid_y = y; - } - } - - else if (strcmp(cfg_name, "sortBarOffset") == 0) { - short x; - if (sscanf(val, "%hd", &x) == 1) { - THEME.sortBarOffset = x; - } - } - - else if (strcmp(cfg_name, "info_color") == 0) { - short x,y,z; - if (sscanf(val, "%hd,%hd, %hd", &x, &y, &z) == 3) { - THEME.info_r = x; - THEME.info_g = y; - THEME.info_b = z; - } - } - - else if (strcmp(cfg_name, "gametext_color") == 0) { - short x,y,z; - if (sscanf(val, "%hd,%hd, %hd", &x, &y, &z) == 3) { - THEME.gameText_r = x; - THEME.gameText_g = y; - THEME.gameText_b = z; - } - } - - else if (strcmp(cfg_name, "prompttext_color") == 0) { - short x,y,z; - if (sscanf(val, "%hd,%hd, %hd", &x, &y, &z) == 3) { - THEME.prompttxt_r = x; - THEME.prompttxt_g = y; - THEME.prompttxt_b = z; - } - } - - else if (strcmp(cfg_name, "pagesize") == 0) { - short x; - if (sscanf(val, "%hd", &x) == 1) { - THEME.pagesize = x; - } - } - - else if (strcmp(cfg_name, "batteryUnused") == 0) { - short x; - if (sscanf(val, "%hd", &x) == 1) { - THEME.batteryUnused = x; - } - } - -/* - else if (strcmp(cfg_name, "maxcharacters") == 0) { - short x; - if (sscanf(val, "%hd", &x) == 1) { - THEME.maxcharacters = x; - } - } -*/ - - - - cfg_bool("show_id", &THEME.showID); - cfg_bool("show_tooltip", &THEME.showToolTip); - cfg_bool("show_hddinfo", &THEME.showHDD); - cfg_bool("show_gamecount", &THEME.showGameCnt); - cfg_bool("show_region", &THEME.showRegion); - cfg_bool("show_battery", &THEME.showBattery); - cfg_map_auto("hddinfo_align", map_alignment, &THEME.hddInfoAlign); - cfg_map_auto("gamecount_align", map_alignment, &THEME.gameCntAlign); - cfg_map_auto("clock_align", map_alignment, &THEME.clockAlign); - - /* - else if (strcmp(cfg_name, "entry_lines") == 0) { - int x; - if (sscanf(val, "%d", &x) == 1) { - ENTRIES_PER_PAGE = x; - } - } - - else if (strcmp(cfg_name, "max_characters") == 0) { - int x; - if (sscanf(val, "%d", &x) == 1) { - MAX_CHARACTERS = x; - } - }*/ -} - -void global_cfg_set(char *name, char *val) -{ - cfg_name = name; - cfg_val = val; - - if (strcmp(name, "video") == 0) { - int i; - if (sscanf(val, "%d", &i) == 1) { - Settings.video = i; - } - return; - } - else if (strcmp(name, "vpatch") == 0) { - int i; - if (sscanf(val, "%d", &i) == 1) { - Settings.vpatch =i; - } - return; - } - - else if (strcmp(name, "language") == 0) { - int i; - if (sscanf(val, "%d", &i) == 1) { - Settings.language = i; - } - return; - } - else if (strcmp(name, "ocarina") == 0) { - int i; - if (sscanf(val, "%d", &i) == 1) { - Settings.ocarina = i; - } - return; - } - else if (strcmp(name, "sort") == 0) { - int i; - if (sscanf(val, "%d", &i) == 1) { - Settings.sort = i; - } - return; - } - else if (strcmp(name, "fave") == 0) { - int i; - if (sscanf(val, "%d", &i) == 1) { - Settings.fave = i; - } - return; - } - else if (strcmp(name, "keyset") == 0) { - int i; - if (sscanf(val, "%d", &i) == 1) { - Settings.keyset = i; - } - return; - } - else if (strcmp(name, "hddinfo") == 0) { - int i; - if (sscanf(val, "%d", &i) == 1) { - Settings.hddinfo = i; - } - return; - } - else if (strcmp(name, "sinfo") == 0) { - int i; - if (sscanf(val, "%d", &i) == 1) { - Settings.sinfo = i; - } - return; - } - else if (strcmp(name, "rumble") == 0) { - int i; - if (sscanf(val, "%d", &i) == 1) { - Settings.rumble = i; - } - return; - } - else if (strcmp(name, "volume") == 0) { - int i; - if (sscanf(val, "%d", &i) == 1) { - Settings.volume = i; - } - return; - } - else if (strcmp(name, "tooltips") == 0) { - int i; - if (sscanf(val, "%d", &i) == 1) { - Settings.tooltips = i; - } - return; - } - else if (strcmp(name, "password") == 0) { - strcopy(Settings.unlockCode, val, sizeof(Settings.unlockCode)); - return; - } - else if (strcmp(name, "parentalcontrol") == 0) { - int i; - if (sscanf(val, "%d", &i) == 1) { - Settings.parentalcontrol = i; - } - return; - } - else if (strcmp(name, "cios") == 0) { - int i; - if (sscanf(val, "%d", &i) == 1) { - Settings.cios = i; - } - return; - } - else if (strcmp(name, "xflip") == 0) { - int i; - if (sscanf(val, "%d", &i) == 1) { - Settings.xflip = i; - } - return; - } - else if (strcmp(name, "qboot") == 0) { - int i; - if (sscanf(val, "%d", &i) == 1) { - Settings.qboot = i; - } - return; - } - else if (strcmp(name, "wsprompt") == 0) { - int i; - if (sscanf(val, "%d", &i) == 1) { - Settings.wsprompt = i; - } - return; - } - else if (strcmp(name, "unicodefix") == 0) { - int i; - if (sscanf(val, "%d", &i) == 1) { - Settings.unicodefix =i; - } - return; - } - else if (strcmp(name, "wiilight") == 0) { - int i; - if (sscanf(val, "%d", &i) == 1) { - Settings.wiilight = i; - } - return; - } - else if (strcmp(name, "patchcountrystrings") == 0) { - int i; - if (sscanf(val, "%d", &i) == 1) { - Settings.patchcountrystrings = i; - } - return; - } - else if (strcmp(name, "gameDisplay") == 0) { - int i; - if (sscanf(val, "%d", &i) == 1) { - Settings.gameDisplay = i; - } - return; - } -} - -// split line to part1 delimiter part2 -bool trimsplit(char *line, char *part1, char *part2, char delim, int size) -{ - char *eq = strchr(line, delim); - if (!eq) return false; - trim_n_copy(part1, line, eq-line, size); - trimcopy(part2, eq+1, size); - return true; -} -void cfg_parseline(char *line, void (*set_func)(char*, char*)) -{ - // split name = value - char tmp[200], name[100], val[100]; - strcopy(tmp, line, sizeof(tmp)); - char *eq = strchr(tmp, '='); - if (!eq) return; - *eq = 0; - trimcopy(name, tmp, sizeof(name)); - trimcopy(val, eq+1, sizeof(val)); - //printf("CFG: %s = %s\n", name, val); - set_func(name, val); -} - -void cfg_parsetitleline(char *line, void (*set_func)(char*, char*, u8)) -{ - // split name = value - char tmp[200], name[100], val[100]; - int block = 0; - strcopy(tmp, line, sizeof(tmp)); - char *eq = strchr(tmp, '='); - if (!eq) return; - *eq = 0; - trimcopy(name, tmp, sizeof(name)); - - char *blockpos = strrchr(eq+1, '='); - - if (!blockpos) - trimcopy(val, eq+1, sizeof(val)); - - else - { - *blockpos = 0; - trimcopy(val, eq+1, sizeof(val)); - if (sscanf(blockpos+1, "%d", &block) != 1) - { - block = 0; - } - } - set_func(name, val, block); -} - -bool cfg_parsefile(char *fname, void (*set_func)(char*, char*)) -{ - FILE *f; - char line[200]; - - //printf("opening(%s)\n", fname); - f = fopen(fname, "r"); - if (!f) { - //printf("error opening(%s)\n", fname); - return false; - } - while (fgets(line, sizeof(line), f)) { - // lines starting with # are comments - if (line[0] == '#') continue; - cfg_parseline(line, set_func); - } - fclose(f); - return true; -} - -bool cfg_parsetitlefile(char *fname, void (*set_func)(char*, char*, u8)) -{ - FILE *f; - char line[200]; - - //printf("opening(%s)\n", fname); - f = fopen(fname, "r"); - if (!f) { - //printf("error opening(%s)\n", fname); - return false; - } - - while (fgets(line, sizeof(line), f)) { - // lines starting with # are comments - if (line[0] == '#') continue; - cfg_parsetitleline(line, set_func); - } - fclose(f); - return true; -} - -/* -void cfg_parsearg(int argc, char **argv) -{ - int i; - char *eq; - char pathname[200]; - for (i=1; ivideo = opt_v; - } - if (map_auto("language", opt_name, opt_val, map_language, &opt_l)) { - // valid option, assign - game->language = opt_l; - } - if (strcmp("ocarina", opt_name) == 0) { - if (sscanf(opt_val, "%hd", &opt_c) == 1) { - game->ocarina = opt_c; - } - } - if (strcmp("vipatch", opt_name) == 0) { - if (sscanf(opt_val, "%hd", &opt_c) == 1) { - game->vipatch = opt_c; - } - } - if (strcmp("ios", opt_name) == 0) { - if (sscanf(opt_val, "%hd", &opt_c) == 1) { - game->ios = opt_c; - } - } - if (strcmp("pctrl", opt_name) == 0) { - if (sscanf(opt_val, "%hd", &opt_c) == 1) { - game->parentalcontrol = opt_c; - } - } - - } - // next opt - if (np) p = np + 1; else p = NULL; - } -} -void game_set_num(char *name, char *val) -{ - u8 id[8]; - struct Game_NUM *game; - if (strncmp(name, "game:", 5) != 0) return; - trimcopy((char*)id, name+5, sizeof(id)); - game = cfg_get_game_num(id); - - cfg_set_game_num(game, id); - - - // parse val - // first split options by ; - char opt[100], *p, *np; - p = val; - - while(p) { - np = strchr(p, ';'); - if (np) trim_n_copy(opt, p, np-p, sizeof(opt)); - else trimcopy(opt, p, sizeof(opt)); - - char opt_name[100], opt_val[100]; - if (trimsplit(opt, opt_name, opt_val, ':', sizeof(opt_name))){ - - short opt_c; - if (strcmp("favorite", opt_name) == 0) { - if (sscanf(opt_val, "%hd", &opt_c) == 1) { - game->favorite = opt_c; - } - } - if (strcmp("count", opt_name) == 0) { - if (sscanf(opt_val, "%hd", &opt_c) == 1) { - game->count = opt_c; - } - } - } - - if (np) p = np + 1; else p = NULL; - } -} - -bool cfg_load_games() -{ - return cfg_parsefile("SD:/config/GXGameSettings.cfg", &game_set); -} - -bool cfg_load_game_num() -{ - return cfg_parsefile("SD:/config/GXGameFavorites.cfg", &game_set_num); -} - -bool cfg_save_games() -{ - FILE *f; - int i; - mkdir("SD:/config/", 0777); - f = fopen("SD:/config/GXGameSettings.cfg", "w"); - if (!f) { - printf("Error saving %s\n", "GXGameSettings.cfg"); - sleep(1); - return false; - } - fprintf(f, "# USB Loader settings file\n"); - fprintf(f, "# note: this file is automatically generated\n"); - fclose(f); - /* Closing and reopening because of a write issue we are having right now */ - f = fopen("SD:/config/GXGameSettings.cfg", "w"); - fprintf(f, "# USB Loader settings file\n"); - fprintf(f, "# note: this file is automatically generated\n"); - fprintf(f, "# Num Games: %d\n", num_saved_games); - for (i=0; i>>>>>> .r348*/ -void CFG_LoadGlobal(void) -{ - cfg_parsefile("SD:/config/GXGlobal.cfg", &global_cfg_set); -} - -void CFG_Cleanup(void) -{ - if (cfg_title) - { - free(cfg_title); - cfg_title = NULL; - } -} diff --git a/source/cfg.h b/source/cfg.h deleted file mode 100644 index 09a4419c..00000000 --- a/source/cfg.h +++ /dev/null @@ -1,359 +0,0 @@ -#ifndef _CFG_H_ -#define _CFG_H_ - -#include -#include "disc.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -#define CFG_HOME_REBOOT 0 -#define CFG_HOME_EXIT 1 - -#define CFG_VIDEO_SYS 0 // system default -#define CFG_VIDEO_DEFAULT 1 -#define CFG_VIDEO_GAME 1 // game default -#define CFG_VIDEO_PATCH 2 // patch mode -#define CFG_VIDEO_PAL50 3 // force PAL -#define CFG_VIDEO_PAL60 4 // force PAL60 -#define CFG_VIDEO_NTSC 5 // force NTSC -#define CFG_VIDEO_COUNT 6 - -#define CFG_LANG_CONSOLE 0 -#define CFG_LANG_JAPANESE 1 -#define CFG_LANG_ENGLISH 2 -#define CFG_LANG_GERMAN 3 -#define CFG_LANG_FRENCH 4 -#define CFG_LANG_SPANISH 5 -#define CFG_LANG_ITALIAN 6 -#define CFG_LANG_DUTCH 7 -#define CFG_LANG_S_CHINESE 8 -#define CFG_LANG_T_CHINESE 9 -#define CFG_LANG_KOREAN 10 -#define CFG_LANG_COUNT 11 - -#define CFG_ALIGN_LEFT 0 -#define CFG_ALIGN_RIGHT 1 -#define CFG_ALIGN_CENTRE 2 -#define CFG_ALIGN_TOP 3 -#define CFG_ALIGN_BOTTOM 4 -#define CFG_ALIGN_MIDDLE 5 - -extern char *cfg_path; -//extern char *cfg_images_path; - -struct CFG -{ -// char *background; -// short covers; -// short simple; -// short video; -// short language; -// short ocarina; -// short vipatch; -// short home; -// short download; -// short installdownload; -// short hidesettingmenu; -// short savesettings; - short widescreen; - short parentalcontrol; -// short maxcharacters; - short godmode; - short xflip; - short wsprompt; - char unlockCode[20]; - char covers_path[100]; - char theme_path[100]; - char disc_path[100]; - char titlestxt_path[100]; - char language_path[100]; - char oggload_path[100]; - char ogg_path[150]; - char update_path[150]; - short keyset; -}; - - -struct THEME -{ - int selection_x; - int selection_y; - int selection_w; - int selection_h; - short cover_x; - short cover_y; - short showID; -// short maxcharacters; - short batteryUnused; - short id_x; - short id_y; - short region_x; - short region_y; - short power_x; - short power_y; - short home_x; - short home_y; - short battery1_x; - short battery2_x; - short battery3_x; - short battery4_x; - short battery1_y; - short battery2_y; - short battery3_y; - short battery4_y; - short favorite_x; - short favorite_y; - short abc_x; - short abc_y; - short list_x; - short list_y; - short grid_x; - short grid_y; - short carousel_x; - short carousel_y; - short count_x; - short count_y; - short sortBarOffset; -// short showPower; -// short showHome; - short setting_x; - short setting_y; - short install_x; - short install_y; - short showHDD; - short hddInfoAlign; - short hddInfo_x; - short hddInfo_y; - short showGameCnt; - short gameCntAlign; - short gameCnt_x; - short gameCnt_y; - short showRegion; - short showBattery; - short showToolTip; - //color - short info_r; - short info_g; - short info_b; - short prompttxt_r; - short prompttxt_g; - short prompttxt_b; - short clock_x; - short clock_y; - short clockAlign; - short sdcard_x; - short sdcard_y; - short gameText_r; - short gameText_g; - short gameText_b; - short pagesize; -}; - - - - -extern struct CFG CFG; -extern struct THEME THEME; -extern u8 ocarinaChoice; -extern u16 playcnt; -extern u8 videoChoice; -extern u8 languageChoice; -extern u8 viChoice; -extern u8 iosChoice; -extern u8 faveChoice; -extern u8 parentalcontrolChoice; -extern u8 xflip; -extern u8 qboot; -extern u8 sort; -extern u8 fave; -extern u8 wsprompt; -extern u8 keyset; -extern u8 gameDisplay; - -struct Game_CFG -{ - u8 id[8]; - u8 video; - u8 language; - u8 ocarina; - u8 vipatch; - u8 ios; - u8 parentalcontrol; -}; -struct Game_NUM -{ - u8 id[8]; - u8 favorite; - u16 count; -}; - - -void CFG_Default(int widescreen); // -1 = non forced mode -void CFG_Load(void); -void lang_defualt(); -struct Game_CFG* CFG_get_game_opt(u8 *id); -struct Game_NUM* CFG_get_game_num(u8 *id); -bool CFG_save_game_opt(u8 *id); -bool CFG_save_game_num(u8 *id); -bool CFG_forget_game_opt(u8 *id); -int subfoldercheck(char * directory); - -//Astidof - Begin of modification -enum { - ConsoleLangDefault=0, - jap, - eng, - ger, - fren, - esp, - it, - dut, - schin, - tchin, - kor, - - settings_language_max // always the last entry -}; - -enum { - systemdefault=0, - discdefault, - patch, - pal50, - pal60, - ntsc, - settings_video_max // always the last entry -}; - -enum { - off=0, - on, - settings_off_on_max // always the last entry -}; - -enum { - GameID, - GameRegion, - Both, - Neither, - settings_sinfo_max // always the last entry -}; - -enum { - i249=0, - i222, -}; - -enum { - ios249=0, - ios222, - settings_cios_max // always the last entry -}; - -enum { - hr12=0, - hr24, - Off, - settings_clock_max // always the last entry -}; -enum { - all=0, - pcount, -}; - -enum { - RumbleOff=0, - RumbleOn, - settings_rumble_max // always the last entry -}; - -enum { - TooltipsOff=0, - TooltipsOn, - settings_tooltips_max // always the last entry -}; - -enum { - v10=0, - v20, - v30, - v40, - v50, - v60, - v70, - v80, - v90, - v100, - v0, - settings_volume_max // always the last entry -}; - -enum { - no=0, - yes, - sysmenu, - wtf, - disk3d, - settings_xflip_max // always the last entry -}; -enum { - us=0, - dvorak, - euro, - azerty, - settings_keyset_max // always the last entry -}; -enum { - list, - grid, - carousel, -}; -enum { - scrollDefault, - scrollMarquee, - - settings_scrolleffect_max // always the last entry -}; -struct SSettings { - int video; - int language; - int ocarina; - int vpatch; - int ios; - int sinfo; - int hddinfo; - int rumble; - int xflip; - int volume; - int tooltips; - char unlockCode[20]; - int parentalcontrol; - int cios; - int qboot; - int wsprompt; - int keyset; - int unicodefix; - int sort; - int fave; - int wiilight; - int gameDisplay; - int patchcountrystrings; -}; - -void CFG_LoadGlobal(void); -bool cfg_save_global(void); -//Astidof - End of modification - -char *get_title(struct discHdr *header); -u8 get_block(struct discHdr *header); - -void CFG_Cleanup(void); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/source/data1 b/source/data1 deleted file mode 100644 index 0a7d2210..00000000 Binary files a/source/data1 and /dev/null differ diff --git a/source/disc.c b/source/disc.c deleted file mode 100644 index 527017c0..00000000 --- a/source/disc.c +++ /dev/null @@ -1,390 +0,0 @@ -#include -#include -#include -#include -#include -#include - - -#include "apploader.h" -#include "disc.h" -#include "video.h" -#include "wdvd.h" -#include "fst.h" - -/* Constants */ -#define PTABLE_OFFSET 0x40000 -#define WII_MAGIC 0x5D1C9EA3 - -/* Disc pointers */ -static u32 *buffer = (u32 *)0x93000000; -static u8 *diskid = (u8 *)0x80000000; -static char gameid[8]; - - -void __Disc_SetLowMem(void) -{ - /* Setup low memory */ - *(vu32 *)0x80000030 = 0x00000000; - *(vu32 *)0x80000060 = 0x38A00040; - *(vu32 *)0x800000E4 = 0x80431A80; - *(vu32 *)0x800000EC = 0x81800000; - *(vu32 *)0x800000F4 = 0x817E5480; - *(vu32 *)0x800000F8 = 0x0E7BE2C0; - *(vu32 *)0x800000FC = 0x2B73A840; - - /* Copy disc ID */ - memcpy((void *)0x80003180, (void *)0x80000000, 4); - - /* Flush cache */ - DCFlushRange((void *)0x80000000, 0x3F00); -} - -void __Disc_SetVMode(u8 videoselected) -{ - GXRModeObj *vmode = NULL; - - u32 progressive, tvmode, vmode_reg = 0; - - /* Get video mode configuration */ - progressive = (CONF_GetProgressiveScan() > 0) && VIDEO_HaveComponentCable(); - tvmode = CONF_GetVideo(); - - /* Select video mode register */ - switch (tvmode) { - case CONF_VIDEO_PAL: - vmode_reg = (CONF_GetEuRGB60() > 0) ? 5 : 1; - break; - - case CONF_VIDEO_MPAL: - vmode_reg = 4; - break; - - case CONF_VIDEO_NTSC: - vmode_reg = 0; - break; - } - - switch (videoselected) { - case 0: - - /* Select video mode */ - switch(diskid[3]) { - /* PAL */ - case 'D': - case 'F': - case 'P': - case 'X': - case 'Y': - if (tvmode != CONF_VIDEO_PAL) { - vmode_reg = 5; - vmode = (progressive) ? &TVNtsc480Prog : &TVEurgb60Hz480IntDf; - } - - break; - - /* NTSC or unknown */ - case 'E': - case 'J': - if (tvmode != CONF_VIDEO_NTSC) { - vmode_reg = 0; - vmode = (progressive) ? &TVNtsc480Prog : &TVNtsc480IntDf; - } - - break; - } - break; - - case 1: - vmode_reg = 1; - progressive = (CONF_GetProgressiveScan() > 0) && VIDEO_HaveComponentCable(); - vmode = (progressive) ? &TVEurgb60Hz480Prog : &TVPal528IntDf; - break; - case 2: - vmode_reg = 5; - progressive = (CONF_GetProgressiveScan() > 0) && VIDEO_HaveComponentCable(); - vmode = (progressive) ? &TVEurgb60Hz480Prog : &TVEurgb60Hz480IntDf; - break; - case 3: - vmode_reg = 0; - progressive = (CONF_GetProgressiveScan() > 0) && VIDEO_HaveComponentCable(); - vmode = (progressive) ? &TVNtsc480Prog : &TVNtsc480IntDf; - break; - case 4: - // vmode = VIDEO_GetPreferredMode(NULL); - break; - } - - /* Set video mode register */ - *(vu32 *)0x800000CC = vmode_reg; - - /* Set video mode */ - if (vmode) { - - VIDEO_Configure(vmode); - - /* Setup video */ - VIDEO_SetBlack(FALSE); - VIDEO_Flush(); - VIDEO_WaitVSync(); - - if (vmode->viTVMode & VI_NON_INTERLACE) - VIDEO_WaitVSync(); - } -} - -void __Disc_SetTime(void) -{ - /* Extern */ - extern void settime(u64); - - /* Set proper time */ - settime(secs_to_ticks(time(NULL) - 946684800)); -} - -s32 __Disc_FindPartition(u64 *outbuf) -{ - u64 offset = 0, table_offset = 0; - - u32 cnt, nb_partitions; - s32 ret; - - /* Read partition info */ - ret = WDVD_UnencryptedRead(buffer, 0x20, PTABLE_OFFSET); - if (ret < 0) - return ret; - - /* Get data */ - nb_partitions = buffer[0]; - table_offset = buffer[1] << 2; - - /* Read partition table */ - ret = WDVD_UnencryptedRead(buffer, 0x20, table_offset); - if (ret < 0) - return ret; - - /* Find game partition */ - for (cnt = 0; cnt < nb_partitions; cnt++) { - u32 type = buffer[cnt * 2 + 1]; - - /* Game partition */ - if(!type) - offset = buffer[cnt * 2] << 2; - } - - /* No game partition found */ - if (!offset) - return -1; - - /* Set output buffer */ - *outbuf = offset; - - return 0; -} - - -s32 Disc_Init(void) -{ - /* Init DVD subsystem */ - return WDVD_Init(); -} - -s32 Disc_Open(void) -{ - s32 ret; - - /* Reset drive */ - ret = WDVD_Reset(); - if (ret < 0) - return ret; - - /* Read disc ID */ - return WDVD_ReadDiskId(diskid); -} - -s32 Disc_Wait(void) -{ - u32 cover = 0; - s32 ret; - - /* Wait for disc */ - while (!(cover & 0x2)) { - /* Get cover status */ - ret = WDVD_GetCoverStatus(&cover); - if (ret < 0) - return ret; - } - - return 0; -} - -s32 Disc_SetUSB(u8 *id, int ios222) -{ - /* Set USB mode */ - return WDVD_SetUSBMode(id, ios222); -} - -s32 Disc_ReadHeader(void *outbuf) -{ - /* Read disc header */ - return WDVD_UnencryptedRead(outbuf, sizeof(struct discHdr), 0); -} - -s32 Disc_IsWii(void) -{ - struct discHdr *header = (struct discHdr *)buffer; - - s32 ret; - - /* Read disc header */ - ret = Disc_ReadHeader(header); - if (ret < 0) - return ret; - - /* Check magic word */ - if (header->magic != WII_MAGIC) - return -1; - - return 0; -} - -s32 Disc_BootPartition(u64 offset, u8 videoselected, u8 cheat, u8 vipatch, u8 patchcountrystring) -{ - entry_point p_entry; - - s32 ret; - - /* Open specified partition */ - ret = WDVD_OpenPartition(offset); - if (ret < 0) - return ret; - - /* Run apploader */ - ret = Apploader_Run(&p_entry, cheat, videoselected, vipatch, patchcountrystring); - if (ret < 0) - return ret; - - /* Setup low memory */ - __Disc_SetLowMem(); - - /* Set an appropiate video mode */ - __Disc_SetVMode(videoselected); - - /* Set time */ - __Disc_SetTime(); - - if (cheat == 1) { - /* OCARINA STUFF - FISHEARS*/ - memset(gameid, 0, 8); - memcpy(gameid, (char*)0x80000000, 6); - do_sd_code(gameid); - /* OCARINA STUFF - FISHEARS*/ - } - - /* Disconnect Wiimote */ - WPAD_Flush(0); - WPAD_Disconnect(0); - WPAD_Shutdown(); - - /* Shutdown IOS subsystems */ - SYS_ResetSystem(SYS_SHUTDOWN, 0, 0); - - /* Jump to entry point */ - p_entry(); - - return 0; -} - -s32 Disc_WiiBoot(u8 videoselected, u8 cheat, u8 vipatch, u8 patchcountrystring) -{ - u64 offset; - s32 ret; - - /* Find game partition offset */ - ret = __Disc_FindPartition(&offset); - if (ret < 0) - return ret; - - /* Boot partition */ - return Disc_BootPartition(offset, videoselected, cheat, vipatch, patchcountrystring); -} - -void PatchCountryStrings(void *Address, int Size) -{ - u8 SearchPattern[4] = { 0x00, 0x00, 0x00, 0x00 }; - u8 PatchData[4] = { 0x00, 0x00, 0x00, 0x00 }; - u8 *Addr = (u8*)Address; - - int wiiregion = CONF_GetRegion(); - - switch (wiiregion) - { - case CONF_REGION_JP: - SearchPattern[0] = 0x00; - SearchPattern[1] = 0x4A; // J - SearchPattern[2] = 0x50; // P - break; - case CONF_REGION_EU: - SearchPattern[0] = 0x02; - SearchPattern[1] = 0x45; // E - SearchPattern[2] = 0x55; // U - break; - case CONF_REGION_KR: - SearchPattern[0] = 0x04; - SearchPattern[1] = 0x4B; // K - SearchPattern[2] = 0x52; // R - break; - case CONF_REGION_CN: - SearchPattern[0] = 0x05; - SearchPattern[1] = 0x43; // C - SearchPattern[2] = 0x4E; // N - break; - case CONF_REGION_US: - default: - SearchPattern[0] = 0x01; - SearchPattern[1] = 0x55; // U - SearchPattern[2] = 0x53; // S - } - - switch (diskid[3]) - { - case 'J': - PatchData[1] = 0x4A; // J - PatchData[2] = 0x50; // P - break; - - case 'D': - case 'F': - case 'P': - case 'X': - case 'Y': - PatchData[1] = 0x45; // E - PatchData[2] = 0x55; // U - break; - - case 'E': - default: - PatchData[1] = 0x55; // U - PatchData[2] = 0x53; // S - } - - while (Size >= 4) - { - if (Addr[0] == SearchPattern[0] && Addr[1] == SearchPattern[1] && Addr[2] == SearchPattern[2] && Addr[3] == SearchPattern[3]) - { - //*Addr = PatchData[0]; - Addr += 1; - *Addr = PatchData[1]; - Addr += 1; - *Addr = PatchData[2]; - Addr += 1; - //*Addr = PatchData[3]; - Addr += 1; - Size -= 4; - } else - { - Addr += 4; - Size -= 4; - } - } -} diff --git a/source/disc.h b/source/disc.h deleted file mode 100644 index f52e1e71..00000000 --- a/source/disc.h +++ /dev/null @@ -1,57 +0,0 @@ -#ifndef _DISC_H_ -#define _DISC_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif -/* Disc header structure */ -struct discHdr -{ - /* Game ID */ - u8 id[6]; - - /* Game version */ - u16 version; - - /* Audio streaming */ - u8 streaming; - u8 bufsize; - - /* Padding */ - u8 unused1[14]; - - /* Magic word */ - u32 magic; - - /* Padding */ - u8 unused2[4]; - - /* Game title */ - char title[64]; - - /* Encryption/Hashing */ - u8 encryption; - u8 h3_verify; - - /* Padding */ - u8 unused3[30]; -} ATTRIBUTE_PACKED; - -/* Prototypes */ -s32 Disc_Init(void); -s32 Disc_Open(void); -s32 Disc_Wait(void); -void __Disc_SetLowMem(void); -s32 Disc_SetUSB(u8 *, int ios222); -s32 Disc_ReadHeader(void *); -s32 Disc_IsWii(void); -s32 Disc_BootPartition(u64, u8, u8, u8, u8); -s32 Disc_WiiBoot(u8, u8, u8, u8); -void PatchCountryStrings(void *Address, int Size); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/source/dns.c b/source/dns.c deleted file mode 100644 index 91fc1dea..00000000 --- a/source/dns.c +++ /dev/null @@ -1,122 +0,0 @@ -#include "dns.h" - -/** - * Resolves a domainname to an ip address - * It makes use of net_gethostbyname from libogc, which in turn makes use of a Wii BIOS function - * Just like the net_gethostbyname function this function is NOT threadsafe! - * - * @param char* The domain name to resolve - * @return u32 The ipaddress represented by four bytes inside an u32 (in network order) - */ -u32 getipbyname(char *domain) -{ - //Care should be taken when using net_gethostbyname, - //it returns a static buffer which makes it not threadsafe - //TODO: implement some locking mechanism to make below code atomic - struct hostent *host = net_gethostbyname(domain); - - if(host == NULL) { - return 0; - } - - u32 *ip = (u32*)host->h_addr_list[0]; - return *ip; -} - - - -//Defines how many DNS entries should be cached by getipbynamecached() -#define MAX_DNS_CACHE_ENTRIES 20 - -//The cache is defined as a linked list, -//The last resolved domain name will always be at the front -//This will allow heavily used domainnames to always stay cached -struct dnsentry { - char *domain; - u32 ip; - struct dnsentry *nextnode; -} ; - -static struct dnsentry *firstdnsentry = NULL; -static int dnsentrycount = 0; - -/** - * Performs the same function as getipbyname(), - * except that it will prevent extremely expensive net_gethostbyname() calls by caching the result - */ -u32 getipbynamecached(char *domain) -{ - //Search if this domainname is already cached - struct dnsentry *node = firstdnsentry; - struct dnsentry *previousnode = NULL; - - while(node != NULL) - { - if(strcmp(node->domain, domain) == 0) - { - //DNS node found in the cache, move it to the front of the list - if(previousnode != NULL) - previousnode->nextnode = node->nextnode; - - if(node != firstdnsentry) - node->nextnode = firstdnsentry; - firstdnsentry = node; - - return node->ip; - } - //Go to the next element in the list - previousnode = node; - node = node->nextnode; - } - u32 ip = getipbyname(domain); - - //No cache of this domain could be found, create a cache node and add it to the front of the cache - struct dnsentry *newnode = malloc(sizeof(struct dnsentry)); - if(newnode == NULL) { - return ip; - } - - newnode->ip = ip; - newnode->domain = malloc(strlen(domain)+1); - if(newnode->domain == NULL) - { - free(newnode); - return ip; - } - strcpy(newnode->domain, domain); - - newnode->nextnode = firstdnsentry; - firstdnsentry = newnode; - dnsentrycount++; - - //If the cache grows too big delete the last (and probably least important) node of the list - if(dnsentrycount > MAX_DNS_CACHE_ENTRIES) - { - struct dnsentry *node = firstdnsentry; - struct dnsentry *previousnode = NULL; - - //Fetch the last two elements of the list - while(node->nextnode != NULL) - { - previousnode = node; - node = node->nextnode; - } - - if(node == NULL) - { - printf("Configuration error, MAX_DNS_ENTRIES reached while the list is empty\n"); - exit(1); - } else if(previousnode == NULL) - { - firstdnsentry = NULL; - } else { - previousnode->nextnode = NULL; - } - - free(node->domain); - free(node); - dnsentrycount--; - } - - return newnode->ip; -} diff --git a/source/dns.h b/source/dns.h deleted file mode 100644 index 28617246..00000000 --- a/source/dns.h +++ /dev/null @@ -1,23 +0,0 @@ -#ifndef _DNS_H_ -#define _DNS_H_ - -#include -#include -#include -#include - -#include //usleep - -#ifdef __cplusplus -extern "C" -{ -#endif - -u32 getipbyname(char *domain); -u32 getipbynamecached(char *domain); - -#ifdef __cplusplus -} -#endif - -#endif /* _DNS_H_ */ diff --git a/source/dolloader.c b/source/dolloader.c new file mode 100644 index 00000000..026694d0 --- /dev/null +++ b/source/dolloader.c @@ -0,0 +1,42 @@ +#include +#include +#include +#include +#include +#include +#include + +#include "dolloader.h" + +u32 load_dol_image (void *dolstart, struct __argv *argv) { + u32 i; + dolheader *dolfile; + + if (dolstart) { + dolfile = (dolheader *) dolstart; + for (i = 0; i < 7; i++) { + if ((!dolfile->text_size[i]) || (dolfile->text_start[i] < 0x100)) continue; + VIDEO_WaitVSync(); + ICInvalidateRange ((void *) dolfile->text_start[i],dolfile->text_size[i]); + memmove ((void *) dolfile->text_start[i],dolstart+dolfile->text_pos[i],dolfile->text_size[i]); + } + + for(i = 0; i < 11; i++) { + if ((!dolfile->data_size[i]) || (dolfile->data_start[i] < 0x100)) continue; + VIDEO_WaitVSync(); + memmove ((void *) dolfile->data_start[i],dolstart+dolfile->data_pos[i],dolfile->data_size[i]); + DCFlushRangeNoSync ((void *) dolfile->data_start[i],dolfile->data_size[i]); + } + + memset ((void *) dolfile->bss_start, 0, dolfile->bss_size); + DCFlushRange((void *) dolfile->bss_start, dolfile->bss_size); + + if (argv && argv->argvMagic == ARGV_MAGIC) { + void *new_argv = (void *)(dolfile->entry_point + 8); + memmove(new_argv, argv, sizeof(*argv)); + DCFlushRange(new_argv, sizeof(*argv)); + } + return dolfile->entry_point; + } + return 0; +} diff --git a/source/dolloader.h b/source/dolloader.h new file mode 100644 index 00000000..52c12e46 --- /dev/null +++ b/source/dolloader.h @@ -0,0 +1,39 @@ +#ifndef _DOLLOADER_H_ +#define _DOLLOADER_H_ + +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + +// Apps goes here +#define EXECUTABLE_MEM_ADDR 0x92000000 +/* dol header */ + + +extern void __exception_closeall(); +typedef void (*entrypoint) (void); + + +typedef struct _dolheader { + u32 text_pos[7]; + u32 data_pos[11]; + u32 text_start[7]; + u32 data_start[11]; + u32 text_size[7]; + u32 data_size[11]; + u32 bss_start; + u32 bss_size; + u32 entry_point; +} dolheader; + +u32 load_dol_image (void *dolstart, struct __argv *argv); + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/source/dvd_broadway.c b/source/dvd_broadway.c deleted file mode 100644 index 16e6a9e9..00000000 --- a/source/dvd_broadway.c +++ /dev/null @@ -1,612 +0,0 @@ -/* - * Copyright (C) 2008 Nuke (wiinuke@gmail.com) - * - * this file is part of GeckoOS for USB Gecko - * http://www.usbgecko.com - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#include -#include -#include -#include -#include -#include -#include -#include - -#include "dvd_broadway.h" - -#define DI_CMDCTX_CNT 4 - -#define DVD_DISKIDSIZE 0x20 -#define DVD_DRVINFSIZE 0x20 - -#define IOCTL_DI_INQUIRY 0x12 -#define IOCTL_DI_READID 0x70 -#define IOCTL_DI_READ 0x71 -#define IOCTL_DI_WAITCVRCLOSE 0x79 -#define IOCTL_DI_COVER 0x7A -#define IOCTL_DI_RESETNOTIFY 0x7E -#define IOCTL_DI_RESET 0x8A -#define IOCTL_DI_OPENPART 0x8B -#define IOCTL_DI_CLOSEPART 0x8C -#define IOCTL_DI_UNENCREAD 0x8D -#define IOCTL_DI_ENABLE_DVD 0x8E -#define IOCTL_DI_SEEK 0xAB -#define IOCTL_DI_READ_DVDVIDEO 0xD0 -#define IOCTL_DI_STOPLASER 0xD2 -#define IOCTL_DI_OFFSET 0xD9 -#define IOCTL_DI_REQERROR 0xE0 -#define IOCTL_DI_STOPMOTOR 0xE3 -#define IOCTL_DI_SETOFFBASE 0xF0 -#define IOCTL_DI_GETOFFBASE 0xF1 -#define IOCTL_DI_SETCRYPTMODE 0xF2 -#define IOCTL_DI_GETCRYPTMODE 0xF3 -#define IOCTL_DI_SETDVDROMMODE 0xF4 -#define IOCTL_DI_GETDVDROMMODE 0xF5 - -#define _SHIFTL(v, s, w) \ - ((u32) (((u32)(v) & ((0x01 << (w)) - 1)) << (s))) -#define _SHIFTR(v, s, w) \ - ((u32)(((u32)(v) >> (s)) & ((0x01 << (w)) - 1))) - -struct dicommand -{ - u32 diReg[8]; -}; - -struct dicontext -{ - lwp_node node; - dvdcallbacklow cb; - struct dicommand *cmd; -}; - -static s32 __dvd_fd = -1; -static u32 __dvd_spinupval = 1; -static lwp_queue __di_contextq; -static u32 __dvd_readlength = 0; -static u32 __dvd_cbinprogress = 0; -static u32 __dvd_reqinprogress = 0; -static u32 __dvd_lowinitcalled = 0; -static struct dicommand *__di_commands = NULL; -static struct dicontext __di_contexts[DI_CMDCTX_CNT]; -static u32 __di_regbuffer[0x08] ATTRIBUTE_ALIGN(32); -static u32 __di_regvalcache[0x08] ATTRIBUTE_ALIGN(32); -static u32 __di_lastticketerror[0x08] ATTRIBUTE_ALIGN(32); -static ioctlv __di_iovector[0x08] ATTRIBUTE_ALIGN(32); -static char __di_fs[] ATTRIBUTE_ALIGN(32) = "/dev/di"; - -extern u32 __IPC_ClntInit(); - -static __inline__ lwp_node* __lwp_queue_head(lwp_queue *queue) -{ - return (lwp_node*)queue; -} - -static __inline__ lwp_node* __lwp_queue_tail(lwp_queue *queue) -{ - return (lwp_node*)&queue->perm_null; -} - - -static __inline__ void __lwp_queue_init_empty(lwp_queue *queue) -{ - queue->first = __lwp_queue_tail(queue); - queue->perm_null = NULL; - queue->last = __lwp_queue_head(queue); -} - -static struct dicontext* __dvd_getcontext(dvdcallbacklow cb) -{ - struct dicontext *ctx; - - ctx = (struct dicontext*)__lwp_queue_get(&__di_contextq); - if(ctx!=NULL) ctx->cb = cb; - - return ctx; -} - -static s32 __dvd_iostransactionCB(s32 result,void *usrdata) -{ - struct dicontext *ctx = (struct dicontext*)usrdata; - - __dvd_reqinprogress = 0; - - if(ctx->cb!=NULL) { - __dvd_cbinprogress = 1; - if(result!=0) __dvd_readlength = 0; - ctx->cb(result); - __dvd_cbinprogress = 0; - } - __lwp_queue_append(&__di_contextq,&ctx->node); - - return 0; -} - -static s32 __dvd_ioscoverregisterCB(s32 result,void *usrdata) -{ - struct dicontext *ctx = (struct dicontext*)usrdata; - - __dvd_reqinprogress = 0; - __di_regvalcache[1] = __di_regbuffer[0]; - - if(ctx->cb!=NULL) { - __dvd_cbinprogress = 1; - ctx->cb(result); - __dvd_cbinprogress = 0; - } - __lwp_queue_append(&__di_contextq,&ctx->node); - - return 0; -} - -static s32 __dvd_ioscovercloseCB(s32 result,void *usrdata) -{ - struct dicontext *ctx = (struct dicontext*)usrdata; - - __dvd_reqinprogress = 0; - - if(ctx->cb!=NULL) { - __dvd_cbinprogress = 1; - ctx->cb(result); - __dvd_cbinprogress = 0; - } - __lwp_queue_append(&__di_contextq,&ctx->node); - - return 0; -} - -s32 bwDVD_LowInit() -{ - s32 i,ret = 0; - u32 ipclo,ipchi; - lwp_queue inactives; - struct dicontext *ctx; - - if(__dvd_lowinitcalled==0) { - ret = __IPC_ClntInit(); - if(ret<0) return ret; - - ipclo = (((u32)IPC_GetBufferLo()+0x1f)&~0x1f); - ipchi = (u32)IPC_GetBufferHi(); - if(ipchi>=(ipclo+(sizeof(struct dicommand)*DI_CMDCTX_CNT))) { - __di_commands = (struct dicommand*)ipclo; - IPC_SetBufferLo((void*)(ipclo+(sizeof(struct dicommand)*DI_CMDCTX_CNT))); - - memset(__di_commands,0,(sizeof(struct dicommand)*DI_CMDCTX_CNT)); - - i = 0; - __lwp_queue_init_empty(&__di_contextq); - __lwp_queue_initialize(&inactives,__di_contexts,DI_CMDCTX_CNT,sizeof(struct dicontext)); - while((ctx=(struct dicontext*)__lwp_queue_get(&inactives))!=NULL) { - ctx->cmd = &__di_commands[i]; - ctx->cb = NULL; - __lwp_queue_append(&__di_contextq,&ctx->node); - - i++; - } - } - - ret = IOS_Open(__di_fs,0); - if(ret<0) return ret; - - __dvd_fd = ret; -// __dvd_lowinitcalled = 1; - - // printf("DVD_LowInit(%d)\n",ret); - } - return 0; -} - -s32 bwDVD_LowInquiry(dvddrvinfo *info,dvdcallbacklow cb) -{ - s32 ret; - struct dicontext *ctx; - struct dicommand *cmd; - - __dvd_reqinprogress = 1; - - ctx = __dvd_getcontext(cb); - if(ctx==NULL) return IPC_ENOMEM; - - cmd = ctx->cmd; - cmd->diReg[0] = (IOCTL_DI_INQUIRY<<24); - ret = IOS_IoctlAsync(__dvd_fd,IOCTL_DI_INQUIRY,cmd->diReg,sizeof(struct dicommand),info,DVD_DRVINFSIZE,__dvd_iostransactionCB,ctx); - - return ret; -} - -s32 bwDVD_LowReadID(dvddiskid *diskID,dvdcallbacklow cb) -{ - s32 ret = 0; - struct dicontext *ctx; - struct dicommand *cmd; - -// printf("DVD_LowReadID()\n"); - - __dvd_reqinprogress = 1; - - ctx = __dvd_getcontext(cb); - if(ctx==NULL) return IPC_ENOMEM; - - cmd = ctx->cmd; - cmd->diReg[0] = (IOCTL_DI_READID<<24); - ret = IOS_IoctlAsync(__dvd_fd,IOCTL_DI_READID,cmd->diReg,sizeof(struct dicommand),diskID,DVD_DISKIDSIZE,__dvd_iostransactionCB,ctx); - -// printf("DVD_LowReadID(%d)\n",ret); - return ret; -} - - -s32 bwDVD_LowRead(void *buf,u32 len,u32 offset,dvdcallbacklow cb) -{ - s32 ret; - struct dicontext *ctx; - struct dicommand *cmd; - - if(buf==NULL || ((u32)buf%32)!=0) return -1; - - __dvd_reqinprogress = 1; - __dvd_readlength = len; - - ctx = __dvd_getcontext(cb); - if(ctx==NULL) return IPC_ENOMEM; - - cmd = ctx->cmd; - cmd->diReg[0] = (IOCTL_DI_READ<<24); - cmd->diReg[1] = len; - cmd->diReg[2] = offset; - ret = IOS_IoctlAsync(__dvd_fd,IOCTL_DI_READ,cmd->diReg,sizeof(struct dicommand),buf,len,__dvd_iostransactionCB,ctx); - - return ret; -} - -// never got this function working, probably removed from wii -s32 bwDVD_LowReadVideo(void *buf,u32 len,u32 offset,dvdcallbacklow cb) -{ - s32 ret; - struct dicontext *ctx; - struct dicommand *cmd; - - __dvd_reqinprogress = 1; - __dvd_readlength = len; - - ctx = __dvd_getcontext(cb); - if(ctx==NULL) return IPC_ENOMEM; - - cmd = ctx->cmd; - cmd->diReg[0] = (IOCTL_DI_READ_DVDVIDEO<<24); - cmd->diReg[1] = len; - cmd->diReg[2] = offset; - ret = IOS_IoctlAsync(__dvd_fd,IOCTL_DI_READ_DVDVIDEO,cmd->diReg,sizeof(struct dicommand),buf,len,__dvd_iostransactionCB,ctx); - - return ret; -} - - - -s32 bwDVD_LowStopLaser(dvdcallbacklow cb) -{ - s32 ret; - struct dicontext *ctx; - struct dicommand *cmd; - - __dvd_reqinprogress = 1; - - ctx = __dvd_getcontext(cb); - if(ctx==NULL) return IPC_ENOMEM; - - cmd = ctx->cmd; - cmd->diReg[0] = (IOCTL_DI_STOPLASER<<24); - ret = IOS_IoctlAsync(__dvd_fd,IOCTL_DI_STOPLASER,cmd->diReg,sizeof(struct dicommand),__di_regvalcache,0x20,__dvd_iostransactionCB,ctx); - - return ret; -} - -// never got this function working, probably removed from wii -s32 bwDVD_EnableVideo(dvdcallbacklow cb) -{ - s32 ret; - struct dicontext *ctx; - struct dicommand *cmd; - - __dvd_reqinprogress = 1; - - ctx = __dvd_getcontext(cb); - if(ctx==NULL) return IPC_ENOMEM; - - cmd = ctx->cmd; - cmd->diReg[0] = (IOCTL_DI_ENABLE_DVD<<24); - ret = IOS_IoctlAsync(__dvd_fd,IOCTL_DI_ENABLE_DVD,cmd->diReg,sizeof(struct dicommand),__di_regvalcache,0x20,__dvd_iostransactionCB,ctx); - - return ret; -} - -s32 bwDVD_LowSeek(u32 offset,dvdcallbacklow cb) -{ - s32 ret; - struct dicontext *ctx; - struct dicommand *cmd; - - __dvd_reqinprogress = 1; - - ctx = __dvd_getcontext(cb); - if(ctx==NULL) return IPC_ENOMEM; - - cmd = ctx->cmd; - cmd->diReg[0] = (IOCTL_DI_SEEK<<24); - cmd->diReg[1] = offset; - ret = IOS_IoctlAsync(__dvd_fd,IOCTL_DI_SEEK,cmd->diReg,sizeof(struct dicommand),NULL,0,__dvd_iostransactionCB,ctx); - - return ret; -} - -s32 bwDVD_LowOffset(u64 offset,dvdcallbacklow cb) -{ - s32 ret; - u32 *off = (u32*)(void*)(&offset); - struct dicontext *ctx; - struct dicommand *cmd; - - __dvd_reqinprogress = 1; - - ctx = __dvd_getcontext(cb); - if(ctx==NULL) return IPC_ENOMEM; - - cmd = ctx->cmd; - cmd->diReg[0] = (IOCTL_DI_OFFSET<<24); - cmd->diReg[1] = 0; - if(off[0]) cmd->diReg[1] = 1; - cmd->diReg[2] = off[1]; - ret = IOS_IoctlAsync(__dvd_fd,IOCTL_DI_OFFSET,cmd->diReg,sizeof(struct dicommand),__di_regvalcache,0x20,__dvd_iostransactionCB,ctx); - - return ret; -} - -s32 bwDVD_LowPrepareCoverRegister(dvdcallbacklow cb) -{ - s32 ret; - struct dicontext *ctx; - struct dicommand *cmd; - - __dvd_reqinprogress = 1; - - ctx = __dvd_getcontext(cb); - if(ctx==NULL) return IPC_ENOMEM; - - cmd = ctx->cmd; - cmd->diReg[0] = (IOCTL_DI_COVER<<24); - ret = IOS_IoctlAsync(__dvd_fd,IOCTL_DI_COVER,cmd->diReg,sizeof(struct dicommand),__di_regbuffer,0x20,__dvd_ioscoverregisterCB,ctx); - - return ret; -} - -s32 bwDVD_LowOpenPartition(u32 offset,void *eticket,u32 certin_len,void *certificate_in,void *certificate_out,dvdcallbacklow cb) -{ - s32 ret; - struct dicontext *ctx; - struct dicommand *cmd; - - if(eticket!=NULL && ((u32)eticket%32)!=0) return -1; - if(certificate_in!=NULL && ((u32)certificate_in%32)!=0) return -1; - if(certificate_out!=NULL && ((u32)certificate_out%32)!=0) return -1; - - __dvd_reqinprogress = 1; - - ctx = __dvd_getcontext(cb); - if(ctx==NULL) return IPC_ENOMEM; - - cmd = ctx->cmd; - cmd->diReg[0] = (IOCTL_DI_OPENPART<<24); - cmd->diReg[1] = offset; - - __di_iovector[0].data = cmd; - __di_iovector[0].len = sizeof(struct dicommand); - - __di_iovector[1].data = eticket; - if(eticket==NULL) __di_iovector[1].len = 0; - else __di_iovector[1].len = 676; - - __di_iovector[2].data = certificate_in; - if(certificate_in==NULL) __di_iovector[2].len = 0; - else __di_iovector[2].len = certin_len; - - __di_iovector[3].data = certificate_out; - __di_iovector[3].len = 18916; - __di_iovector[4].data = __di_lastticketerror; - __di_iovector[4].len = 0x20; - ret = IOS_IoctlvAsync(__dvd_fd,IOCTL_DI_OPENPART,3,2,__di_iovector,__dvd_iostransactionCB,ctx); - - return ret; -} - -s32 bwDVD_LowClosePartition(dvdcallbacklow cb) -{ - s32 ret; - struct dicontext *ctx; - struct dicommand *cmd; - - __dvd_reqinprogress = 1; - - ctx = __dvd_getcontext(cb); - if(ctx==NULL) return IPC_ENOMEM; - - cmd = ctx->cmd; - cmd->diReg[0] = (IOCTL_DI_CLOSEPART<<24); - ret = IOS_IoctlAsync(__dvd_fd,IOCTL_DI_CLOSEPART,cmd->diReg,sizeof(struct dicommand),NULL,0,__dvd_iostransactionCB,ctx); - - return ret; -} - -s32 bwDVD_LowUnencryptedRead(void *buf,u32 len,u32 offset,dvdcallbacklow cb) -{ - s32 ret; - struct dicontext *ctx; - struct dicommand *cmd; - - __dvd_reqinprogress = 1; - __dvd_readlength = len; - - ctx = __dvd_getcontext(cb); - if(ctx==NULL) return IPC_ENOMEM; - - cmd = ctx->cmd; - cmd->diReg[0] = (IOCTL_DI_UNENCREAD<<24); - cmd->diReg[1] = len; - cmd->diReg[2] = offset; - ret = IOS_IoctlAsync(__dvd_fd,IOCTL_DI_UNENCREAD,cmd->diReg,sizeof(struct dicommand),buf,len,__dvd_iostransactionCB,ctx); - - return ret; -} - -s32 bwDVD_LowWaitCoverClose(dvdcallbacklow cb) -{ - s32 ret; - struct dicontext *ctx; - struct dicommand *cmd; - - __dvd_reqinprogress = 1; - - ctx = __dvd_getcontext(cb); - if(ctx==NULL) return IPC_ENOMEM; - - cmd = ctx->cmd; - cmd->diReg[0] = (IOCTL_DI_WAITCVRCLOSE<<24); - ret = IOS_IoctlAsync(__dvd_fd,IOCTL_DI_WAITCVRCLOSE,cmd->diReg,sizeof(struct dicommand),NULL,0,__dvd_ioscovercloseCB,ctx); - - return ret; -} - -s32 bwDVD_LowResetNotify() -{ - s32 ret; - struct dicontext *ctx; - struct dicommand *cmd; - - if(__dvd_cbinprogress==1) return -1; - - ctx = __dvd_getcontext(NULL); - if(ctx==NULL) return IPC_ENOMEM; - - cmd = ctx->cmd; - cmd->diReg[0] = (IOCTL_DI_RESETNOTIFY<<24); - ret = IOS_Ioctl(__dvd_fd,IOCTL_DI_RESETNOTIFY,cmd->diReg,sizeof(struct dicommand),NULL,0); - - return ret; -} - -s32 bwDVD_LowReset(dvdcallbacklow cb) -{ - s32 ret; - struct dicontext *ctx; - struct dicommand *cmd; - -// printf("DVD_LowReset()\n"); - __dvd_reqinprogress = 1; - - ctx = __dvd_getcontext(cb); - if(ctx==NULL) return IPC_ENOMEM; - - cmd = ctx->cmd; - cmd->diReg[0] = (IOCTL_DI_RESET<<24); - cmd->diReg[1] = __dvd_spinupval; - ret = IOS_IoctlAsync(__dvd_fd,IOCTL_DI_RESET,cmd->diReg,sizeof(struct dicommand),NULL,0,__dvd_iostransactionCB,ctx); - -// printf("DVD_LowReset(%d)\n",ret); - return ret; -} - -s32 bwDVD_LowStopMotor(u8 stop1,u8 stop2,dvdcallbacklow cb) -{ - s32 ret; - struct dicontext *ctx; - struct dicommand *cmd; - - __dvd_reqinprogress = 1; - - ctx = __dvd_getcontext(cb); - if(ctx==NULL) return IPC_ENOMEM; - - cmd = ctx->cmd; - cmd->diReg[0] = (IOCTL_DI_STOPMOTOR<<24); - cmd->diReg[1] = (stop1<<24); - cmd->diReg[2] = (stop2<<24); - ret = IOS_IoctlAsync(__dvd_fd,IOCTL_DI_STOPMOTOR,cmd->diReg,sizeof(struct dicommand),__di_regvalcache,0x20,__dvd_iostransactionCB,ctx); - - return ret; - -} - -s32 bwDVD_LowRequestError(dvdcallbacklow cb) -{ - s32 ret; - struct dicontext *ctx; - struct dicommand *cmd; - - __dvd_reqinprogress = 1; - - ctx = __dvd_getcontext(cb); - if(ctx==NULL) return IPC_ENOMEM; - - cmd = ctx->cmd; - cmd->diReg[0] = (IOCTL_DI_REQERROR<<24); - ret = IOS_IoctlAsync(__dvd_fd,IOCTL_DI_REQERROR,cmd->diReg,sizeof(struct dicommand),__di_regvalcache,0x20,__dvd_iostransactionCB,ctx); - - return ret; -} - - -s32 bwDVD_SetDecryption(s32 mode, dvdcallbacklow cb) -{ - s32 ret; - struct dicontext *ctx; - struct dicommand *cmd; - - __dvd_reqinprogress = 1; - - ctx = __dvd_getcontext(cb); - if(ctx==NULL) return IPC_ENOMEM; - - cmd = ctx->cmd; - cmd->diReg[0] = (IOCTL_DI_SETCRYPTMODE<<24); - cmd->diReg[1] = mode; - ret = IOS_IoctlAsync(__dvd_fd,IOCTL_DI_SETCRYPTMODE,cmd->diReg,sizeof(struct dicommand),__di_regvalcache,0x20,__dvd_iostransactionCB,ctx); - - return ret; - -} - -s32 bwDVD_SetOffset(u32 offset, dvdcallbacklow cb) -{ - s32 ret; - struct dicontext *ctx; - struct dicommand *cmd; - - __dvd_reqinprogress = 1; - - ctx = __dvd_getcontext(cb); - if(ctx==NULL) return IPC_ENOMEM; - - cmd = ctx->cmd; - cmd->diReg[0] = (IOCTL_DI_SETOFFBASE<<24); - cmd->diReg[1] = offset; - ret = IOS_IoctlAsync(__dvd_fd,IOCTL_DI_SETOFFBASE,cmd->diReg,sizeof(struct dicommand),__di_regvalcache,0x20,__dvd_iostransactionCB,ctx); - - return ret; - -} diff --git a/source/dvd_broadway.h b/source/dvd_broadway.h deleted file mode 100644 index c0ca133b..00000000 --- a/source/dvd_broadway.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (C) 2008 Nuke (wiinuke@gmail.com) - * - * this file is part of GeckoOS for USB Gecko - * http://www.usbgecko.com - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#ifndef __DVD_BROADWAY_H__ -#define __DVD_BROADWAY_H__ - -#include -#include -#include - -#ifdef __cplusplus - extern "C" { -#endif /* __cplusplus */ - -typedef void (*dvdcallbacklow)(s32 result); - -s32 bwDVD_LowInit(); -s32 bwDVD_LowInquiry(dvddrvinfo *info,dvdcallbacklow cb); -s32 bwDVD_LowReadID(dvddiskid *diskID,dvdcallbacklow cb); -s32 bwDVD_LowClosePartition(dvdcallbacklow cb); -s32 bwDVD_LowOpenPartition(u32 offset,void *eticket,u32 certin_len,void *certificate_in,void *certificate_out,dvdcallbacklow cb); -s32 bwDVD_LowUnencryptedRead(void *buf,u32 len,u32 offset,dvdcallbacklow cb); -s32 bwDVD_LowReset(dvdcallbacklow cb); -s32 bwDVD_LowWaitCoverClose(dvdcallbacklow cb); -s32 bwDVD_LowRead(void *buf,u32 len,u32 offset,dvdcallbacklow cb); -s32 bwDVD_EnableVideo(dvdcallbacklow cb); -s32 bwDVD_LowReadVideo(void *buf,u32 len,u32 offset,dvdcallbacklow cb); -s32 bwDVD_SetDecryption(s32 mode, dvdcallbacklow cb); -s32 bwDVD_SetOffset(u32 offset, dvdcallbacklow cb); - -#ifdef __cplusplus - } -#endif /* __cplusplus */ - -#endif diff --git a/source/elf_abi.h b/source/elf_abi.h new file mode 100644 index 00000000..c9e705ef --- /dev/null +++ b/source/elf_abi.h @@ -0,0 +1,594 @@ +/* + * Copyright (c) 1995, 1996, 2001, 2002 + * Erik Theisen. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This is the ELF ABI header file + * formerly known as "elf_abi.h". + */ + +#ifndef _ELF_ABI_H +#define _ELF_ABI_H + +#include + +/* + * This version doesn't work for 64-bit ABIs - Erik. + */ + +/* + * These typedefs need to be handled better. + */ +typedef u32 Elf32_Addr; /* Unsigned program address */ +typedef u32 Elf32_Off; /* Unsigned file offset */ +typedef s32 Elf32_Sword; /* Signed large integer */ +typedef u32 Elf32_Word; /* Unsigned large integer */ +typedef u16 Elf32_Half; /* Unsigned medium integer */ + +/* e_ident[] identification indexes */ +#define EI_MAG0 0 /* file ID */ +#define EI_MAG1 1 /* file ID */ +#define EI_MAG2 2 /* file ID */ +#define EI_MAG3 3 /* file ID */ +#define EI_CLASS 4 /* file class */ +#define EI_DATA 5 /* data encoding */ +#define EI_VERSION 6 /* ELF header version */ +#define EI_OSABI 7 /* OS/ABI specific ELF extensions */ +#define EI_ABIVERSION 8 /* ABI target version */ +#define EI_PAD 9 /* start of pad bytes */ +#define EI_NIDENT 16 /* Size of e_ident[] */ + +/* e_ident[] magic number */ +#define ELFMAG0 0x7f /* e_ident[EI_MAG0] */ +#define ELFMAG1 'E' /* e_ident[EI_MAG1] */ +#define ELFMAG2 'L' /* e_ident[EI_MAG2] */ +#define ELFMAG3 'F' /* e_ident[EI_MAG3] */ +#define ELFMAG "\177ELF" /* magic */ +#define SELFMAG 4 /* size of magic */ + +/* e_ident[] file class */ +#define ELFCLASSNONE 0 /* invalid */ +#define ELFCLASS32 1 /* 32-bit objs */ +#define ELFCLASS64 2 /* 64-bit objs */ +#define ELFCLASSNUM 3 /* number of classes */ + +/* e_ident[] data encoding */ +#define ELFDATANONE 0 /* invalid */ +#define ELFDATA2LSB 1 /* Little-Endian */ +#define ELFDATA2MSB 2 /* Big-Endian */ +#define ELFDATANUM 3 /* number of data encode defines */ + +/* e_ident[] OS/ABI specific ELF extensions */ +#define ELFOSABI_NONE 0 /* No extension specified */ +#define ELFOSABI_HPUX 1 /* Hewlett-Packard HP-UX */ +#define ELFOSABI_NETBSD 2 /* NetBSD */ +#define ELFOSABI_LINUX 3 /* Linux */ +#define ELFOSABI_SOLARIS 6 /* Sun Solaris */ +#define ELFOSABI_AIX 7 /* AIX */ +#define ELFOSABI_IRIX 8 /* IRIX */ +#define ELFOSABI_FREEBSD 9 /* FreeBSD */ +#define ELFOSABI_TRU64 10 /* Compaq TRU64 UNIX */ +#define ELFOSABI_MODESTO 11 /* Novell Modesto */ +#define ELFOSABI_OPENBSD 12 /* OpenBSD */ +/* 64-255 Architecture-specific value range */ + +/* e_ident[] ABI Version */ +#define ELFABIVERSION 0 + +/* e_ident */ +#define IS_ELF(ehdr) ((ehdr).e_ident[EI_MAG0] == ELFMAG0 && \ + (ehdr).e_ident[EI_MAG1] == ELFMAG1 && \ + (ehdr).e_ident[EI_MAG2] == ELFMAG2 && \ + (ehdr).e_ident[EI_MAG3] == ELFMAG3) + +/* ELF Header */ +typedef struct elfhdr{ + unsigned char e_ident[EI_NIDENT]; /* ELF Identification */ + Elf32_Half e_type; /* object file type */ + Elf32_Half e_machine; /* machine */ + Elf32_Word e_version; /* object file version */ + Elf32_Addr e_entry; /* virtual entry point */ + Elf32_Off e_phoff; /* program header table offset */ + Elf32_Off e_shoff; /* section header table offset */ + Elf32_Word e_flags; /* processor-specific flags */ + Elf32_Half e_ehsize; /* ELF header size */ + Elf32_Half e_phentsize; /* program header entry size */ + Elf32_Half e_phnum; /* number of program header entries */ + Elf32_Half e_shentsize; /* section header entry size */ + Elf32_Half e_shnum; /* number of section header entries */ + Elf32_Half e_shstrndx; /* section header table's "section + header string table" entry offset */ +} Elf32_Ehdr; + +/* e_type */ +#define ET_NONE 0 /* No file type */ +#define ET_REL 1 /* relocatable file */ +#define ET_EXEC 2 /* executable file */ +#define ET_DYN 3 /* shared object file */ +#define ET_CORE 4 /* core file */ +#define ET_NUM 5 /* number of types */ +#define ET_LOOS 0xfe00 /* reserved range for operating */ +#define ET_HIOS 0xfeff /* system specific e_type */ +#define ET_LOPROC 0xff00 /* reserved range for processor */ +#define ET_HIPROC 0xffff /* specific e_type */ + +/* e_machine */ +#define EM_NONE 0 /* No Machine */ +#define EM_M32 1 /* AT&T WE 32100 */ +#define EM_SPARC 2 /* SPARC */ +#define EM_386 3 /* Intel 80386 */ +#define EM_68K 4 /* Motorola 68000 */ +#define EM_88K 5 /* Motorola 88000 */ +#if 0 +#define EM_486 6 /* RESERVED - was Intel 80486 */ +#endif +#define EM_860 7 /* Intel 80860 */ +#define EM_MIPS 8 /* MIPS R3000 Big-Endian only */ +#define EM_S370 9 /* IBM System/370 Processor */ +#define EM_MIPS_RS4_BE 10 /* MIPS R4000 Big-Endian */ +#if 0 +#define EM_SPARC64 11 /* RESERVED - was SPARC v9 + 64-bit unoffical */ +#endif +/* RESERVED 11-14 for future use */ +#define EM_PARISC 15 /* HPPA */ +/* RESERVED 16 for future use */ +#define EM_VPP500 17 /* Fujitsu VPP500 */ +#define EM_SPARC32PLUS 18 /* Enhanced instruction set SPARC */ +#define EM_960 19 /* Intel 80960 */ +#define EM_PPC 20 /* PowerPC */ +#define EM_PPC64 21 /* 64-bit PowerPC */ +#define EM_S390 22 /* IBM System/390 Processor */ +/* RESERVED 23-35 for future use */ +#define EM_V800 36 /* NEC V800 */ +#define EM_FR20 37 /* Fujitsu FR20 */ +#define EM_RH32 38 /* TRW RH-32 */ +#define EM_RCE 39 /* Motorola RCE */ +#define EM_ARM 40 /* Advanced Risc Machines ARM */ +#define EM_ALPHA 41 /* Digital Alpha */ +#define EM_SH 42 /* Hitachi SH */ +#define EM_SPARCV9 43 /* SPARC Version 9 */ +#define EM_TRICORE 44 /* Siemens TriCore embedded processor */ +#define EM_ARC 45 /* Argonaut RISC Core */ +#define EM_H8_300 46 /* Hitachi H8/300 */ +#define EM_H8_300H 47 /* Hitachi H8/300H */ +#define EM_H8S 48 /* Hitachi H8S */ +#define EM_H8_500 49 /* Hitachi H8/500 */ +#define EM_IA_64 50 /* Intel Merced */ +#define EM_MIPS_X 51 /* Stanford MIPS-X */ +#define EM_COLDFIRE 52 /* Motorola Coldfire */ +#define EM_68HC12 53 /* Motorola M68HC12 */ +#define EM_MMA 54 /* Fujitsu MMA Multimedia Accelerator*/ +#define EM_PCP 55 /* Siemens PCP */ +#define EM_NCPU 56 /* Sony nCPU embeeded RISC */ +#define EM_NDR1 57 /* Denso NDR1 microprocessor */ +#define EM_STARCORE 58 /* Motorola Start*Core processor */ +#define EM_ME16 59 /* Toyota ME16 processor */ +#define EM_ST100 60 /* STMicroelectronic ST100 processor */ +#define EM_TINYJ 61 /* Advanced Logic Corp. Tinyj emb.fam*/ +#define EM_X86_64 62 /* AMD x86-64 */ +#define EM_PDSP 63 /* Sony DSP Processor */ +/* RESERVED 64,65 for future use */ +#define EM_FX66 66 /* Siemens FX66 microcontroller */ +#define EM_ST9PLUS 67 /* STMicroelectronics ST9+ 8/16 mc */ +#define EM_ST7 68 /* STmicroelectronics ST7 8 bit mc */ +#define EM_68HC16 69 /* Motorola MC68HC16 microcontroller */ +#define EM_68HC11 70 /* Motorola MC68HC11 microcontroller */ +#define EM_68HC08 71 /* Motorola MC68HC08 microcontroller */ +#define EM_68HC05 72 /* Motorola MC68HC05 microcontroller */ +#define EM_SVX 73 /* Silicon Graphics SVx */ +#define EM_ST19 74 /* STMicroelectronics ST19 8 bit mc */ +#define EM_VAX 75 /* Digital VAX */ +#define EM_CHRIS 76 /* Axis Communications embedded proc. */ +#define EM_JAVELIN 77 /* Infineon Technologies emb. proc. */ +#define EM_FIREPATH 78 /* Element 14 64-bit DSP Processor */ +#define EM_ZSP 79 /* LSI Logic 16-bit DSP Processor */ +#define EM_MMIX 80 /* Donald Knuth's edu 64-bit proc. */ +#define EM_HUANY 81 /* Harvard University mach-indep objs */ +#define EM_PRISM 82 /* SiTera Prism */ +#define EM_AVR 83 /* Atmel AVR 8-bit microcontroller */ +#define EM_FR30 84 /* Fujitsu FR30 */ +#define EM_D10V 85 /* Mitsubishi DV10V */ +#define EM_D30V 86 /* Mitsubishi DV30V */ +#define EM_V850 87 /* NEC v850 */ +#define EM_M32R 88 /* Mitsubishi M32R */ +#define EM_MN10300 89 /* Matsushita MN10200 */ +#define EM_MN10200 90 /* Matsushita MN10200 */ +#define EM_PJ 91 /* picoJava */ +#define EM_NUM 92 /* number of machine types */ + +/* Version */ +#define EV_NONE 0 /* Invalid */ +#define EV_CURRENT 1 /* Current */ +#define EV_NUM 2 /* number of versions */ + +/* Section Header */ +typedef struct { + Elf32_Word sh_name; /* name - index into section header + string table section */ + Elf32_Word sh_type; /* type */ + Elf32_Word sh_flags; /* flags */ + Elf32_Addr sh_addr; /* address */ + Elf32_Off sh_offset; /* file offset */ + Elf32_Word sh_size; /* section size */ + Elf32_Word sh_link; /* section header table index link */ + Elf32_Word sh_info; /* extra information */ + Elf32_Word sh_addralign; /* address alignment */ + Elf32_Word sh_entsize; /* section entry size */ +} Elf32_Shdr; + +/* Special Section Indexes */ +#define SHN_UNDEF 0 /* undefined */ +#define SHN_LORESERVE 0xff00 /* lower bounds of reserved indexes */ +#define SHN_LOPROC 0xff00 /* reserved range for processor */ +#define SHN_HIPROC 0xff1f /* specific section indexes */ +#define SHN_LOOS 0xff20 /* reserved range for operating */ +#define SHN_HIOS 0xff3f /* specific semantics */ +#define SHN_ABS 0xfff1 /* absolute value */ +#define SHN_COMMON 0xfff2 /* common symbol */ +#define SHN_XINDEX 0xffff /* Index is an extra table */ +#define SHN_HIRESERVE 0xffff /* upper bounds of reserved indexes */ + +/* sh_type */ +#define SHT_NULL 0 /* inactive */ +#define SHT_PROGBITS 1 /* program defined information */ +#define SHT_SYMTAB 2 /* symbol table section */ +#define SHT_STRTAB 3 /* string table section */ +#define SHT_RELA 4 /* relocation section with addends*/ +#define SHT_HASH 5 /* symbol hash table section */ +#define SHT_DYNAMIC 6 /* dynamic section */ +#define SHT_NOTE 7 /* note section */ +#define SHT_NOBITS 8 /* no space section */ +#define SHT_REL 9 /* relation section without addends */ +#define SHT_SHLIB 10 /* reserved - purpose unknown */ +#define SHT_DYNSYM 11 /* dynamic symbol table section */ +#define SHT_INIT_ARRAY 14 /* Array of constructors */ +#define SHT_FINI_ARRAY 15 /* Array of destructors */ +#define SHT_PREINIT_ARRAY 16 /* Array of pre-constructors */ +#define SHT_GROUP 17 /* Section group */ +#define SHT_SYMTAB_SHNDX 18 /* Extended section indeces */ +#define SHT_NUM 19 /* number of section types */ +#define SHT_LOOS 0x60000000 /* Start OS-specific */ +#define SHT_HIOS 0x6fffffff /* End OS-specific */ +#define SHT_LOPROC 0x70000000 /* reserved range for processor */ +#define SHT_HIPROC 0x7fffffff /* specific section header types */ +#define SHT_LOUSER 0x80000000 /* reserved range for application */ +#define SHT_HIUSER 0xffffffff /* specific indexes */ + +/* Section names */ +#define ELF_BSS ".bss" /* uninitialized data */ +#define ELF_COMMENT ".comment" /* version control information */ +#define ELF_DATA ".data" /* initialized data */ +#define ELF_DATA1 ".data1" /* initialized data */ +#define ELF_DEBUG ".debug" /* debug */ +#define ELF_DYNAMIC ".dynamic" /* dynamic linking information */ +#define ELF_DYNSTR ".dynstr" /* dynamic string table */ +#define ELF_DYNSYM ".dynsym" /* dynamic symbol table */ +#define ELF_FINI ".fini" /* termination code */ +#define ELF_FINI_ARRAY ".fini_array" /* Array of destructors */ +#define ELF_GOT ".got" /* global offset table */ +#define ELF_HASH ".hash" /* symbol hash table */ +#define ELF_INIT ".init" /* initialization code */ +#define ELF_INIT_ARRAY ".init_array" /* Array of constuctors */ +#define ELF_INTERP ".interp" /* Pathname of program interpreter */ +#define ELF_LINE ".line" /* Symbolic line numnber information */ +#define ELF_NOTE ".note" /* Contains note section */ +#define ELF_PLT ".plt" /* Procedure linkage table */ +#define ELF_PREINIT_ARRAY ".preinit_array" /* Array of pre-constructors */ +#define ELF_REL_DATA ".rel.data" /* relocation data */ +#define ELF_REL_FINI ".rel.fini" /* relocation termination code */ +#define ELF_REL_INIT ".rel.init" /* relocation initialization code */ +#define ELF_REL_DYN ".rel.dyn" /* relocaltion dynamic link info */ +#define ELF_REL_RODATA ".rel.rodata" /* relocation read-only data */ +#define ELF_REL_TEXT ".rel.text" /* relocation code */ +#define ELF_RODATA ".rodata" /* read-only data */ +#define ELF_RODATA1 ".rodata1" /* read-only data */ +#define ELF_SHSTRTAB ".shstrtab" /* section header string table */ +#define ELF_STRTAB ".strtab" /* string table */ +#define ELF_SYMTAB ".symtab" /* symbol table */ +#define ELF_SYMTAB_SHNDX ".symtab_shndx"/* symbol table section index */ +#define ELF_TBSS ".tbss" /* thread local uninit data */ +#define ELF_TDATA ".tdata" /* thread local init data */ +#define ELF_TDATA1 ".tdata1" /* thread local init data */ +#define ELF_TEXT ".text" /* code */ + +/* Section Attribute Flags - sh_flags */ +#define SHF_WRITE 0x1 /* Writable */ +#define SHF_ALLOC 0x2 /* occupies memory */ +#define SHF_EXECINSTR 0x4 /* executable */ +#define SHF_MERGE 0x10 /* Might be merged */ +#define SHF_STRINGS 0x20 /* Contains NULL terminated strings */ +#define SHF_INFO_LINK 0x40 /* sh_info contains SHT index */ +#define SHF_LINK_ORDER 0x80 /* Preserve order after combining*/ +#define SHF_OS_NONCONFORMING 0x100 /* Non-standard OS specific handling */ +#define SHF_GROUP 0x200 /* Member of section group */ +#define SHF_TLS 0x400 /* Thread local storage */ +#define SHF_MASKOS 0x0ff00000 /* OS specific */ +#define SHF_MASKPROC 0xf0000000 /* reserved bits for processor */ + /* specific section attributes */ + +/* Section Group Flags */ +#define GRP_COMDAT 0x1 /* COMDAT group */ +#define GRP_MASKOS 0x0ff00000 /* Mask OS specific flags */ +#define GRP_MASKPROC 0xf0000000 /* Mask processor specific flags */ + +/* Symbol Table Entry */ +typedef struct elf32_sym { + Elf32_Word st_name; /* name - index into string table */ + Elf32_Addr st_value; /* symbol value */ + Elf32_Word st_size; /* symbol size */ + unsigned char st_info; /* type and binding */ + unsigned char st_other; /* 0 - no defined meaning */ + Elf32_Half st_shndx; /* section header index */ +} Elf32_Sym; + +/* Symbol table index */ +#define STN_UNDEF 0 /* undefined */ + +/* Extract symbol info - st_info */ +#define ELF32_ST_BIND(x) ((x) >> 4) +#define ELF32_ST_TYPE(x) (((unsigned int) x) & 0xf) +#define ELF32_ST_INFO(b,t) (((b) << 4) + ((t) & 0xf)) +#define ELF32_ST_VISIBILITY(x) ((x) & 0x3) + +/* Symbol Binding - ELF32_ST_BIND - st_info */ +#define STB_LOCAL 0 /* Local symbol */ +#define STB_GLOBAL 1 /* Global symbol */ +#define STB_WEAK 2 /* like global - lower precedence */ +#define STB_NUM 3 /* number of symbol bindings */ +#define STB_LOOS 10 /* reserved range for operating */ +#define STB_HIOS 12 /* system specific symbol bindings */ +#define STB_LOPROC 13 /* reserved range for processor */ +#define STB_HIPROC 15 /* specific symbol bindings */ + +/* Symbol type - ELF32_ST_TYPE - st_info */ +#define STT_NOTYPE 0 /* not specified */ +#define STT_OBJECT 1 /* data object */ +#define STT_FUNC 2 /* function */ +#define STT_SECTION 3 /* section */ +#define STT_FILE 4 /* file */ +#define STT_NUM 5 /* number of symbol types */ +#define STT_TLS 6 /* Thread local storage symbol */ +#define STT_LOOS 10 /* reserved range for operating */ +#define STT_HIOS 12 /* system specific symbol types */ +#define STT_LOPROC 13 /* reserved range for processor */ +#define STT_HIPROC 15 /* specific symbol types */ + +/* Symbol visibility - ELF32_ST_VISIBILITY - st_other */ +#define STV_DEFAULT 0 /* Normal visibility rules */ +#define STV_INTERNAL 1 /* Processor specific hidden class */ +#define STV_HIDDEN 2 /* Symbol unavailable in other mods */ +#define STV_PROTECTED 3 /* Not preemptible, not exported */ + + +/* Relocation entry with implicit addend */ +typedef struct +{ + Elf32_Addr r_offset; /* offset of relocation */ + Elf32_Word r_info; /* symbol table index and type */ +} Elf32_Rel; + +/* Relocation entry with explicit addend */ +typedef struct +{ + Elf32_Addr r_offset; /* offset of relocation */ + Elf32_Word r_info; /* symbol table index and type */ + Elf32_Sword r_addend; +} Elf32_Rela; + +/* Extract relocation info - r_info */ +#define ELF32_R_SYM(i) ((i) >> 8) +#define ELF32_R_TYPE(i) ((unsigned char) (i)) +#define ELF32_R_INFO(s,t) (((s) << 8) + (unsigned char)(t)) + +/* Program Header */ +typedef struct { + Elf32_Word p_type; /* segment type */ + Elf32_Off p_offset; /* segment offset */ + Elf32_Addr p_vaddr; /* virtual address of segment */ + Elf32_Addr p_paddr; /* physical address - ignored? */ + Elf32_Word p_filesz; /* number of bytes in file for seg. */ + Elf32_Word p_memsz; /* number of bytes in mem. for seg. */ + Elf32_Word p_flags; /* flags */ + Elf32_Word p_align; /* memory alignment */ +} Elf32_Phdr; + +/* Segment types - p_type */ +#define PT_NULL 0 /* unused */ +#define PT_LOAD 1 /* loadable segment */ +#define PT_DYNAMIC 2 /* dynamic linking section */ +#define PT_INTERP 3 /* the RTLD */ +#define PT_NOTE 4 /* auxiliary information */ +#define PT_SHLIB 5 /* reserved - purpose undefined */ +#define PT_PHDR 6 /* program header */ +#define PT_TLS 7 /* Thread local storage template */ +#define PT_NUM 8 /* Number of segment types */ +#define PT_LOOS 0x60000000 /* reserved range for operating */ +#define PT_HIOS 0x6fffffff /* system specific segment types */ +#define PT_LOPROC 0x70000000 /* reserved range for processor */ +#define PT_HIPROC 0x7fffffff /* specific segment types */ + +/* Segment flags - p_flags */ +#define PF_X 0x1 /* Executable */ +#define PF_W 0x2 /* Writable */ +#define PF_R 0x4 /* Readable */ +#define PF_MASKOS 0x0ff00000 /* OS specific segment flags */ +#define PF_MASKPROC 0xf0000000 /* reserved bits for processor */ + /* specific segment flags */ +/* Dynamic structure */ +typedef struct +{ + Elf32_Sword d_tag; /* controls meaning of d_val */ + union + { + Elf32_Word d_val; /* Multiple meanings - see d_tag */ + Elf32_Addr d_ptr; /* program virtual address */ + } d_un; +} Elf32_Dyn; + +extern Elf32_Dyn _DYNAMIC[]; + +/* Dynamic Array Tags - d_tag */ +#define DT_NULL 0 /* marks end of _DYNAMIC array */ +#define DT_NEEDED 1 /* string table offset of needed lib */ +#define DT_PLTRELSZ 2 /* size of relocation entries in PLT */ +#define DT_PLTGOT 3 /* address PLT/GOT */ +#define DT_HASH 4 /* address of symbol hash table */ +#define DT_STRTAB 5 /* address of string table */ +#define DT_SYMTAB 6 /* address of symbol table */ +#define DT_RELA 7 /* address of relocation table */ +#define DT_RELASZ 8 /* size of relocation table */ +#define DT_RELAENT 9 /* size of relocation entry */ +#define DT_STRSZ 10 /* size of string table */ +#define DT_SYMENT 11 /* size of symbol table entry */ +#define DT_INIT 12 /* address of initialization func. */ +#define DT_FINI 13 /* address of termination function */ +#define DT_SONAME 14 /* string table offset of shared obj */ +#define DT_RPATH 15 /* string table offset of library + search path */ +#define DT_SYMBOLIC 16 /* start sym search in shared obj. */ +#define DT_REL 17 /* address of rel. tbl. w addends */ +#define DT_RELSZ 18 /* size of DT_REL relocation table */ +#define DT_RELENT 19 /* size of DT_REL relocation entry */ +#define DT_PLTREL 20 /* PLT referenced relocation entry */ +#define DT_DEBUG 21 /* bugger */ +#define DT_TEXTREL 22 /* Allow rel. mod. to unwritable seg */ +#define DT_JMPREL 23 /* add. of PLT's relocation entries */ +#define DT_BIND_NOW 24 /* Process relocations of object */ +#define DT_INIT_ARRAY 25 /* Array with addresses of init fct */ +#define DT_FINI_ARRAY 26 /* Array with addresses of fini fct */ +#define DT_INIT_ARRAYSZ 27 /* Size in bytes of DT_INIT_ARRAY */ +#define DT_FINI_ARRAYSZ 28 /* Size in bytes of DT_FINI_ARRAY */ +#define DT_RUNPATH 29 /* Library search path */ +#define DT_FLAGS 30 /* Flags for the object being loaded */ +#define DT_ENCODING 32 /* Start of encoded range */ +#define DT_PREINIT_ARRAY 32 /* Array with addresses of preinit fct*/ +#define DT_PREINIT_ARRAYSZ 33 /* size in bytes of DT_PREINIT_ARRAY */ +#define DT_NUM 34 /* Number used. */ +#define DT_LOOS 0x60000000 /* reserved range for OS */ +#define DT_HIOS 0x6fffffff /* specific dynamic array tags */ +#define DT_LOPROC 0x70000000 /* reserved range for processor */ +#define DT_HIPROC 0x7fffffff /* specific dynamic array tags */ + +/* Dynamic Tag Flags - d_un.d_val */ +#define DF_ORIGIN 0x01 /* Object may use DF_ORIGIN */ +#define DF_SYMBOLIC 0x02 /* Symbol resolutions starts here */ +#define DF_TEXTREL 0x04 /* Object contains text relocations */ +#define DF_BIND_NOW 0x08 /* No lazy binding for this object */ +#define DF_STATIC_TLS 0x10 /* Static thread local storage */ + +/* Standard ELF hashing function */ +unsigned long elf_hash(const unsigned char *name); + +#define ELF_TARG_VER 1 /* The ver for which this code is intended */ + +/* + * XXX - PowerPC defines really don't belong in here, + * but we'll put them in for simplicity. + */ + +/* Values for Elf32/64_Ehdr.e_flags. */ +#define EF_PPC_EMB 0x80000000 /* PowerPC embedded flag */ + +/* Cygnus local bits below */ +#define EF_PPC_RELOCATABLE 0x00010000 /* PowerPC -mrelocatable flag*/ +#define EF_PPC_RELOCATABLE_LIB 0x00008000 /* PowerPC -mrelocatable-lib + flag */ + +/* PowerPC relocations defined by the ABIs */ +#define R_PPC_NONE 0 +#define R_PPC_ADDR32 1 /* 32bit absolute address */ +#define R_PPC_ADDR24 2 /* 26bit address, 2 bits ignored. */ +#define R_PPC_ADDR16 3 /* 16bit absolute address */ +#define R_PPC_ADDR16_LO 4 /* lower 16bit of absolute address */ +#define R_PPC_ADDR16_HI 5 /* high 16bit of absolute address */ +#define R_PPC_ADDR16_HA 6 /* adjusted high 16bit */ +#define R_PPC_ADDR14 7 /* 16bit address, 2 bits ignored */ +#define R_PPC_ADDR14_BRTAKEN 8 +#define R_PPC_ADDR14_BRNTAKEN 9 +#define R_PPC_REL24 10 /* PC relative 26 bit */ +#define R_PPC_REL14 11 /* PC relative 16 bit */ +#define R_PPC_REL14_BRTAKEN 12 +#define R_PPC_REL14_BRNTAKEN 13 +#define R_PPC_GOT16 14 +#define R_PPC_GOT16_LO 15 +#define R_PPC_GOT16_HI 16 +#define R_PPC_GOT16_HA 17 +#define R_PPC_PLTREL24 18 +#define R_PPC_COPY 19 +#define R_PPC_GLOB_DAT 20 +#define R_PPC_JMP_SLOT 21 +#define R_PPC_RELATIVE 22 +#define R_PPC_LOCAL24PC 23 +#define R_PPC_UADDR32 24 +#define R_PPC_UADDR16 25 +#define R_PPC_REL32 26 +#define R_PPC_PLT32 27 +#define R_PPC_PLTREL32 28 +#define R_PPC_PLT16_LO 29 +#define R_PPC_PLT16_HI 30 +#define R_PPC_PLT16_HA 31 +#define R_PPC_SDAREL16 32 +#define R_PPC_SECTOFF 33 +#define R_PPC_SECTOFF_LO 34 +#define R_PPC_SECTOFF_HI 35 +#define R_PPC_SECTOFF_HA 36 +/* Keep this the last entry. */ +#define R_PPC_NUM 37 + +/* The remaining relocs are from the Embedded ELF ABI, and are not + in the SVR4 ELF ABI. */ +#define R_PPC_EMB_NADDR32 101 +#define R_PPC_EMB_NADDR16 102 +#define R_PPC_EMB_NADDR16_LO 103 +#define R_PPC_EMB_NADDR16_HI 104 +#define R_PPC_EMB_NADDR16_HA 105 +#define R_PPC_EMB_SDAI16 106 +#define R_PPC_EMB_SDA2I16 107 +#define R_PPC_EMB_SDA2REL 108 +#define R_PPC_EMB_SDA21 109 /* 16 bit offset in SDA */ +#define R_PPC_EMB_MRKREF 110 +#define R_PPC_EMB_RELSEC16 111 +#define R_PPC_EMB_RELST_LO 112 +#define R_PPC_EMB_RELST_HI 113 +#define R_PPC_EMB_RELST_HA 114 +#define R_PPC_EMB_BIT_FLD 115 +#define R_PPC_EMB_RELSDA 116 /* 16 bit relative offset in SDA */ + +/* Diab tool relocations. */ +#define R_PPC_DIAB_SDA21_LO 180 /* like EMB_SDA21, but lower 16 bit */ +#define R_PPC_DIAB_SDA21_HI 181 /* like EMB_SDA21, but high 16 bit */ +#define R_PPC_DIAB_SDA21_HA 182 /* like EMB_SDA21, adjusted high 16 */ +#define R_PPC_DIAB_RELSDA_LO 183 /* like EMB_RELSDA, but lower 16 bit */ +#define R_PPC_DIAB_RELSDA_HI 184 /* like EMB_RELSDA, but high 16 bit */ +#define R_PPC_DIAB_RELSDA_HA 185 /* like EMB_RELSDA, adjusted high 16 */ + +/* This is a phony reloc to handle any old fashioned TOC16 references + that may still be in object files. */ +#define R_PPC_TOC16 255 + +#endif /* _ELF_H */ + diff --git a/source/elfloader.c b/source/elfloader.c new file mode 100644 index 00000000..651a1eef --- /dev/null +++ b/source/elfloader.c @@ -0,0 +1,103 @@ +/* + * Copyright (c) 2001 William L. Pitts + * Modifications (c) 2004 Felix Domke + * All rights reserved. + * + * Redistribution and use in source and binary forms are freely + * permitted provided that the above copyright notice and this + * paragraph and the following disclaimer are duplicated in all + * such forms. + * + * This software is provided "AS IS" and without any express or + * implied warranties, including, without limitation, the implied + * warranties of merchantability and fitness for a particular + * purpose. + */ + +#include +#include + +#include + +#include "elf_abi.h" + +/* ====================================================================== + * Determine if a valid ELF image exists at the given memory location. + * First looks at the ELF header magic field, the makes sure that it is + * executable and makes sure that it is for a PowerPC. + * ====================================================================== */ +s32 valid_elf_image (void *addr) +{ + Elf32_Ehdr *ehdr; /* Elf header structure pointer */ + + ehdr = (Elf32_Ehdr *) addr; + + if (!IS_ELF (*ehdr)) + return 0; + + if (ehdr->e_type != ET_EXEC) + return -1; + + if (ehdr->e_machine != EM_PPC) + return -1; + + return 1; +} + + +/* ====================================================================== + * A very simple elf loader, assumes the image is valid, returns the + * entry point address. + * ====================================================================== */ +u32 load_elf_image (void *addr) +{ + Elf32_Ehdr *ehdr; + Elf32_Shdr *shdr; + u8 *strtab = 0; + u8 *image; + int i; + + ehdr = (Elf32_Ehdr *) addr; + /* Find the section header string table for output info */ + shdr = (Elf32_Shdr *) (addr + ehdr->e_shoff + + (ehdr->e_shstrndx * sizeof (Elf32_Shdr))); + + if (shdr->sh_type == SHT_STRTAB) + strtab = (u8 *) (addr + shdr->sh_offset); + + /* Load each appropriate section */ + for (i = 0; i < ehdr->e_shnum; ++i) { + shdr = (Elf32_Shdr *) (addr + ehdr->e_shoff + + (i * sizeof (Elf32_Shdr))); + + if (!(shdr->sh_flags & SHF_ALLOC) + || shdr->sh_addr == 0 || shdr->sh_size == 0) { + continue; + } + + shdr->sh_addr &= 0x3FFFFFFF; + shdr->sh_addr |= 0x80000000; + + if (strtab) { + /*printf ("%sing section %s @ 0x%08x (0x%08x bytes)\n", + (shdr->sh_type == SHT_NOBITS) ? + "clear" : "load", + &strtab[shdr->sh_name], + (u32) shdr->sh_addr, + (u32) shdr->sh_size);*/ + } + + if (shdr->sh_type == SHT_NOBITS) { + memset ((void *) shdr->sh_addr, 0, shdr->sh_size); + } else { + image = (u8 *) addr + shdr->sh_offset; + memcpy ((void *) shdr->sh_addr, + (const void *) image, + shdr->sh_size); + } + DCFlushRangeNoSync ((void *) shdr->sh_addr, shdr->sh_size); + } + + return (ehdr->e_entry & 0x3FFFFFFF) | 0x80000000; +} + diff --git a/source/elfloader.h b/source/elfloader.h new file mode 100644 index 00000000..d378fe45 --- /dev/null +++ b/source/elfloader.h @@ -0,0 +1,18 @@ +#ifndef _ELFLOADER_H_ +#define _ELFLOADER_H_ + +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + +s32 valid_elf_image (void *addr); +u32 load_elf_image (void *addr); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/source/fatmounter.c b/source/fatmounter.c deleted file mode 100644 index 8e3fa841..00000000 --- a/source/fatmounter.c +++ /dev/null @@ -1,57 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include - -#define CACHE 1 -#define SECTORS 64 - - -int USBDevice_Init() -{ - //right now only mounts first partition and only under IOS36 - __io_usbstorage.startup(); - - if (fatMount("USB", &__io_usbstorage, 0, CACHE, SECTORS)) { - return 1; - } - -return -1; -} - -void USBDevice_deInit() -{ - //First unmount all the devs... - fatUnmount("USB"); - //...and then shutdown em! - __io_usbstorage.shutdown(); -} - -int isSdInserted() -{ - return __io_wiisd.isInserted(); -} - -int SDCard_Init() -{ - //mount SD if inserted - __io_wiisd.startup(); - if (!isSdInserted()){ - return -1; - } - if (fatMount("SD", &__io_wiisd, 0, CACHE, SECTORS)) { - return 1; - } -return -1; -} - -void SDCard_deInit() -{ - //First unmount all the devs... - fatUnmount("SD:/"); - //...and then shutdown em! - __io_wiisd.shutdown(); -} diff --git a/source/fatmounter.h b/source/fatmounter.h deleted file mode 100644 index e2357020..00000000 --- a/source/fatmounter.h +++ /dev/null @@ -1,19 +0,0 @@ -#ifndef _FATMOUNTER_H_ -#define _FATMOUNTER_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif - -int USBDevice_Init(); -void USBDevice_deInit(); -int isSdInserted(); -int SDCard_Init(); -void SDCard_deInit(); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/source/filelist.h b/source/filelist.h index 127eab67..3fc91c6a 100644 --- a/source/filelist.h +++ b/source/filelist.h @@ -11,286 +11,7 @@ #include -extern const u8 font_ttf[]; -extern const u32 font_ttf_size; - -extern const u8 clock_ttf[]; -extern const u32 clock_ttf_size; - -extern const u8 closebutton_png[]; -extern const u32 closebutton_png_size; - -extern const u8 sdcard_png[]; -extern const u32 sdcard_png_size; - -extern const u8 wiimote_png[]; -extern const u32 wiimote_png_size; - -extern const u8 bg_music_ogg[]; -extern const u32 bg_music_ogg_size; - -extern const u8 credits_music_ogg[]; -extern const u32 credits_music_ogg_size; - -extern const u8 menuin_ogg[]; -extern const u32 menuin_ogg_size; - -extern const u8 menuout_ogg[]; -extern const u32 menuout_ogg_size; - -extern const u8 tab_bg1_png[]; -extern const u32 tab_bg1_png_size; - -extern const u8 tab_bg2_png[]; -extern const u32 tab_bg2_png_size; - -extern const u8 tab_bg3_png[]; -extern const u32 tab_bg3_png_size; - -extern const u8 credits_button_png[]; -extern const u32 credits_button_png_size; - -extern const u8 credits_button_over_png[]; -extern const u32 credits_button_over_png_size; - -extern const u8 button_over_pcm[]; -extern const u32 button_over_pcm_size; - -extern const u8 button_click_pcm[]; -extern const u32 button_click_pcm_size; - -extern const u8 button_click2_pcm[]; -extern const u32 button_click2_pcm_size; - -extern const u8 tooltip_left_png[]; -extern const u32 tooltip_left_png_size; - -extern const u8 tooltip_tile_png[]; -extern const u32 tooltip_tile_png_size; - -extern const u8 tooltip_right_png[]; -extern const u32 tooltip_right_png_size; - -extern const u8 startgame_arrow_left_png[]; -extern const u32 startgame_arrow_left_png_size; - -extern const u8 startgame_arrow_right_png[]; -extern const u32 startgame_arrow_right_png_size; - -extern const u8 credits_bg_png[]; -extern const u32 credits_bg_png_size; - -extern const u8 little_star_png[]; -extern const u32 little_star_png_size; - -extern const u8 background_png[]; -extern const u32 background_png_size; - -extern const u8 wbackground_png[]; -extern const u32 wbackground_png_size; - -extern const u8 bg_options_settings_png[]; -extern const u32 bg_options_settings_png_size; - -extern const u8 settings_background_png[]; -extern const u32 settings_background_png_size; - -extern const u8 nocover_png[]; -extern const u32 nocover_png_size; - -extern const u8 nodisc_png[]; -extern const u32 nodisc_png_size; - -extern const u8 button_install_png[]; -extern const u32 button_install_png_size; - -extern const u8 button_install_over_png[]; -extern const u32 button_install_over_png_size; - -extern const u8 dialogue_box_startgame_png[]; -extern const u32 dialogue_box_startgame_png_size; - -extern const u8 wdialogue_box_startgame_png[]; -extern const u32 wdialogue_box_startgame_png_size; - -extern const u8 button_dialogue_box_startgame_png[]; -extern const u32 button_dialogue_box_startgame_size; - -extern const u8 button_dialogue_box_png[]; -extern const u32 button_dialogue_box_size; - -extern const u8 keyboard_textbox_png[]; -extern const u32 keyboard_textbox_png_size; - -extern const u8 keyboard_key_png[]; -extern const u32 keyboard_key_png_size; - -extern const u8 keyboard_key_over_png[]; -extern const u32 keyboard_key_over_png_size; - -extern const u8 keyboard_mediumkey_over_png[]; -extern const u32 keyboard_mediumkey_over_png_size; - -extern const u8 keyboard_largekey_over_png[]; -extern const u32 keyboard_largekey_over_png_size; - -extern const u8 menu_button_png[]; -extern const u32 menu_button_size; - -extern const u8 menu_button_over_png[]; -extern const u32 menu_button_over_size; - -extern const u8 settings_button_png[]; -extern const u32 settings_button_size; - -extern const u8 settings_button_over_png[]; -extern const u32 settings_button_over_size; - -extern const u8 settings_menu_button_png[]; -extern const u32 settings_menu_button_size; - -extern const u8 wiimote_poweroff_png[]; -extern const u32 wiimote_poweroff_png_size; - -extern const u8 dialogue_box_png[]; -extern const u32 dialogue_box_png_size; - -extern const u8 wiimote_poweroff_over_png[]; -extern const u32 wiimote_poweroff_over_png_size; - -extern const u8 bg_options_png[]; -extern const u32 bg_options_png_size; - -extern const u8 bg_options_entry_png[]; -extern const u32 bg_options_entry_png_size; - -extern const u8 scrollbar_png[]; -extern const u32 scrollbar_png_size; - -extern const u8 scrollbar_arrowup_png[]; -extern const u32 scrollbar_arrowup_png_size; - -extern const u8 scrollbar_arrowup_over_png[]; -extern const u32 scrollbar_arrowup_over_png_size; - -extern const u8 scrollbar_arrowdown_png[]; -extern const u32 scrollbar_arrowdown_png_size; - -extern const u8 scrollbar_arrowdown_over_png[]; -extern const u32 scrollbar_arrowdown_over_png_size; - -extern const u8 scrollbar_box_png[]; -extern const u32 scrollbar_box_png_size; - -extern const u8 scrollbar_box_over_png[]; -extern const u32 scrollbar_box_over_png_size; - -extern const u8 progressbar_png[]; -extern const u32 progressbar_png_size; - -extern const u8 progressbar_empty_png[]; -extern const u32 progressbar_empty_png_size; - -extern const u8 progressbar_outline_png[]; -extern const u32 progressbar_outline_png_size; - -extern const u8 player1_point_png[]; -extern const u32 player1_point_png_size; - -extern const u8 player2_point_png[]; -extern const u32 player2_point_png_size; - -extern const u8 player3_point_png[]; -extern const u32 player3_point_png_size; - -extern const u8 player4_point_png[]; -extern const u32 player4_point_png_size; - -extern const u8 battery_png[]; -extern const u32 battery_png_size; - -extern const u8 battery_bar_png[]; -extern const u32 battery_bar_png_size; - -extern const u8 battery_white_png[]; -extern const u32 battery_white_png_size; - -extern const u8 battery_bar_white_png[]; -extern const u32 battery_bar_white_png_size; - -extern const u8 battery_red_png[]; -extern const u32 battery_red_png_size; - -extern const u8 arrow_next_png[]; -extern const u32 arrow_next_png_size; - -extern const u8 arrow_previous_png[]; -extern const u32 arrow_previous_png_size; - -extern const u8 mp3_pause_png[]; -extern const u32 mp3_pause_png_size; - -extern const u8 exit_top_png[]; -extern const u32 exit_top_png_size; - -extern const u8 exit_top_over_png[]; -extern const u32 exit_top_over_png_size; - -extern const u8 exit_bottom_png[]; -extern const u32 exit_bottom_png_size; - -extern const u8 exit_bottom_over_png[]; -extern const u32 exit_bottom_over_png_size; - -extern const u8 exit_button_png[]; -extern const u32 exit_button_png_size; - -extern const u8 mp3_stop_png[]; -extern const u32 mp3_stop_png_size; - -extern const u8 favorite_png[]; -extern const u32 favorite_png_size; - -extern const u8 not_favorite_png[]; -extern const u32 not_favorite_png_size; - -extern const u8 favIcon_png[]; -extern const u32 favIcon_png_size; - -extern const u8 abcIcon_png[]; -extern const u32 abcIcon_png_size; - -extern const u8 playCountIcon_png[]; -extern const u32 playCountIcon_png_size; - -extern const u8 arrangeList_png[]; -extern const u32 arrangeList_png_size; - -extern const u8 arrangeGrid_png[]; -extern const u32 arrangeGrid_png_size; - -extern const u8 arrangeCarousel_png[]; -extern const u32 arrangeCarousel_png_size; - -extern const u8 favIcon_gray_png[]; -extern const u32 favIcon_gray_png_size; - -extern const u8 abcIcon_gray_png[]; -extern const u32 abcIcon_gray_png_size; - -extern const u8 playCountIcon_gray_png[]; -extern const u32 playCountIcon_gray_png_size; - -extern const u8 arrangeGrid_gray_png[]; -extern const u32 arrangeGrid_gray_png_size; - -extern const u8 arrangeList_gray_png[]; -extern const u32 arrangeList_gray_png_size; - -extern const u8 arrangeCarousel_gray_png[]; -extern const u32 arrangeCarousel_gray_png_size; - -extern const u8 updateRev_png[]; -extern const u32 updateRev_png_size; +extern const u8 background_png[]; +extern const u32 background_png_size; #endif diff --git a/source/fonts/clock.ttf b/source/fonts/clock.ttf deleted file mode 100644 index 5a252b2b..00000000 Binary files a/source/fonts/clock.ttf and /dev/null differ diff --git a/source/fonts/font.ttf b/source/fonts/font.ttf deleted file mode 100644 index d4c461ca..00000000 Binary files a/source/fonts/font.ttf and /dev/null differ diff --git a/source/fst.c b/source/fst.c deleted file mode 100644 index d73235b7..00000000 --- a/source/fst.c +++ /dev/null @@ -1,115 +0,0 @@ -/* - * Copyright (C) 2008 Nuke (wiinuke@gmail.com) - * - * this file is part of GeckoOS for USB Gecko - * http://www.usbgecko.com - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - - -#include -#include -#include -#include -#include -#include -#include -#include -#include "ogc/ipc.h" -#include "fst.h" -#include "dvd_broadway.h" -#include "wpad.h" - - -#define FSTDIRTYPE 1 -#define FSTFILETYPE 0 -#define ENTRYSIZE 0xC -#define FILEDIR "SD:/codes" - -#define MAX_FILENAME_LEN 128 - - -static vu32 dvddone = 0; - - -// Real basic -u32 do_sd_code(char *filename) -{ - FILE *fp; - u8 *filebuff; - u32 filesize; - u32 ret; - char filepath[128]; - - __io_wiisd.startup(); - ret = fatMountSimple("SD", &__io_wiisd); - - if (!ret) { - return 0; - } - - fflush(stdout); - - sprintf(filepath, FILEDIR "/%s", filename); - filepath[16] = 0x2E; - filepath[17] = 0x67; - filepath[18] = 0x63; - filepath[19] = 0x74; - filepath[20] = 0; - //printf("filename %s\n",filepath); - - fp = fopen(filepath, "rb"); - if (!fp) { - fatUnmount("SD"); - __io_wiisd.shutdown(); - return 0; - } - - fseek(fp, 0, SEEK_END); - filesize = ftell(fp); - fseek(fp, 0, SEEK_SET); - - filebuff = (u8*) malloc (filesize); - if(filebuff == 0){ - fclose(fp); - sleep(2); - return 0; - } - - ret = fread(filebuff, 1, filesize, fp); - if(ret != filesize){ - free(filebuff); - fclose(fp); - fatUnmount("SD"); - __io_wiisd.shutdown(); - return 0; - } - - memcpy((void*)0x800027E8,filebuff,filesize); - *(vu8*)0x80001807 = 0x01; - - - - free(filebuff); - fclose(fp); - - fatUnmount("SD"); - __io_wiisd.shutdown(); - - return 1; -} - - diff --git a/source/fst.h b/source/fst.h deleted file mode 100644 index ccd855e0..00000000 --- a/source/fst.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (C) 2008 Nuke (wiinuke@gmail.com) - * - * this file is part of GeckoOS for USB Gecko - * http://www.usbgecko.com - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#ifndef __FST_H__ -#define __FST_H__ - -#ifdef __cplusplus -extern "C" -{ -#endif - -//u32 do_fst(u32 fstlocation); -u32 do_sd_code(char *filename); - -#ifdef __cplusplus -} -#endif - -#endif - diff --git a/source/fwrite_patch.h b/source/fwrite_patch.h deleted file mode 100644 index 54fedcc4..00000000 --- a/source/fwrite_patch.h +++ /dev/null @@ -1,15 +0,0 @@ -unsigned char fwrite_patch_bin[] = { - 0x7c, 0x84, 0x29, 0xd6, 0x39, 0x40, 0x00, 0x00, 0x94, 0x21, 0xff, 0xf0, - 0x93, 0xe1, 0x00, 0x0c, 0x7f, 0x8a, 0x20, 0x00, 0x40, 0x9c, 0x00, 0x64, - 0x3d, 0x00, 0xcd, 0x00, 0x3d, 0x60, 0xcd, 0x00, 0x3d, 0x20, 0xcd, 0x00, - 0x61, 0x08, 0x68, 0x14, 0x61, 0x6b, 0x68, 0x24, 0x61, 0x29, 0x68, 0x20, - 0x39, 0x80, 0x00, 0xd0, 0x38, 0xc0, 0x00, 0x19, 0x38, 0xe0, 0x00, 0x00, - 0x91, 0x88, 0x00, 0x00, 0x7c, 0x03, 0x50, 0xae, 0x54, 0x00, 0xa0, 0x16, - 0x64, 0x00, 0xb0, 0x00, 0x90, 0x0b, 0x00, 0x00, 0x90, 0xc9, 0x00, 0x00, - 0x80, 0x09, 0x00, 0x00, 0x70, 0x1f, 0x00, 0x01, 0x40, 0x82, 0xff, 0xf8, - 0x80, 0x0b, 0x00, 0x00, 0x90, 0xe8, 0x00, 0x00, 0x54, 0x00, 0x37, 0xfe, - 0x7d, 0x4a, 0x02, 0x14, 0x7f, 0x8a, 0x20, 0x00, 0x41, 0x9c, 0xff, 0xc8, - 0x7c, 0xa3, 0x2b, 0x78, 0x83, 0xe1, 0x00, 0x0c, 0x38, 0x21, 0x00, 0x10, - 0x4e, 0x80, 0x00, 0x20 -}; -unsigned int fwrite_patch_bin_len = 136; diff --git a/source/geckomenu.h b/source/geckomenu.h deleted file mode 100644 index 458e6288..00000000 --- a/source/geckomenu.h +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright (C) 2008 Nuke (wiinuke@gmail.com) - * - * this file is part of GeckoOS for USB Gecko - * http://www.usbgecko.com - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#ifndef __GECKOMENU_H__ -#define __GECKOMENU_H__ - - -#define ROOTMENU 0 -#define ABOUTMENU 1 -#define CONFIGMENU 2 -#define REBOOTMENU 3 -#define root_itemcount 7 -#define about_itemcount 4 -#define config_itemcount 9 -#define rebooter_itemcount 6 - -u32 currentmenu; // 0 ROOT -u32 rootmenu_item; -u32 menufreeze; -u32 langselect; -u32 langsaved; -u32 pal60select; -u32 pal50select; -u32 viselect; -u32 ntscselect; -u32 hookselect; -u32 ocarinaselect; -u32 recoveryselect; -u32 regionfreeselect; -u32 nocopyselect; -u32 buttonskipselect; - -u32 doprogress(u32 progstate, u32 noelements); -void drawmenu(u32 menuid); -void drawselected(u32 menuidpos); -void processwpad(); -void clearscreen(u32 *framebuffer, u16 xscreen, u16 yscreen, u16 width, u16 height, u32 color); -void drawicon(u32 *framebuffer, u16 xscreen, u16 yscreen, u16 width, u16 height, u32 gicon); -u32 CvtRGB (u8 r1, u8 g1, u8 b1, u8 r2, u8 g2, u8 b2); - - -#endif // __GECKOLOAD_H__ diff --git a/source/http.c b/source/http.c deleted file mode 100644 index 864e6a71..00000000 --- a/source/http.c +++ /dev/null @@ -1,245 +0,0 @@ -#include "http.h" - -/** - * Emptyblock is a statically defined variable for functions to return if they are unable - * to complete a request - */ -const struct block emptyblock = {0, NULL}; - -//The maximum amount of bytes to send per net_write() call -#define NET_BUFFER_SIZE 1024 - -// Write our message to the server -static s32 send_message(s32 server, char *msg) { - s32 bytes_transferred = 0; - s32 remaining = strlen(msg); - while (remaining) { - if ((bytes_transferred = net_write(server, msg, remaining > NET_BUFFER_SIZE ? NET_BUFFER_SIZE : remaining)) > 0) { - remaining -= bytes_transferred; - usleep (20 * 1000); - } else if (bytes_transferred < 0) { - return bytes_transferred; - } else { - return -ENODATA; - } - } - return 0; -} - -/** - * Connect to a remote server via TCP on a specified port - * - * @param u32 ip address of the server to connect to - * @param u32 the port to connect to on the server - * @return s32 The connection to the server (negative number if connection could not be established) - */ -static s32 server_connect(u32 ipaddress, u32 socket_port) { - //Initialize socket - s32 connection = net_socket(AF_INET, SOCK_STREAM, IPPROTO_IP); - if (connection < 0) return connection; - - struct sockaddr_in connect_addr; - memset(&connect_addr, 0, sizeof(connect_addr)); - connect_addr.sin_family = AF_INET; - connect_addr.sin_port = socket_port; - connect_addr.sin_addr.s_addr= ipaddress; - - //Attemt to open the socket - if (net_connect(connection, (struct sockaddr*)&connect_addr, sizeof(connect_addr)) == -1) { - net_close(connection); - return -1; - } - return connection; -} - -//The amount of memory in bytes reserved initially to store the HTTP response in -//Be careful in increasing this number, reading from a socket on the Wii -//will fail if you request more than 20k or so -#define HTTP_BUFFER_SIZE 1024 * 5 - -//The amount of memory the buffer should expanded with if the buffer is full -#define HTTP_BUFFER_GROWTH 1024 * 5 - -/** - * This function reads all the data from a connection into a buffer which it returns. - * It will return an empty buffer if something doesn't go as planned - * - * @param s32 connection The connection identifier to suck the response out of - * @return block A 'block' struct (see http.h) in which the buffer is located - */ -struct block read_message(s32 connection) -{ - //Create a block of memory to put in the response - struct block buffer; - buffer.data = malloc(HTTP_BUFFER_SIZE); - buffer.size = HTTP_BUFFER_SIZE; - - if(buffer.data == NULL) { - return emptyblock; - } - - //The offset variable always points to the first byte of memory that is free in the buffer - u32 offset = 0; - - while(1) - { - //Fill the buffer with a new batch of bytes from the connection, - //starting from where we left of in the buffer till the end of the buffer - s32 bytes_read = net_read(connection, buffer.data + offset, buffer.size - offset); - - //Anything below 0 is an error in the connection - if(bytes_read < 0) - { - //printf("Connection error from net_read() Errorcode: %i\n", bytes_read); - return emptyblock; - } - - //No more bytes were read into the buffer, - //we assume this means the HTTP response is done - if(bytes_read == 0) - { - break; - } - - offset += bytes_read; - - //Check if we have enough buffer left over, - //if not expand it with an additional HTTP_BUFFER_GROWTH worth of bytes - if(offset >= buffer.size) - { - buffer.size += HTTP_BUFFER_GROWTH; - buffer.data = realloc(buffer.data, buffer.size); - - if(buffer.data == NULL) - { - return emptyblock; - } - } - } - - //At the end of above loop offset should be precisely the amount of bytes that were read from the connection - buffer.size = offset; - - //Shrink the size of the buffer so the data fits exactly in it - realloc(buffer.data, buffer.size); - - return buffer; -} - -/** - * Downloads the contents of a URL to memory - * This method is not threadsafe (because networking is not threadsafe on the Wii) - */ -struct block downloadfile(const char *url) -{ - //Check if the url starts with "http://", if not it is not considered a valid url - if(strncmp(url, "http://", strlen("http://")) != 0) - { - //printf("URL '%s' doesn't start with 'http://'\n", url); - return emptyblock; - } - - //Locate the path part of the url by searching for '/' past "http://" - char *path = strchr(url + strlen("http://"), '/'); - - //At the very least the url has to end with '/', ending with just a domain is invalid - if(path == NULL) - { - //printf("URL '%s' has no PATH part\n", url); - return emptyblock; - } - - //Extract the domain part out of the url - int domainlength = path - url - strlen("http://"); - - if(domainlength == 0) - { - //printf("No domain part in URL '%s'\n", url); - return emptyblock; - } - - char domain[domainlength + 1]; - strncpy(domain, url + strlen("http://"), domainlength); - domain[domainlength] = '\0'; - - //Parsing of the URL is done, start making an actual connection - u32 ipaddress = getipbynamecached(domain); - - if(ipaddress == 0) - { - //printf("\ndomain %s could not be resolved", domain); - return emptyblock; - } - - - s32 connection = server_connect(ipaddress, 80); - - if(connection < 0) { - //printf("Error establishing connection"); - return emptyblock; - } - - //Form a nice request header to send to the webserver - char* headerformat = "GET %s HTTP/1.0\r\nHost: %s\r\nUser-Agent: WiiEarthh 1.0\r\n\r\n";; - char header[strlen(headerformat) + strlen(domain) + strlen(path)]; - sprintf(header, headerformat, path, domain); - - //Do the request and get the response - send_message(connection, header); - struct block response = read_message(connection); - net_close(connection); - - //Search for the 4-character sequence \r\n\r\n in the response which signals the start of the http payload (file) - unsigned char *filestart = NULL; - u32 filesize = 0; - int i; - for(i = 3; i < response.size; i++) - { - if(response.data[i] == '\n' && - response.data[i-1] == '\r' && - response.data[i-2] == '\n' && - response.data[i-3] == '\r') - { - filestart = response.data + i + 1; - filesize = response.size - i - 1; - break; - } - } - - if(filestart == NULL) - { - //printf("HTTP Response was without a file\n"); - free(response.data); - return emptyblock; - } - - //Copy the file part of the response into a new memoryblock to return - struct block file; - file.data = malloc(filesize); - file.size = filesize; - - if(file.data == NULL) - { - //printf("No more memory to copy file from HTTP response\n"); - free(response.data); - return emptyblock; - } - - memcpy(file.data, filestart, filesize); - - //Dispose of the original response - free(response.data); - - return file; -} - -s32 GetConnection(char * domain) { - - u32 ipaddress = getipbynamecached(domain); - if(ipaddress == 0) { - return -1; - } - s32 connection = server_connect(ipaddress, 80); - return connection; - -} diff --git a/source/http.h b/source/http.h deleted file mode 100644 index 50fccb49..00000000 --- a/source/http.h +++ /dev/null @@ -1,39 +0,0 @@ -#ifndef _HTTP_H_ -#define _HTTP_H_ - -#include -#include -#include -#include - -#include -#include -#include -#include - -#ifdef __cplusplus -extern "C" -{ -#endif - -#include "dns.h" - -/** - * A simple structure to keep track of the size of a malloc()ated block of memory - */ -struct block -{ - u32 size; - unsigned char *data; -}; - -extern const struct block emptyblock; - -struct block downloadfile(const char *url); -s32 GetConnection(char * domain); - -#ifdef __cplusplus -} -#endif - -#endif /* _HTTP_H_ */ diff --git a/source/images/abcIcon.png b/source/images/abcIcon.png deleted file mode 100644 index b2b6cedb..00000000 Binary files a/source/images/abcIcon.png and /dev/null differ diff --git a/source/images/abcIcon_gray.png b/source/images/abcIcon_gray.png deleted file mode 100644 index 573d9792..00000000 Binary files a/source/images/abcIcon_gray.png and /dev/null differ diff --git a/source/images/arrangeCarousel.png b/source/images/arrangeCarousel.png deleted file mode 100644 index a92af535..00000000 Binary files a/source/images/arrangeCarousel.png and /dev/null differ diff --git a/source/images/arrangeCarousel_gray.png b/source/images/arrangeCarousel_gray.png deleted file mode 100644 index dfe51cae..00000000 Binary files a/source/images/arrangeCarousel_gray.png and /dev/null differ diff --git a/source/images/arrangeGrid.png b/source/images/arrangeGrid.png deleted file mode 100644 index 3fe33e3b..00000000 Binary files a/source/images/arrangeGrid.png and /dev/null differ diff --git a/source/images/arrangeGrid_gray.png b/source/images/arrangeGrid_gray.png deleted file mode 100644 index fdae2bb9..00000000 Binary files a/source/images/arrangeGrid_gray.png and /dev/null differ diff --git a/source/images/arrangeList.png b/source/images/arrangeList.png deleted file mode 100644 index dd90792b..00000000 Binary files a/source/images/arrangeList.png and /dev/null differ diff --git a/source/images/arrangeList_gray.png b/source/images/arrangeList_gray.png deleted file mode 100644 index d3fcd842..00000000 Binary files a/source/images/arrangeList_gray.png and /dev/null differ diff --git a/source/images/arrow_next.png b/source/images/arrow_next.png deleted file mode 100644 index 3a814fde..00000000 Binary files a/source/images/arrow_next.png and /dev/null differ diff --git a/source/images/arrow_previous.png b/source/images/arrow_previous.png deleted file mode 100644 index 20eb8a55..00000000 Binary files a/source/images/arrow_previous.png and /dev/null differ diff --git a/source/images/background.png b/source/images/background.png index 9ecc365b..6f85d7eb 100644 Binary files a/source/images/background.png and b/source/images/background.png differ diff --git a/source/images/battery.png b/source/images/battery.png deleted file mode 100644 index 9a4c9afb..00000000 Binary files a/source/images/battery.png and /dev/null differ diff --git a/source/images/battery_bar.png b/source/images/battery_bar.png deleted file mode 100644 index 3aff7411..00000000 Binary files a/source/images/battery_bar.png and /dev/null differ diff --git a/source/images/battery_bar_white.png b/source/images/battery_bar_white.png deleted file mode 100644 index 528b3405..00000000 Binary files a/source/images/battery_bar_white.png and /dev/null differ diff --git a/source/images/battery_red.png b/source/images/battery_red.png deleted file mode 100644 index bc09b4c3..00000000 Binary files a/source/images/battery_red.png and /dev/null differ diff --git a/source/images/battery_white.png b/source/images/battery_white.png deleted file mode 100644 index a2812c5a..00000000 Binary files a/source/images/battery_white.png and /dev/null differ diff --git a/source/images/bg_options.png b/source/images/bg_options.png deleted file mode 100644 index 5b694e0a..00000000 Binary files a/source/images/bg_options.png and /dev/null differ diff --git a/source/images/bg_options_entry.png b/source/images/bg_options_entry.png deleted file mode 100644 index db4e2472..00000000 Binary files a/source/images/bg_options_entry.png and /dev/null differ diff --git a/source/images/bg_options_settings.png b/source/images/bg_options_settings.png deleted file mode 100644 index 0e5e0a62..00000000 Binary files a/source/images/bg_options_settings.png and /dev/null differ diff --git a/source/images/button_dialogue_box.png b/source/images/button_dialogue_box.png deleted file mode 100644 index a7523b83..00000000 Binary files a/source/images/button_dialogue_box.png and /dev/null differ diff --git a/source/images/button_install.png b/source/images/button_install.png deleted file mode 100644 index 4af67f51..00000000 Binary files a/source/images/button_install.png and /dev/null differ diff --git a/source/images/button_install_over.png b/source/images/button_install_over.png deleted file mode 100644 index d8ad727b..00000000 Binary files a/source/images/button_install_over.png and /dev/null differ diff --git a/source/images/closebutton.png b/source/images/closebutton.png deleted file mode 100644 index b2100d98..00000000 Binary files a/source/images/closebutton.png and /dev/null differ diff --git a/source/images/credits_bg.png b/source/images/credits_bg.png deleted file mode 100644 index 3ce92fd3..00000000 Binary files a/source/images/credits_bg.png and /dev/null differ diff --git a/source/images/credits_button.png b/source/images/credits_button.png deleted file mode 100644 index 87777317..00000000 Binary files a/source/images/credits_button.png and /dev/null differ diff --git a/source/images/credits_button_over.png b/source/images/credits_button_over.png deleted file mode 100644 index 54e83dbc..00000000 Binary files a/source/images/credits_button_over.png and /dev/null differ diff --git a/source/images/dialogue_box.png b/source/images/dialogue_box.png deleted file mode 100644 index d16b96cc..00000000 Binary files a/source/images/dialogue_box.png and /dev/null differ diff --git a/source/images/dialogue_box_install.png b/source/images/dialogue_box_install.png deleted file mode 100644 index 0bfaa26e..00000000 Binary files a/source/images/dialogue_box_install.png and /dev/null differ diff --git a/source/images/dialogue_box_startgame.png b/source/images/dialogue_box_startgame.png deleted file mode 100644 index bd684298..00000000 Binary files a/source/images/dialogue_box_startgame.png and /dev/null differ diff --git a/source/images/exit_bottom.png b/source/images/exit_bottom.png deleted file mode 100644 index 5f957415..00000000 Binary files a/source/images/exit_bottom.png and /dev/null differ diff --git a/source/images/exit_bottom_over.png b/source/images/exit_bottom_over.png deleted file mode 100644 index 03b1d296..00000000 Binary files a/source/images/exit_bottom_over.png and /dev/null differ diff --git a/source/images/exit_button.png b/source/images/exit_button.png deleted file mode 100644 index 4fbce7eb..00000000 Binary files a/source/images/exit_button.png and /dev/null differ diff --git a/source/images/exit_top.png b/source/images/exit_top.png deleted file mode 100644 index 759264fc..00000000 Binary files a/source/images/exit_top.png and /dev/null differ diff --git a/source/images/exit_top_over.png b/source/images/exit_top_over.png deleted file mode 100644 index 1548916f..00000000 Binary files a/source/images/exit_top_over.png and /dev/null differ diff --git a/source/images/favIcon.png b/source/images/favIcon.png deleted file mode 100644 index 1b1314b9..00000000 Binary files a/source/images/favIcon.png and /dev/null differ diff --git a/source/images/favIcon_gray.png b/source/images/favIcon_gray.png deleted file mode 100644 index 5bf8a82d..00000000 Binary files a/source/images/favIcon_gray.png and /dev/null differ diff --git a/source/images/favorite.png b/source/images/favorite.png deleted file mode 100644 index b8eeefe7..00000000 Binary files a/source/images/favorite.png and /dev/null differ diff --git a/source/images/keyboard_key.png b/source/images/keyboard_key.png deleted file mode 100644 index 50061ba9..00000000 Binary files a/source/images/keyboard_key.png and /dev/null differ diff --git a/source/images/keyboard_key_over.png b/source/images/keyboard_key_over.png deleted file mode 100644 index 15e352db..00000000 Binary files a/source/images/keyboard_key_over.png and /dev/null differ diff --git a/source/images/keyboard_largekey_over.png b/source/images/keyboard_largekey_over.png deleted file mode 100644 index bac10741..00000000 Binary files a/source/images/keyboard_largekey_over.png and /dev/null differ diff --git a/source/images/keyboard_mediumkey_over.png b/source/images/keyboard_mediumkey_over.png deleted file mode 100644 index f2c821cb..00000000 Binary files a/source/images/keyboard_mediumkey_over.png and /dev/null differ diff --git a/source/images/keyboard_textbox.png b/source/images/keyboard_textbox.png deleted file mode 100644 index caeef7ee..00000000 Binary files a/source/images/keyboard_textbox.png and /dev/null differ diff --git a/source/images/little_star.png b/source/images/little_star.png deleted file mode 100644 index de0da22c..00000000 Binary files a/source/images/little_star.png and /dev/null differ diff --git a/source/images/menu_button.png b/source/images/menu_button.png deleted file mode 100644 index a455091f..00000000 Binary files a/source/images/menu_button.png and /dev/null differ diff --git a/source/images/menu_button_over.png b/source/images/menu_button_over.png deleted file mode 100644 index ee6c5e31..00000000 Binary files a/source/images/menu_button_over.png and /dev/null differ diff --git a/source/images/mp3_pause.png b/source/images/mp3_pause.png deleted file mode 100644 index f0b5903a..00000000 Binary files a/source/images/mp3_pause.png and /dev/null differ diff --git a/source/images/mp3_stop.png b/source/images/mp3_stop.png deleted file mode 100644 index 2762881a..00000000 Binary files a/source/images/mp3_stop.png and /dev/null differ diff --git a/source/images/nocover.png b/source/images/nocover.png deleted file mode 100644 index 4be4143a..00000000 Binary files a/source/images/nocover.png and /dev/null differ diff --git a/source/images/nodisc.png b/source/images/nodisc.png deleted file mode 100644 index d5131789..00000000 Binary files a/source/images/nodisc.png and /dev/null differ diff --git a/source/images/not_favorite.png b/source/images/not_favorite.png deleted file mode 100644 index c9bd9df0..00000000 Binary files a/source/images/not_favorite.png and /dev/null differ diff --git a/source/images/playCountIcon.png b/source/images/playCountIcon.png deleted file mode 100644 index d3ed1896..00000000 Binary files a/source/images/playCountIcon.png and /dev/null differ diff --git a/source/images/playCountIcon_gray.png b/source/images/playCountIcon_gray.png deleted file mode 100644 index 8b1d4dff..00000000 Binary files a/source/images/playCountIcon_gray.png and /dev/null differ diff --git a/source/images/player1_point.png b/source/images/player1_point.png deleted file mode 100644 index c06c08c7..00000000 Binary files a/source/images/player1_point.png and /dev/null differ diff --git a/source/images/player2_point.png b/source/images/player2_point.png deleted file mode 100644 index 6e952d24..00000000 Binary files a/source/images/player2_point.png and /dev/null differ diff --git a/source/images/player3_point.png b/source/images/player3_point.png deleted file mode 100644 index 704f84e0..00000000 Binary files a/source/images/player3_point.png and /dev/null differ diff --git a/source/images/player4_point.png b/source/images/player4_point.png deleted file mode 100644 index dd8f1ad3..00000000 Binary files a/source/images/player4_point.png and /dev/null differ diff --git a/source/images/progressbar.png b/source/images/progressbar.png deleted file mode 100644 index 747f6a4d..00000000 Binary files a/source/images/progressbar.png and /dev/null differ diff --git a/source/images/progressbar_empty.png b/source/images/progressbar_empty.png deleted file mode 100644 index e72f0c43..00000000 Binary files a/source/images/progressbar_empty.png and /dev/null differ diff --git a/source/images/progressbar_outline.png b/source/images/progressbar_outline.png deleted file mode 100644 index 6b665457..00000000 Binary files a/source/images/progressbar_outline.png and /dev/null differ diff --git a/source/images/scrollbar.png b/source/images/scrollbar.png deleted file mode 100644 index 032074db..00000000 Binary files a/source/images/scrollbar.png and /dev/null differ diff --git a/source/images/scrollbar_arrowdown.png b/source/images/scrollbar_arrowdown.png deleted file mode 100644 index ebd748c6..00000000 Binary files a/source/images/scrollbar_arrowdown.png and /dev/null differ diff --git a/source/images/scrollbar_arrowup.png b/source/images/scrollbar_arrowup.png deleted file mode 100644 index 6cef2fa0..00000000 Binary files a/source/images/scrollbar_arrowup.png and /dev/null differ diff --git a/source/images/scrollbar_box.png b/source/images/scrollbar_box.png deleted file mode 100644 index 9b568f3e..00000000 Binary files a/source/images/scrollbar_box.png and /dev/null differ diff --git a/source/images/sdcard.png b/source/images/sdcard.png deleted file mode 100644 index 9b1ad4ed..00000000 Binary files a/source/images/sdcard.png and /dev/null differ diff --git a/source/images/settings_background.png b/source/images/settings_background.png deleted file mode 100644 index 02ed90db..00000000 Binary files a/source/images/settings_background.png and /dev/null differ diff --git a/source/images/settings_button.png b/source/images/settings_button.png deleted file mode 100644 index 849a9d21..00000000 Binary files a/source/images/settings_button.png and /dev/null differ diff --git a/source/images/settings_button_over.png b/source/images/settings_button_over.png deleted file mode 100644 index f29a269f..00000000 Binary files a/source/images/settings_button_over.png and /dev/null differ diff --git a/source/images/settings_menu_button.png b/source/images/settings_menu_button.png deleted file mode 100644 index 4a782e42..00000000 Binary files a/source/images/settings_menu_button.png and /dev/null differ diff --git a/source/images/startgame_arrow_left.png b/source/images/startgame_arrow_left.png deleted file mode 100644 index 4ed6e29e..00000000 Binary files a/source/images/startgame_arrow_left.png and /dev/null differ diff --git a/source/images/startgame_arrow_right.png b/source/images/startgame_arrow_right.png deleted file mode 100644 index 0ed3d0fa..00000000 Binary files a/source/images/startgame_arrow_right.png and /dev/null differ diff --git a/source/images/tab_bg1.png b/source/images/tab_bg1.png deleted file mode 100644 index fd738f65..00000000 Binary files a/source/images/tab_bg1.png and /dev/null differ diff --git a/source/images/tab_bg2.png b/source/images/tab_bg2.png deleted file mode 100644 index 505a679f..00000000 Binary files a/source/images/tab_bg2.png and /dev/null differ diff --git a/source/images/tab_bg3.png b/source/images/tab_bg3.png deleted file mode 100644 index 71929e1c..00000000 Binary files a/source/images/tab_bg3.png and /dev/null differ diff --git a/source/images/tooltip_left.png b/source/images/tooltip_left.png deleted file mode 100644 index b1114ee1..00000000 Binary files a/source/images/tooltip_left.png and /dev/null differ diff --git a/source/images/tooltip_right.png b/source/images/tooltip_right.png deleted file mode 100644 index 86bd7ed5..00000000 Binary files a/source/images/tooltip_right.png and /dev/null differ diff --git a/source/images/tooltip_tile.png b/source/images/tooltip_tile.png deleted file mode 100644 index 9b68e2f7..00000000 Binary files a/source/images/tooltip_tile.png and /dev/null differ diff --git a/source/images/updateRev.png b/source/images/updateRev.png deleted file mode 100644 index 1bd1aaef..00000000 Binary files a/source/images/updateRev.png and /dev/null differ diff --git a/source/images/wbackground.png b/source/images/wbackground.png deleted file mode 100644 index 841e57c6..00000000 Binary files a/source/images/wbackground.png and /dev/null differ diff --git a/source/images/wdialogue_box_startgame.png b/source/images/wdialogue_box_startgame.png deleted file mode 100644 index 033814d8..00000000 Binary files a/source/images/wdialogue_box_startgame.png and /dev/null differ diff --git a/source/images/wiimote.png b/source/images/wiimote.png deleted file mode 100644 index a868c218..00000000 Binary files a/source/images/wiimote.png and /dev/null differ diff --git a/source/images/wiimote_poweroff.png b/source/images/wiimote_poweroff.png deleted file mode 100644 index 50c2d9c6..00000000 Binary files a/source/images/wiimote_poweroff.png and /dev/null differ diff --git a/source/images/wiimote_poweroff_over.png b/source/images/wiimote_poweroff_over.png deleted file mode 100644 index dce26baf..00000000 Binary files a/source/images/wiimote_poweroff_over.png and /dev/null differ diff --git a/source/input.cpp b/source/input.cpp deleted file mode 100644 index a4ef1460..00000000 --- a/source/input.cpp +++ /dev/null @@ -1,115 +0,0 @@ -/**************************************************************************** - * libwiigui Template - * Tantric 2009 - * - * input.cpp - * Wii/GameCube controller management - ***************************************************************************/ - -#include -#include -#include -#include -#include -#include -#include -#include - -#include "menu.h" -#include "video.h" -#include "input.h" -#include "libwiigui/gui.h" - -int rumbleRequest[4] = {0,0,0,0}; -GuiTrigger userInput[4]; -static int rumbleCount[4] = {0,0,0,0}; - -/**************************************************************************** - * ShutoffRumble - ***************************************************************************/ - -void ShutoffRumble() -{ - for(int i=0;i<4;i++) - { - WPAD_Rumble(i, 0); - rumbleCount[i] = 0; - } -} - -/**************************************************************************** - * DoRumble - ***************************************************************************/ - -void DoRumble(int i) -{ - if(rumbleRequest[i] && rumbleCount[i] < 3) - { - WPAD_Rumble(i, 1); // rumble on - rumbleCount[i]++; - } - else if(rumbleRequest[i]) - { - rumbleCount[i] = 20; - rumbleRequest[i] = 0; - } - else - { - if(rumbleCount[i]) - rumbleCount[i]--; - WPAD_Rumble(i, 0); // rumble off - } -} - -/**************************************************************************** - * WPAD_Stick - * - * Get X/Y value from Wii Joystick (classic, nunchuk) input - ***************************************************************************/ - -s8 WPAD_Stick(u8 chan, u8 right, int axis) -{ - float mag = 0.0; - float ang = 0.0; - WPADData *data = WPAD_Data(chan); - - switch (data->exp.type) - { - case WPAD_EXP_NUNCHUK: - case WPAD_EXP_GUITARHERO3: - if (right == 0) - { - mag = data->exp.nunchuk.js.mag; - ang = data->exp.nunchuk.js.ang; - } - break; - - case WPAD_EXP_CLASSIC: - if (right == 0) - { - mag = data->exp.classic.ljs.mag; - ang = data->exp.classic.ljs.ang; - } - else - { - mag = data->exp.classic.rjs.mag; - ang = data->exp.classic.rjs.ang; - } - break; - - default: - break; - } - - /* calculate x/y value (angle need to be converted into radian) */ - if (mag > 1.0) mag = 1.0; - else if (mag < -1.0) mag = -1.0; - double val; - - if(axis == 0) // x-axis - val = mag * sin((PI * ang)/180.0f); - else // y-axis - val = mag * cos((PI * ang)/180.0f); - - return (s8)(val * 128.0f); -} diff --git a/source/input.h b/source/input.h deleted file mode 100644 index aed6ab33..00000000 --- a/source/input.h +++ /dev/null @@ -1,23 +0,0 @@ -/**************************************************************************** - * libwiigui Template - * Tantric 2009 - * - * input.h - * Wii/GameCube controller management - ***************************************************************************/ - -#ifndef _INPUT_H_ -#define _INPUT_H_ - -#include -#include - -#define PI 3.14159265f -#define PADCAL 50 - -extern int rumbleRequest[4]; - -void ShutoffRumble(); -void DoRumble(int i); - -#endif diff --git a/source/kenobiwii.h b/source/kenobiwii.h deleted file mode 100644 index bc3d0ed1..00000000 --- a/source/kenobiwii.h +++ /dev/null @@ -1,264 +0,0 @@ -/* - This file was autogenerated by raw2c. -Visit http://www.devkitpro.org -*/ - -const unsigned char kenobiwii[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x26, 0xa0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x94, 0x21, 0xff, 0x58, 0x90, 0x01, 0x00, 0x08, - 0x7c, 0x08, 0x02, 0xa6, 0x90, 0x01, 0x00, 0xac, 0x7c, 0x00, 0x00, 0x26, 0x90, 0x01, 0x00, 0x0c, - 0x7c, 0x09, 0x02, 0xa6, 0x90, 0x01, 0x00, 0x10, 0x7c, 0x01, 0x02, 0xa6, 0x90, 0x01, 0x00, 0x14, - 0xbc, 0x61, 0x00, 0x18, 0x7f, 0x20, 0x00, 0xa6, 0x63, 0x3a, 0x20, 0x00, 0x73, 0x5a, 0xf9, 0xff, - 0x7f, 0x40, 0x01, 0x24, 0xd8, 0x41, 0x00, 0x98, 0xd8, 0x61, 0x00, 0xa0, 0x3f, 0xe0, 0x80, 0x00, - 0x3e, 0x80, 0xcc, 0x00, 0xa3, 0x94, 0x40, 0x10, 0x63, 0x95, 0x00, 0xff, 0xb2, 0xb4, 0x40, 0x10, - 0x48, 0x00, 0x06, 0xb1, 0x3a, 0xa0, 0x00, 0x00, 0x3a, 0xc0, 0x00, 0x19, 0x3a, 0xe0, 0x00, 0xd0, - 0x3f, 0x00, 0xcd, 0x00, 0x63, 0xf2, 0x26, 0xa0, 0x80, 0x01, 0x00, 0xac, 0x90, 0x12, 0x00, 0x04, - 0x92, 0xb8, 0x64, 0x3c, 0x48, 0x00, 0x04, 0x85, 0x41, 0x82, 0x05, 0xfc, 0x2c, 0x1d, 0x00, 0x04, - 0x40, 0x80, 0x00, 0x10, 0x2c, 0x1d, 0x00, 0x01, 0x41, 0x80, 0x05, 0xec, 0x48, 0x00, 0x03, 0xa8, - 0x41, 0x82, 0x05, 0x48, 0x2c, 0x1d, 0x00, 0x06, 0x41, 0x82, 0x00, 0x8c, 0x2c, 0x1d, 0x00, 0x07, - 0x41, 0x82, 0x03, 0x8c, 0x2c, 0x1d, 0x00, 0x08, 0x41, 0x82, 0x05, 0xd8, 0x2c, 0x1d, 0x00, 0x09, - 0x41, 0x82, 0x00, 0xa0, 0x2c, 0x1d, 0x00, 0x10, 0x41, 0x82, 0x00, 0x98, 0x2c, 0x1d, 0x00, 0x2f, - 0x41, 0x82, 0x00, 0x70, 0x2c, 0x1d, 0x00, 0x30, 0x41, 0x82, 0x00, 0x78, 0x2c, 0x1d, 0x00, 0x38, - 0x41, 0x82, 0x05, 0x80, 0x2c, 0x1d, 0x00, 0x40, 0x41, 0x82, 0x03, 0x9c, 0x2c, 0x1d, 0x00, 0x41, - 0x41, 0x82, 0x03, 0xb0, 0x2c, 0x1d, 0x00, 0x44, 0x41, 0x82, 0x00, 0x68, 0x2c, 0x1d, 0x00, 0x50, - 0x41, 0x82, 0x00, 0x20, 0x2c, 0x1d, 0x00, 0x60, 0x41, 0x82, 0x00, 0x24, 0x2c, 0x1d, 0x00, 0x89, - 0x41, 0x82, 0x00, 0x50, 0x2c, 0x1d, 0x00, 0x99, 0x41, 0x82, 0x05, 0x64, 0x48, 0x00, 0x05, 0x68, - 0x80, 0x72, 0x00, 0x00, 0x48, 0x00, 0x04, 0x81, 0x48, 0x00, 0x05, 0x5c, 0x48, 0x00, 0x05, 0xe5, - 0x48, 0x00, 0x05, 0x54, 0x38, 0x80, 0x00, 0x01, 0x90, 0x92, 0x00, 0x00, 0x48, 0x00, 0x05, 0x48, - 0x48, 0x00, 0x04, 0x61, 0x3a, 0x00, 0x00, 0xa0, 0x63, 0xec, 0x26, 0xc4, 0x48, 0x00, 0x03, 0x6c, - 0x38, 0x60, 0x01, 0x20, 0x63, 0xec, 0x26, 0xc4, 0x48, 0x00, 0x04, 0x21, 0x48, 0x00, 0x05, 0x28, - 0x2f, 0x1d, 0x00, 0x10, 0x2e, 0x9d, 0x00, 0x44, 0x63, 0xe4, 0x1a, 0xb4, 0x3c, 0x60, 0x80, 0x00, - 0x60, 0x63, 0x03, 0x00, 0x48, 0x00, 0x05, 0x65, 0x38, 0x63, 0x0a, 0x00, 0x48, 0x00, 0x05, 0x5d, - 0x38, 0x63, 0x06, 0x00, 0x48, 0x00, 0x05, 0x55, 0x63, 0xec, 0x26, 0xb4, 0x92, 0xac, 0x00, 0x00, - 0x92, 0xac, 0x00, 0x04, 0x92, 0xac, 0x00, 0x08, 0x63, 0xe4, 0x26, 0xc4, 0x81, 0x24, 0x00, 0x18, - 0x80, 0x72, 0x00, 0x00, 0x2c, 0x03, 0x00, 0x02, 0x40, 0x82, 0x00, 0x0c, 0x41, 0x96, 0x00, 0x0c, - 0x48, 0x00, 0x00, 0x20, 0x38, 0x60, 0x00, 0x00, 0x90, 0x6c, 0x00, 0x0c, 0x40, 0x82, 0x00, 0x14, - 0x40, 0x96, 0x00, 0x10, 0x61, 0x29, 0x04, 0x00, 0x91, 0x24, 0x00, 0x18, 0x48, 0x00, 0x02, 0x70, - 0x55, 0x29, 0x05, 0xa8, 0x91, 0x24, 0x00, 0x18, 0x41, 0x96, 0x04, 0xac, 0x41, 0x9a, 0x00, 0x08, - 0x39, 0x8c, 0x00, 0x04, 0x38, 0x60, 0x00, 0x04, 0x48, 0x00, 0x03, 0x61, 0x40, 0x99, 0x00, 0x10, - 0x39, 0x8c, 0x00, 0x04, 0x38, 0x60, 0x00, 0x04, 0x48, 0x00, 0x03, 0x51, 0x63, 0xe4, 0x26, 0xb4, - 0x80, 0x64, 0x00, 0x00, 0x80, 0x84, 0x00, 0x04, 0x7c, 0x72, 0xfb, 0xa6, 0x7c, 0x95, 0xfb, 0xa6, - 0x48, 0x00, 0x04, 0x74, 0x7c, 0x32, 0x43, 0xa6, 0x7c, 0x3a, 0x02, 0xa6, 0x7c, 0x73, 0x43, 0xa6, - 0x7c, 0x7b, 0x02, 0xa6, 0x54, 0x63, 0x05, 0xa8, 0x90, 0x60, 0x26, 0xdc, 0x54, 0x63, 0x06, 0x20, - 0x60, 0x63, 0x20, 0x00, 0x54, 0x63, 0x04, 0x5e, 0x7c, 0x7b, 0x03, 0xa6, 0x3c, 0x60, 0x80, 0x00, - 0x60, 0x63, 0x1a, 0xf4, 0x7c, 0x7a, 0x03, 0xa6, 0x4c, 0x00, 0x01, 0x2c, 0x7c, 0x00, 0x04, 0xac, - 0x4c, 0x00, 0x00, 0x64, 0x3c, 0x60, 0x80, 0x00, 0x60, 0x63, 0x26, 0xc4, 0x90, 0x23, 0x00, 0x14, - 0x7c, 0x61, 0x1b, 0x78, 0x7c, 0x73, 0x42, 0xa6, 0xbc, 0x41, 0x00, 0x24, 0x7c, 0x24, 0x0b, 0x78, - 0x7c, 0x32, 0x42, 0xa6, 0x90, 0x04, 0x00, 0x1c, 0x90, 0x24, 0x00, 0x20, 0x7c, 0x68, 0x02, 0xa6, - 0x90, 0x64, 0x00, 0x9c, 0x7c, 0x60, 0x00, 0x26, 0x90, 0x64, 0x00, 0x00, 0x7c, 0x61, 0x02, 0xa6, - 0x90, 0x64, 0x00, 0x04, 0x7c, 0x69, 0x02, 0xa6, 0x90, 0x64, 0x00, 0x08, 0x7c, 0x72, 0x02, 0xa6, - 0x90, 0x64, 0x00, 0x0c, 0x7c, 0x73, 0x02, 0xa6, 0x90, 0x64, 0x00, 0x10, 0x39, 0x20, 0x00, 0x00, - 0x7d, 0x32, 0xfb, 0xa6, 0x7d, 0x35, 0xfb, 0xa6, 0xd0, 0x04, 0x00, 0xa0, 0xd0, 0x24, 0x00, 0xa4, - 0xd0, 0x44, 0x00, 0xa8, 0xd0, 0x64, 0x00, 0xac, 0xd0, 0x84, 0x00, 0xb0, 0xd0, 0xa4, 0x00, 0xb4, - 0xd0, 0xc4, 0x00, 0xb8, 0xd0, 0xe4, 0x00, 0xbc, 0xd1, 0x04, 0x00, 0xc0, 0xd1, 0x24, 0x00, 0xc4, - 0xd1, 0x44, 0x00, 0xc8, 0xd1, 0x64, 0x00, 0xcc, 0xd1, 0x84, 0x00, 0xd0, 0xd1, 0xa4, 0x00, 0xd4, - 0xd1, 0xc4, 0x00, 0xd8, 0xd1, 0xe4, 0x00, 0xdc, 0xd2, 0x04, 0x00, 0xe0, 0xd2, 0x24, 0x00, 0xe4, - 0xd2, 0x44, 0x00, 0xe8, 0xd2, 0x64, 0x00, 0xec, 0xd2, 0x84, 0x00, 0xf0, 0xd2, 0xa4, 0x00, 0xf4, - 0xd2, 0xc4, 0x00, 0xf8, 0xd2, 0xe4, 0x00, 0xfc, 0xd3, 0x04, 0x01, 0x00, 0xd3, 0x24, 0x01, 0x04, - 0xd3, 0x44, 0x01, 0x08, 0xd3, 0x64, 0x01, 0x0c, 0xd3, 0x84, 0x01, 0x10, 0xd3, 0xa4, 0x01, 0x14, - 0xd3, 0xc4, 0x01, 0x18, 0xd3, 0xe4, 0x01, 0x1c, 0x3f, 0xe0, 0x80, 0x00, 0x63, 0xe5, 0x26, 0xb4, - 0x82, 0x05, 0x00, 0x00, 0x82, 0x25, 0x00, 0x04, 0x82, 0x65, 0x00, 0x0c, 0x2c, 0x13, 0x00, 0x00, - 0x41, 0x82, 0x00, 0x74, 0x2c, 0x13, 0x00, 0x02, 0x40, 0x82, 0x00, 0x18, 0x81, 0x24, 0x00, 0x14, - 0x39, 0x33, 0x00, 0x03, 0x91, 0x25, 0x00, 0x00, 0x91, 0x25, 0x00, 0x0c, 0x48, 0x00, 0x00, 0x6c, - 0x7c, 0x10, 0x98, 0x00, 0x41, 0x82, 0x00, 0x38, 0x7c, 0x11, 0x98, 0x00, 0x41, 0x82, 0x00, 0x30, - 0x7d, 0x30, 0x8a, 0x14, 0x91, 0x25, 0x00, 0x0c, 0x82, 0x05, 0x00, 0x08, 0x2c, 0x10, 0x00, 0x00, - 0x41, 0x82, 0x00, 0x48, 0x80, 0x64, 0x00, 0x10, 0x7c, 0x10, 0x18, 0x00, 0x40, 0x82, 0x00, 0x10, - 0x3a, 0x00, 0x00, 0x00, 0x92, 0x05, 0x00, 0x08, 0x48, 0x00, 0x00, 0x30, 0x3a, 0x20, 0x00, 0x00, - 0x92, 0x25, 0x00, 0x0c, 0x81, 0x24, 0x00, 0x18, 0x61, 0x29, 0x04, 0x00, 0x91, 0x24, 0x00, 0x18, - 0x48, 0x00, 0x00, 0x30, 0x7e, 0x12, 0xfb, 0xa6, 0x7e, 0x35, 0xfb, 0xa6, 0x39, 0x20, 0x00, 0x01, - 0x91, 0x25, 0x00, 0x0c, 0x48, 0x00, 0x00, 0x1c, 0x38, 0xa0, 0x00, 0x02, 0x63, 0xe4, 0x26, 0xa0, - 0x90, 0xa4, 0x00, 0x00, 0x38, 0x60, 0x00, 0x11, 0x48, 0x00, 0x01, 0xbd, 0x4b, 0xff, 0xfc, 0x1d, - 0x7c, 0x20, 0x00, 0xa6, 0x54, 0x21, 0x07, 0xfa, 0x54, 0x21, 0x04, 0x5e, 0x7c, 0x20, 0x01, 0x24, - 0x63, 0xe1, 0x26, 0xc4, 0x80, 0x61, 0x00, 0x00, 0x7c, 0x6f, 0xf1, 0x20, 0x80, 0x61, 0x00, 0x14, - 0x7c, 0x7a, 0x03, 0xa6, 0x80, 0x61, 0x00, 0x18, 0x7c, 0x7b, 0x03, 0xa6, 0x80, 0x61, 0x00, 0x9c, - 0x7c, 0x68, 0x03, 0xa6, 0xb8, 0x41, 0x00, 0x24, 0x80, 0x01, 0x00, 0x1c, 0x80, 0x21, 0x00, 0x20, - 0x4c, 0x00, 0x01, 0x2c, 0x7c, 0x00, 0x04, 0xac, 0x4c, 0x00, 0x00, 0x64, 0x92, 0xb2, 0x00, 0x00, - 0x48, 0x00, 0x02, 0x50, 0x2e, 0x9d, 0x00, 0x02, 0x38, 0x60, 0x00, 0x08, 0x63, 0xec, 0x26, 0xa8, - 0x48, 0x00, 0x00, 0xf9, 0x80, 0xac, 0x00, 0x00, 0x80, 0x6c, 0x00, 0x04, 0x98, 0x65, 0x00, 0x00, - 0x41, 0x94, 0x00, 0x10, 0xb0, 0x65, 0x00, 0x00, 0x41, 0x96, 0x00, 0x08, 0x90, 0x65, 0x00, 0x00, - 0x7c, 0x00, 0x28, 0xac, 0x7c, 0x00, 0x04, 0xac, 0x7c, 0x00, 0x2f, 0xac, 0x4c, 0x00, 0x01, 0x2c, - 0x48, 0x00, 0x02, 0x04, 0x48, 0x00, 0x01, 0x1d, 0x38, 0x60, 0x00, 0x04, 0x63, 0xec, 0x26, 0xa8, - 0x48, 0x00, 0x00, 0xb9, 0x82, 0x0c, 0x00, 0x00, 0x63, 0xec, 0x27, 0xe8, 0x48, 0x00, 0x00, 0x1c, - 0x48, 0x00, 0x01, 0x01, 0x38, 0x60, 0x00, 0x08, 0x63, 0xec, 0x26, 0xa8, 0x48, 0x00, 0x00, 0x9d, - 0x82, 0x0c, 0x00, 0x04, 0x81, 0x8c, 0x00, 0x00, 0x63, 0xfb, 0x26, 0xb0, 0x3a, 0x20, 0x0f, 0x80, - 0x48, 0x00, 0x02, 0x3d, 0x41, 0x82, 0x00, 0x20, 0x7e, 0x23, 0x8b, 0x78, 0x48, 0x00, 0x00, 0x7d, - 0x48, 0x00, 0x00, 0xd1, 0x41, 0x82, 0xff, 0xfc, 0x7d, 0x8c, 0x72, 0x14, 0x35, 0x6b, 0xff, 0xff, - 0x41, 0x81, 0xff, 0xe8, 0x80, 0x7b, 0x00, 0x00, 0x2c, 0x03, 0x00, 0x00, 0x41, 0x82, 0x00, 0x08, - 0x48, 0x00, 0x00, 0x59, 0x7c, 0x00, 0x60, 0xac, 0x7c, 0x00, 0x04, 0xac, 0x7c, 0x00, 0x67, 0xac, - 0x4c, 0x00, 0x01, 0x2c, 0x48, 0x00, 0x01, 0x80, 0x7f, 0xc8, 0x02, 0xa6, 0x3c, 0x60, 0xa0, 0x00, - 0x48, 0x00, 0x00, 0x15, 0x76, 0x03, 0x08, 0x00, 0x56, 0x1d, 0x86, 0x3e, 0x7f, 0xc8, 0x03, 0xa6, - 0x4e, 0x80, 0x00, 0x20, 0x92, 0xf8, 0x68, 0x14, 0x90, 0x78, 0x68, 0x24, 0x92, 0xd8, 0x68, 0x20, - 0x80, 0xb8, 0x68, 0x20, 0x70, 0xa5, 0x00, 0x01, 0x40, 0x82, 0xff, 0xf8, 0x82, 0x18, 0x68, 0x24, - 0x90, 0xb8, 0x68, 0x14, 0x4e, 0x80, 0x00, 0x20, 0x7d, 0x48, 0x02, 0xa6, 0x7c, 0x69, 0x03, 0xa6, - 0x39, 0xc0, 0x00, 0x00, 0x48, 0x00, 0x00, 0x79, 0x48, 0x00, 0x00, 0x75, 0x4b, 0xff, 0xff, 0xad, - 0x41, 0x82, 0xff, 0xf4, 0x7f, 0xae, 0x61, 0xae, 0x39, 0xce, 0x00, 0x01, 0x42, 0x00, 0xff, 0xe8, - 0x7d, 0x48, 0x03, 0xa6, 0x4e, 0x80, 0x00, 0x20, 0x7d, 0x48, 0x02, 0xa6, 0x7c, 0x69, 0x03, 0xa6, - 0x39, 0xc0, 0x00, 0x00, 0x7c, 0x6c, 0x70, 0xae, 0x48, 0x00, 0x00, 0x1d, 0x41, 0x82, 0xff, 0xf8, - 0x39, 0xce, 0x00, 0x01, 0x42, 0x00, 0xff, 0xf0, 0x7d, 0x48, 0x03, 0xa6, 0x4e, 0x80, 0x00, 0x20, - 0x38, 0x60, 0x00, 0xaa, 0x7f, 0xc8, 0x02, 0xa6, 0x54, 0x63, 0xa0, 0x16, 0x64, 0x63, 0xb0, 0x00, - 0x3a, 0xc0, 0x00, 0x19, 0x3a, 0xe0, 0x00, 0xd0, 0x3f, 0x00, 0xcd, 0x00, 0x4b, 0xff, 0xff, 0x69, - 0x56, 0x03, 0x37, 0xff, 0x7f, 0xc8, 0x03, 0xa6, 0x4e, 0x80, 0x00, 0x20, 0x7f, 0xc8, 0x02, 0xa6, - 0x3c, 0x60, 0xd0, 0x00, 0x4b, 0xff, 0xff, 0x51, 0x56, 0x03, 0x37, 0xff, 0x41, 0x82, 0xff, 0xf4, - 0x7f, 0xc8, 0x03, 0xa6, 0x4e, 0x80, 0x00, 0x20, 0x4b, 0xff, 0xff, 0xb9, 0x38, 0x60, 0x00, 0x08, - 0x63, 0xec, 0x26, 0xa8, 0x4b, 0xff, 0xff, 0x55, 0x80, 0xac, 0x00, 0x04, 0x81, 0x8c, 0x00, 0x00, - 0x63, 0xfb, 0x26, 0xb0, 0x62, 0xb1, 0xf8, 0x00, 0x7e, 0x0c, 0x28, 0x50, 0x48, 0x00, 0x00, 0xf1, - 0x41, 0x81, 0x00, 0x10, 0x82, 0x3b, 0x00, 0x00, 0x2c, 0x11, 0x00, 0x00, 0x41, 0x82, 0x00, 0x68, - 0x7e, 0x23, 0x8b, 0x78, 0x4b, 0xff, 0xff, 0x55, 0x4b, 0xff, 0xff, 0xa5, 0x4b, 0xff, 0xff, 0xa1, - 0x4b, 0xff, 0xfe, 0xd9, 0x41, 0x82, 0xff, 0xf4, 0x2c, 0x1d, 0x00, 0xcc, 0x41, 0x82, 0x00, 0x48, - 0x2c, 0x1d, 0x00, 0xbb, 0x41, 0x82, 0xff, 0xdc, 0x2c, 0x1d, 0x00, 0xaa, 0x40, 0x82, 0xff, 0xdc, - 0x7d, 0x8c, 0x72, 0x14, 0x35, 0x6b, 0xff, 0xff, 0x41, 0x80, 0x00, 0x2c, 0x4b, 0xff, 0xff, 0xb4, - 0x7e, 0xb5, 0xfb, 0xa6, 0x7e, 0xb2, 0xfb, 0xa6, 0x63, 0xe4, 0x26, 0xc4, 0x81, 0x24, 0x00, 0x18, - 0x55, 0x29, 0x05, 0xa8, 0x91, 0x24, 0x00, 0x18, 0x48, 0x00, 0x00, 0x0c, 0x38, 0x60, 0x00, 0x80, - 0x4b, 0xff, 0xff, 0x25, 0x80, 0x92, 0x00, 0x00, 0x2c, 0x04, 0x00, 0x00, 0x40, 0x82, 0xf9, 0xf8, - 0xb3, 0x94, 0x40, 0x10, 0xc8, 0x41, 0x00, 0x98, 0xc8, 0x61, 0x00, 0xa0, 0x7f, 0x20, 0x00, 0xa6, - 0x80, 0x01, 0x00, 0xac, 0x7c, 0x08, 0x03, 0xa6, 0x80, 0x01, 0x00, 0x0c, 0x7c, 0x0f, 0xf1, 0x20, - 0x80, 0x01, 0x00, 0x10, 0x7c, 0x09, 0x03, 0xa6, 0x80, 0x01, 0x00, 0x14, 0x7c, 0x01, 0x03, 0xa6, - 0xb8, 0x61, 0x00, 0x18, 0x80, 0x01, 0x00, 0x08, 0x38, 0x21, 0x00, 0xa8, 0x4c, 0x00, 0x01, 0x2c, - 0x7c, 0x00, 0x04, 0xac, 0x4e, 0x80, 0x00, 0x20, 0x7e, 0x23, 0x20, 0x50, 0x3c, 0xa0, 0x48, 0x00, - 0x52, 0x25, 0x01, 0xba, 0x90, 0xa3, 0x00, 0x00, 0x7c, 0x00, 0x18, 0xac, 0x7c, 0x00, 0x04, 0xac, - 0x7c, 0x00, 0x1f, 0xac, 0x4c, 0x00, 0x01, 0x2c, 0x4e, 0x80, 0x00, 0x20, 0x7d, 0x70, 0x8b, 0xd7, - 0x7d, 0x4b, 0x89, 0xd6, 0x7d, 0x4a, 0x80, 0x50, 0x91, 0x5b, 0x00, 0x00, 0x4e, 0x80, 0x00, 0x20, - 0x7f, 0xa8, 0x02, 0xa6, 0x63, 0xef, 0x27, 0xe8, 0x63, 0xe7, 0x18, 0x08, 0x3c, 0xc0, 0x80, 0x00, - 0x7c, 0xd0, 0x33, 0x78, 0x39, 0x00, 0x00, 0x00, 0x3c, 0x60, 0x00, 0xd0, 0x60, 0x63, 0xc0, 0xde, - 0x80, 0x8f, 0x00, 0x00, 0x7c, 0x03, 0x20, 0x00, 0x40, 0x82, 0x00, 0x18, 0x80, 0x8f, 0x00, 0x04, - 0x7c, 0x03, 0x20, 0x00, 0x40, 0x82, 0x00, 0x0c, 0x39, 0xef, 0x00, 0x08, 0x48, 0x00, 0x00, 0x0c, - 0x7f, 0xa8, 0x03, 0xa6, 0x4e, 0x80, 0x00, 0x20, 0x80, 0x6f, 0x00, 0x00, 0x80, 0x8f, 0x00, 0x04, - 0x39, 0xef, 0x00, 0x08, 0x71, 0x09, 0x00, 0x01, 0x2f, 0x89, 0x00, 0x00, 0x39, 0x20, 0x00, 0x00, - 0x54, 0x6a, 0x1f, 0x7e, 0x54, 0x65, 0x3f, 0x7e, 0x74, 0x6b, 0x10, 0x00, 0x54, 0x63, 0x01, 0xfe, - 0x40, 0x82, 0x00, 0x0c, 0x54, 0xcc, 0x00, 0x0c, 0x48, 0x00, 0x00, 0x08, 0x7e, 0x0c, 0x83, 0x78, - 0x2e, 0x05, 0x00, 0x00, 0x2c, 0x0a, 0x00, 0x01, 0x41, 0xa0, 0x00, 0x2c, 0x41, 0xa2, 0x00, 0xe4, - 0x2c, 0x0a, 0x00, 0x03, 0x41, 0xa0, 0x01, 0xb0, 0x41, 0x82, 0x02, 0x54, 0x2c, 0x0a, 0x00, 0x05, - 0x41, 0x80, 0x02, 0xdc, 0x41, 0xa2, 0x04, 0xe8, 0x2c, 0x0a, 0x00, 0x07, 0x41, 0xa0, 0x05, 0x14, - 0x48, 0x00, 0x05, 0xf8, 0x7d, 0x8c, 0x1a, 0x14, 0x2c, 0x05, 0x00, 0x03, 0x41, 0x82, 0x00, 0x48, - 0x41, 0x81, 0x00, 0x60, 0x40, 0xbe, 0xff, 0x84, 0x2e, 0x05, 0x00, 0x01, 0x41, 0x91, 0x00, 0x2c, - 0x54, 0x8a, 0x84, 0x3e, 0x41, 0x92, 0x00, 0x10, 0x7c, 0x89, 0x61, 0xae, 0x39, 0x29, 0x00, 0x01, - 0x48, 0x00, 0x00, 0x0c, 0x7c, 0x89, 0x63, 0x2e, 0x39, 0x29, 0x00, 0x02, 0x35, 0x4a, 0xff, 0xff, - 0x40, 0xa0, 0xff, 0xe4, 0x4b, 0xff, 0xff, 0x54, 0x55, 0x8c, 0x00, 0x3a, 0x90, 0x8c, 0x00, 0x00, - 0x4b, 0xff, 0xff, 0x48, 0x7c, 0x89, 0x23, 0x78, 0x40, 0x9e, 0x04, 0xd0, 0x35, 0x29, 0xff, 0xff, - 0x41, 0x80, 0x04, 0xc8, 0x7c, 0xa9, 0x78, 0xae, 0x7c, 0xa9, 0x61, 0xae, 0x4b, 0xff, 0xff, 0xf0, - 0x39, 0xef, 0x00, 0x08, 0x40, 0xbe, 0xff, 0x24, 0x80, 0xaf, 0xff, 0xf8, 0x81, 0x6f, 0xff, 0xfc, - 0x54, 0xb1, 0x04, 0x3e, 0x54, 0xaa, 0x85, 0x3e, 0x54, 0xa5, 0x27, 0x3e, 0x2e, 0x85, 0x00, 0x01, - 0x41, 0x96, 0x00, 0x10, 0x41, 0xb5, 0x00, 0x14, 0x7c, 0x89, 0x61, 0xae, 0x48, 0x00, 0x00, 0x10, - 0x7c, 0x89, 0x63, 0x2e, 0x48, 0x00, 0x00, 0x08, 0x7c, 0x89, 0x61, 0x2e, 0x7c, 0x84, 0x5a, 0x14, - 0x7d, 0x29, 0x8a, 0x14, 0x35, 0x4a, 0xff, 0xff, 0x40, 0x80, 0xff, 0xd4, 0x4b, 0xff, 0xfe, 0xdc, - 0x54, 0x69, 0x07, 0xff, 0x41, 0x82, 0x00, 0x10, 0x55, 0x08, 0xf8, 0x7e, 0x71, 0x09, 0x00, 0x01, - 0x2f, 0x89, 0x00, 0x00, 0x2e, 0x85, 0x00, 0x04, 0x2d, 0x8a, 0x00, 0x05, 0x7d, 0x13, 0x43, 0x78, - 0x52, 0x68, 0x08, 0x3c, 0x40, 0x9e, 0x00, 0x78, 0x41, 0x8d, 0x04, 0xbc, 0x7d, 0x8c, 0x1a, 0x14, - 0x41, 0x8c, 0x00, 0x0c, 0x41, 0x94, 0x00, 0x30, 0x48, 0x00, 0x00, 0x1c, 0x40, 0x94, 0x00, 0x10, - 0x55, 0x8c, 0x00, 0x3a, 0x81, 0x6c, 0x00, 0x00, 0x48, 0x00, 0x00, 0x1c, 0x55, 0x8c, 0x00, 0x3c, - 0xa1, 0x6c, 0x00, 0x00, 0x7c, 0x89, 0x20, 0xf8, 0x55, 0x29, 0x84, 0x3e, 0x7d, 0x6b, 0x48, 0x38, - 0x54, 0x84, 0x04, 0x3e, 0x7f, 0x0b, 0x20, 0x40, 0x70, 0xa9, 0x00, 0x03, 0x41, 0x82, 0x00, 0x18, - 0x2c, 0x09, 0x00, 0x02, 0x41, 0x82, 0x00, 0x18, 0x41, 0x81, 0x00, 0x1c, 0x40, 0x9a, 0x00, 0x20, - 0x48, 0x00, 0x00, 0x18, 0x41, 0x9a, 0x00, 0x18, 0x48, 0x00, 0x00, 0x10, 0x41, 0x99, 0x00, 0x10, - 0x48, 0x00, 0x00, 0x08, 0x41, 0x98, 0x00, 0x08, 0x61, 0x08, 0x00, 0x01, 0x40, 0x8e, 0xfe, 0x3c, - 0x41, 0x94, 0xfe, 0x38, 0x81, 0x6f, 0xff, 0xf8, 0x40, 0x9e, 0x00, 0x20, 0x70, 0x6c, 0x00, 0x08, - 0x41, 0x82, 0x00, 0x0c, 0x71, 0x0c, 0x00, 0x01, 0x41, 0x82, 0x00, 0x10, 0x39, 0x8b, 0x00, 0x10, - 0x51, 0x8b, 0x03, 0x36, 0x48, 0x00, 0x00, 0x08, 0x55, 0x6b, 0x07, 0x16, 0x91, 0x6f, 0xff, 0xf8, - 0x4b, 0xff, 0xfe, 0x08, 0x40, 0xbe, 0xfe, 0x04, 0x54, 0x69, 0x16, 0xba, 0x54, 0x6e, 0x87, 0xfe, - 0x2d, 0x8e, 0x00, 0x00, 0x2e, 0x05, 0x00, 0x04, 0x70, 0xae, 0x00, 0x03, 0x2e, 0x8e, 0x00, 0x02, - 0x41, 0x94, 0x00, 0x14, 0x41, 0x96, 0x00, 0x50, 0x7c, 0x64, 0x07, 0x34, 0x7c, 0x84, 0x7a, 0x14, - 0x48, 0x00, 0x00, 0x68, 0x54, 0x65, 0xa7, 0xff, 0x41, 0x82, 0x00, 0x0c, 0x7d, 0x27, 0x48, 0x2e, - 0x7c, 0x84, 0x4a, 0x14, 0x41, 0x8e, 0x00, 0x08, 0x7c, 0x8c, 0x22, 0x14, 0x2e, 0x8e, 0x00, 0x01, - 0x41, 0x96, 0x00, 0x08, 0x80, 0x84, 0x00, 0x00, 0x54, 0x63, 0x67, 0xff, 0x41, 0x82, 0x00, 0x3c, - 0x40, 0x90, 0x00, 0x0c, 0x7c, 0x84, 0x32, 0x14, 0x48, 0x00, 0x00, 0x30, 0x7c, 0x84, 0x82, 0x14, - 0x48, 0x00, 0x00, 0x28, 0x54, 0x65, 0xa7, 0xff, 0x41, 0x82, 0x00, 0x0c, 0x7d, 0x27, 0x48, 0x2e, - 0x7c, 0x84, 0x4a, 0x14, 0x40, 0x90, 0x00, 0x0c, 0x7c, 0xcc, 0x21, 0x2e, 0x4b, 0xff, 0xfd, 0x7c, - 0x7e, 0x0c, 0x21, 0x2e, 0x4b, 0xff, 0xfd, 0x74, 0x40, 0x90, 0x00, 0x0c, 0x7c, 0x86, 0x23, 0x78, - 0x4b, 0xff, 0xfd, 0x68, 0x7c, 0x90, 0x23, 0x78, 0x4b, 0xff, 0xfd, 0x60, 0x54, 0x89, 0x1e, 0x78, - 0x39, 0x29, 0x00, 0x40, 0x2c, 0x05, 0x00, 0x02, 0x41, 0x80, 0x00, 0x4c, 0x54, 0x6b, 0x67, 0xbf, - 0x2c, 0x0b, 0x00, 0x01, 0x41, 0x80, 0x00, 0x14, 0x41, 0x82, 0x00, 0x08, 0x48, 0x00, 0x00, 0x10, - 0x41, 0xbe, 0xfd, 0x38, 0x48, 0x00, 0x00, 0x08, 0x40, 0xbe, 0xfd, 0x30, 0x2c, 0x05, 0x00, 0x03, - 0x41, 0x81, 0x00, 0x10, 0x41, 0xa2, 0x00, 0x10, 0x7d, 0xe7, 0x48, 0x2e, 0x4b, 0xff, 0xfd, 0x1c, - 0x7d, 0xe7, 0x49, 0x2e, 0x7c, 0x64, 0x07, 0x34, 0x54, 0x84, 0x1a, 0x78, 0x7d, 0xef, 0x22, 0x14, - 0x4b, 0xff, 0xfd, 0x08, 0x40, 0xbe, 0xfd, 0x04, 0x7c, 0xa7, 0x4a, 0x14, 0x40, 0x92, 0x00, 0x14, - 0x54, 0x64, 0x04, 0x3e, 0x91, 0xe5, 0x00, 0x00, 0x90, 0x85, 0x00, 0x04, 0x4b, 0xff, 0xfc, 0xec, - 0x81, 0x25, 0x00, 0x04, 0x2c, 0x09, 0x00, 0x00, 0x41, 0xa2, 0xfc, 0xe0, 0x39, 0x29, 0xff, 0xff, - 0x91, 0x25, 0x00, 0x04, 0x81, 0xe5, 0x00, 0x00, 0x4b, 0xff, 0xfc, 0xd0, 0x40, 0xbe, 0xfc, 0xcc, - 0x54, 0x6b, 0x16, 0xba, 0x7f, 0x47, 0x5a, 0x14, 0x81, 0x3a, 0x00, 0x00, 0x54, 0x6e, 0x67, 0xbe, - 0x41, 0x92, 0x00, 0x84, 0x2e, 0x05, 0x00, 0x05, 0x40, 0x90, 0x01, 0x74, 0x2e, 0x05, 0x00, 0x03, - 0x40, 0x90, 0x00, 0x90, 0x2e, 0x05, 0x00, 0x01, 0x54, 0x65, 0x87, 0xff, 0x41, 0x82, 0x00, 0x08, - 0x7c, 0x8c, 0x22, 0x14, 0x2f, 0x0e, 0x00, 0x01, 0x40, 0x92, 0x00, 0x24, 0x41, 0xb9, 0x00, 0x18, - 0x41, 0x9a, 0x00, 0x0c, 0x88, 0x84, 0x00, 0x00, 0x48, 0x00, 0x00, 0xf8, 0xa0, 0x84, 0x00, 0x00, - 0x48, 0x00, 0x00, 0xf0, 0x80, 0x84, 0x00, 0x00, 0x48, 0x00, 0x00, 0xe8, 0x54, 0x73, 0xe5, 0x3e, - 0x41, 0xb9, 0x00, 0x20, 0x41, 0x9a, 0x00, 0x10, 0x99, 0x24, 0x00, 0x00, 0x38, 0x84, 0x00, 0x01, - 0x48, 0x00, 0x00, 0x18, 0xb1, 0x24, 0x00, 0x00, 0x38, 0x84, 0x00, 0x02, 0x48, 0x00, 0x00, 0x0c, - 0x91, 0x24, 0x00, 0x00, 0x38, 0x84, 0x00, 0x04, 0x36, 0x73, 0xff, 0xff, 0x40, 0x80, 0xff, 0xd4, - 0x4b, 0xff, 0xfc, 0x38, 0x54, 0x65, 0x87, 0xff, 0x41, 0x82, 0x00, 0x08, 0x7c, 0x84, 0x62, 0x14, - 0x71, 0xc5, 0x00, 0x01, 0x41, 0x82, 0x00, 0x9c, 0x7c, 0x84, 0x4a, 0x14, 0x48, 0x00, 0x00, 0x94, - 0x54, 0x6a, 0x87, 0xbe, 0x54, 0x8e, 0x16, 0xba, 0x7e, 0x67, 0x72, 0x14, 0x40, 0x92, 0x00, 0x08, - 0x3a, 0x6f, 0xff, 0xfc, 0x80, 0x9a, 0x00, 0x00, 0x81, 0x33, 0x00, 0x00, 0x71, 0x4b, 0x00, 0x01, - 0x41, 0x82, 0x00, 0x08, 0x7c, 0x9a, 0x23, 0x78, 0x71, 0x4b, 0x00, 0x02, 0x41, 0x82, 0x00, 0x10, - 0x7d, 0x33, 0x4b, 0x78, 0x40, 0xb2, 0x00, 0x08, 0x7e, 0x6c, 0x9a, 0x14, 0x54, 0x65, 0x67, 0x3f, - 0x2c, 0x05, 0x00, 0x09, 0x40, 0x80, 0x00, 0x54, 0x48, 0x00, 0x00, 0x79, 0x7c, 0x89, 0x22, 0x14, - 0x48, 0x00, 0x00, 0x40, 0x7c, 0x89, 0x21, 0xd6, 0x48, 0x00, 0x00, 0x38, 0x7d, 0x24, 0x23, 0x78, - 0x48, 0x00, 0x00, 0x30, 0x7d, 0x24, 0x20, 0x38, 0x48, 0x00, 0x00, 0x28, 0x7d, 0x24, 0x22, 0x78, - 0x48, 0x00, 0x00, 0x20, 0x7d, 0x24, 0x20, 0x30, 0x48, 0x00, 0x00, 0x18, 0x7d, 0x24, 0x24, 0x30, - 0x48, 0x00, 0x00, 0x10, 0x5d, 0x24, 0x20, 0x3e, 0x48, 0x00, 0x00, 0x08, 0x7d, 0x24, 0x26, 0x30, - 0x90, 0x9a, 0x00, 0x00, 0x4b, 0xff, 0xfb, 0x84, 0x2c, 0x05, 0x00, 0x0a, 0x41, 0x81, 0xfb, 0x7c, - 0xc0, 0x5a, 0x00, 0x00, 0xc0, 0x73, 0x00, 0x00, 0x41, 0x82, 0x00, 0x0c, 0xec, 0x43, 0x10, 0x2a, - 0x48, 0x00, 0x00, 0x08, 0xec, 0x43, 0x00, 0xb2, 0xd0, 0x5a, 0x00, 0x00, 0x4b, 0xff, 0xfb, 0x5c, - 0x7d, 0x48, 0x02, 0xa6, 0x54, 0xa5, 0x1e, 0x78, 0x7d, 0x4a, 0x2a, 0x14, 0x80, 0x9a, 0x00, 0x00, - 0x81, 0x33, 0x00, 0x00, 0x7d, 0x48, 0x03, 0xa6, 0x4e, 0x80, 0x00, 0x20, 0x40, 0xbe, 0xfb, 0x3c, - 0x54, 0x69, 0xc0, 0x3e, 0x7d, 0x8e, 0x63, 0x78, 0x48, 0x00, 0x00, 0x35, 0x41, 0x92, 0x00, 0x0c, - 0x7e, 0x31, 0x22, 0x14, 0x48, 0x00, 0x00, 0x08, 0x7d, 0x29, 0x22, 0x14, 0x54, 0x64, 0xc4, 0x3f, - 0x38, 0xa0, 0x00, 0x00, 0x41, 0x82, 0xfb, 0x14, 0x7d, 0x45, 0x88, 0xae, 0x7d, 0x45, 0x49, 0xae, - 0x38, 0xa5, 0x00, 0x01, 0x7c, 0x05, 0x20, 0x00, 0x4b, 0xff, 0xff, 0xec, 0x2e, 0x8a, 0x00, 0x04, - 0x55, 0x31, 0x36, 0xba, 0x2c, 0x11, 0x00, 0x3c, 0x7e, 0x27, 0x88, 0x2e, 0x40, 0x82, 0x00, 0x08, - 0x7d, 0xd1, 0x73, 0x78, 0x41, 0x96, 0x00, 0x08, 0xa2, 0x31, 0x00, 0x00, 0x55, 0x29, 0x56, 0xba, - 0x2c, 0x09, 0x00, 0x3c, 0x7d, 0x27, 0x48, 0x2e, 0x40, 0x82, 0x00, 0x08, 0x7d, 0xc9, 0x73, 0x78, - 0x41, 0x96, 0x00, 0x08, 0xa1, 0x29, 0x00, 0x00, 0x4e, 0x80, 0x00, 0x20, 0x2c, 0x05, 0x00, 0x04, - 0x40, 0x80, 0x00, 0x28, 0x7c, 0x89, 0x23, 0x78, 0x7d, 0xc3, 0x62, 0x14, 0x55, 0xce, 0x00, 0x3c, - 0x4b, 0xff, 0xff, 0xad, 0x7c, 0x84, 0x20, 0xf8, 0x54, 0x84, 0x04, 0x3e, 0x7d, 0x2b, 0x20, 0x38, - 0x7e, 0x24, 0x20, 0x38, 0x4b, 0xff, 0xfb, 0xbc, 0x54, 0x6b, 0xe4, 0x3e, 0x4b, 0xff, 0xfb, 0xb4, - 0x7c, 0x9a, 0x23, 0x78, 0x54, 0x84, 0x18, 0x38, 0x40, 0x92, 0x00, 0x20, 0x40, 0x9e, 0x00, 0x0c, - 0x7d, 0xe8, 0x03, 0xa6, 0x4e, 0x80, 0x00, 0x21, 0x7d, 0xe4, 0x7a, 0x14, 0x39, 0xef, 0x00, 0x07, - 0x55, 0xef, 0x00, 0x38, 0x4b, 0xff, 0xfa, 0x64, 0x2e, 0x05, 0x00, 0x03, 0x41, 0x91, 0x00, 0x5c, - 0x3c, 0xa0, 0x48, 0x00, 0x7d, 0x83, 0x62, 0x14, 0x55, 0x8c, 0x00, 0x3a, 0x40, 0x92, 0x00, 0x20, - 0x40, 0xbe, 0xfa, 0x48, 0x57, 0x44, 0x00, 0x3a, 0x7c, 0x8c, 0x20, 0x50, 0x50, 0x85, 0x01, 0xba, - 0x50, 0x65, 0x07, 0xfe, 0x90, 0xac, 0x00, 0x00, 0x4b, 0xff, 0xfa, 0x30, 0x40, 0xbe, 0xff, 0xbc, - 0x7d, 0x2c, 0x78, 0x50, 0x51, 0x25, 0x01, 0xba, 0x90, 0xac, 0x00, 0x00, 0x39, 0x8c, 0x00, 0x04, - 0x7d, 0x6f, 0x22, 0x14, 0x39, 0x6b, 0xff, 0xfc, 0x7d, 0x2b, 0x60, 0x50, 0x51, 0x25, 0x01, 0xba, - 0x90, 0xab, 0x00, 0x00, 0x4b, 0xff, 0xff, 0x94, 0x2e, 0x05, 0x00, 0x06, 0x41, 0x92, 0x00, 0x28, - 0x4b, 0xff, 0xfb, 0x20, 0x55, 0x8c, 0x84, 0x3e, 0x57, 0x44, 0x84, 0x3e, 0x57, 0x5a, 0x04, 0x3e, - 0x7c, 0x0c, 0x20, 0x00, 0x41, 0x80, 0xfb, 0xa4, 0x7c, 0x0c, 0xd0, 0x00, 0x40, 0x80, 0xfb, 0x9c, - 0x4b, 0xff, 0xf9, 0xd8, 0x57, 0x45, 0xff, 0xfe, 0x68, 0xa5, 0x00, 0x01, 0x71, 0x03, 0x00, 0x01, - 0x7c, 0x05, 0x18, 0x00, 0x41, 0x82, 0x00, 0x1c, 0x51, 0x1a, 0x0f, 0xbc, 0x6b, 0x5a, 0x00, 0x02, - 0x57, 0x45, 0xff, 0xff, 0x41, 0x82, 0x00, 0x08, 0x6b, 0x5a, 0x00, 0x01, 0x93, 0x4f, 0xff, 0xfc, - 0x53, 0x48, 0x07, 0xfe, 0x4b, 0xff, 0xf9, 0xa4, 0x2c, 0x0b, 0x00, 0x00, 0x40, 0x82, 0xf9, 0x94, - 0x40, 0x92, 0x00, 0x0c, 0x39, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x14, 0x54, 0x69, 0x06, 0xff, - 0x40, 0x82, 0x00, 0x08, 0x40, 0x9e, 0x00, 0x10, 0x54, 0x65, 0x67, 0xfe, 0x7d, 0x08, 0x4c, 0x30, - 0x7d, 0x08, 0x2a, 0x78, 0x54, 0x85, 0x00, 0x1f, 0x41, 0x82, 0x00, 0x08, 0x7c, 0xa6, 0x2b, 0x78, - 0x54, 0x85, 0x80, 0x1f, 0x41, 0x82, 0x00, 0x08, 0x7c, 0xb0, 0x2b, 0x78, 0x4b, 0xff, 0xf9, 0x5c, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - -}; -const int kenobiwii_size = sizeof(kenobiwii); diff --git a/source/language.c b/source/language.c deleted file mode 100644 index 3f34525a..00000000 --- a/source/language.c +++ /dev/null @@ -1,1094 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include "language.h" -static char *cfg_name, *cfg_val; - -char* strcopy(char *dest, char *src, int size) -{ - strncpy(dest,src,size); - dest[size-1] = 0; - return dest; -} - -bool checkfile(char * path) -{ - FILE * f; - f = fopen(path,"r"); - if(f) { - fclose(f); - return true; - } - fclose(f); -return false; -} - -void lang_default() -{ -snprintf(LANGUAGE.ok, sizeof(LANGUAGE.ok), "OK"); -snprintf(LANGUAGE.addToFavorite, sizeof(LANGUAGE.addToFavorite), "Favorite"); -snprintf(LANGUAGE.all, sizeof(LANGUAGE.all), "Alphabetical"); -snprintf(LANGUAGE.AppLanguage, sizeof(LANGUAGE.AppLanguage), "App Language"); -snprintf(LANGUAGE.t3Covers, sizeof(LANGUAGE.t3Covers), "3D Covers"); -snprintf(LANGUAGE.Areyousure, sizeof(LANGUAGE.Areyousure), "Are you sure?"); -snprintf(LANGUAGE.available, sizeof(LANGUAGE.available), "available"); -snprintf(LANGUAGE.AutoPatch, sizeof(LANGUAGE.AutoPatch), "AutoPatch"); -snprintf(LANGUAGE.Back, sizeof(LANGUAGE.Back), "Back"); -snprintf(LANGUAGE.Backgroundmusic, sizeof(LANGUAGE.Backgroundmusic), "Backgroundmusic"); -snprintf(LANGUAGE.Backgroundmusicpath, sizeof(LANGUAGE.Backgroundmusicpath), "Backgroundmusic Path changed."); -snprintf(LANGUAGE.BacktoHBCorWiiMenu, sizeof(LANGUAGE.BacktoHBCorWiiMenu), "Back to HBC or Wii Menu"); -snprintf(LANGUAGE.BacktoLoader, sizeof(LANGUAGE.BacktoLoader), "Back to Loader"); -snprintf(LANGUAGE.BacktoWiiMenu, sizeof(LANGUAGE.BacktoWiiMenu), "Back to Wii Menu"); -snprintf(LANGUAGE.BootStandard, sizeof(LANGUAGE.BootStandard), "Boot/Standard"); -snprintf(LANGUAGE.Both, sizeof(LANGUAGE.Both), "Both"); -snprintf(LANGUAGE.Cantcreatedirectory, sizeof(LANGUAGE.Cantcreatedirectory), "Can't create directory"); -snprintf(LANGUAGE.Cancel, sizeof(LANGUAGE.Cancel), "Cancel"); -snprintf(LANGUAGE.Cantbeformated, sizeof(LANGUAGE.Cantbeformated), "Can't be formated"); -snprintf(LANGUAGE.CheckingforUpdates, sizeof(LANGUAGE.CheckingforUpdates), "Checking for Updates"); -snprintf(LANGUAGE.Cantdelete, sizeof(LANGUAGE.Cantdelete), "Can't delete:"); -snprintf(LANGUAGE.ClicktoDownloadCovers, sizeof(LANGUAGE.ClicktoDownloadCovers), "Click to Download Covers"); -snprintf(LANGUAGE.Clock, sizeof(LANGUAGE.Clock), "Clock"); -snprintf(LANGUAGE.Close, sizeof(LANGUAGE.Close), "Close"); -snprintf(LANGUAGE.Continueinstallgame, sizeof(LANGUAGE.Continueinstallgame), "Continue to install game?"); -snprintf(LANGUAGE.ConsoleDefault, sizeof(LANGUAGE.ConsoleDefault), "Console Default"); -snprintf(LANGUAGE.Consoleshouldbeunlockedtomodifyit, sizeof(LANGUAGE.Consoleshouldbeunlockedtomodifyit), "Console should be unlocked to modify it."); -snprintf(LANGUAGE.ConsoleLocked, sizeof(LANGUAGE.ConsoleLocked), "Console Locked"); -snprintf(LANGUAGE.CorrectPassword, sizeof(LANGUAGE.CorrectPassword), "Correct Password"); -snprintf(LANGUAGE.Couldnotinitializenetwork, sizeof(LANGUAGE.Couldnotinitializenetwork), "Could not initialize network!"); -snprintf(LANGUAGE.CouldnotopenDisc, sizeof(LANGUAGE.CouldnotopenDisc), "Could not open Disc"); -snprintf(LANGUAGE.CouldnotinitializeDIPmodule, sizeof(LANGUAGE.CouldnotinitializeDIPmodule), "Could not initialize DIP module!"); -snprintf(LANGUAGE.CoverDownload, sizeof(LANGUAGE.CoverDownload), "Cover Download"); -snprintf(LANGUAGE.CoverPath, sizeof(LANGUAGE.CoverPath), "Cover Path"); -snprintf(LANGUAGE.CoverpathChanged, sizeof(LANGUAGE.CoverpathChanged), "Coverpath Changed"); -snprintf(LANGUAGE.Coverpathchange, sizeof(LANGUAGE.Coverpathchange), "Coverpath change"); -snprintf(LANGUAGE.count, sizeof(LANGUAGE.count), "Play Count"); -snprintf(LANGUAGE.Credits, sizeof(LANGUAGE.Credits), "Credits"); -snprintf(LANGUAGE.DiscImages, sizeof(LANGUAGE.DiscImages), "Disc Images"); -snprintf(LANGUAGE.DiscimagePath, sizeof(LANGUAGE.DiscimagePath), "Discimage Path"); -snprintf(LANGUAGE.DiscpathChanged, sizeof(LANGUAGE.DiscpathChanged), "Discpath Changed"); -snprintf(LANGUAGE.Discpathchange, sizeof(LANGUAGE.Discpathchange), "Discpath change"); -snprintf(LANGUAGE.DiscDefault, sizeof(LANGUAGE.DiscDefault), "Disc Default"); -snprintf(LANGUAGE.Display, sizeof(LANGUAGE.Display), "Display"); -snprintf(LANGUAGE.Doyouwanttoformat, sizeof(LANGUAGE.Doyouwanttoformat), "Do you want to format:"); -snprintf(LANGUAGE.Doyoureallywanttodelete, sizeof(LANGUAGE.Doyoureallywanttodelete), "Do you really want to delete:"); -snprintf(LANGUAGE.Doyouwanttoretryfor30secs, sizeof(LANGUAGE.Doyouwanttoretryfor30secs), "Do you want to retry for 30 secs?"); -snprintf(LANGUAGE.Doyouwanttoupdate, sizeof(LANGUAGE.Doyouwanttoupdate), "How do you want to update?"); -snprintf(LANGUAGE.Downloadingfile, sizeof(LANGUAGE.Downloadingfile), "Downloading file"); -snprintf(LANGUAGE.DownloadBoxartimage, sizeof(LANGUAGE.DownloadBoxartimage), "Download Boxart image?"); -snprintf(LANGUAGE.Downloadfinished, sizeof(LANGUAGE.Downloadfinished), "Download finished"); -snprintf(LANGUAGE.Defaultgamesettings, sizeof(LANGUAGE.Defaultgamesettings), "Default Gamesettings"); -snprintf(LANGUAGE.Defaultsettings, sizeof(LANGUAGE.Defaultsettings), "Default Settings"); -snprintf(LANGUAGE.Error, sizeof(LANGUAGE.Error), "Error !"); -snprintf(LANGUAGE.hour, sizeof(LANGUAGE.hour), "Hour"); -snprintf(LANGUAGE.Homemenu, sizeof(LANGUAGE.Homemenu), "HOME Menu"); -snprintf(LANGUAGE.BOOTERROR, sizeof(LANGUAGE.BOOTERROR), "BOOT ERROR"); -snprintf(LANGUAGE.ErrorreadingDisc, sizeof(LANGUAGE.ErrorreadingDisc), "Error reading Disc"); -snprintf(LANGUAGE.ExitUSBISOLoader, sizeof(LANGUAGE.ExitUSBISOLoader), "Exit USB Loader GX?"); -snprintf(LANGUAGE.InitializingNetwork, sizeof(LANGUAGE.InitializingNetwork), "Initializing Network"); -snprintf(LANGUAGE.InsertDisk, sizeof(LANGUAGE.InsertDisk), "Insert Disk"); -snprintf(LANGUAGE.InsertaWiiDisc, sizeof(LANGUAGE.InsertaWiiDisc), "Insert a Wii Disc!"); -snprintf(LANGUAGE.InsertaSDCardtodownloadimages, sizeof(LANGUAGE.InsertaSDCardtodownloadimages), "Insert an SD-Card to download images."); -snprintf(LANGUAGE.InsertaSDCardtosave, sizeof(LANGUAGE.InsertaSDCardtosave), "Insert an SD-Card to save."); -snprintf(LANGUAGE.InsertaSDCardtousethatoption, sizeof(LANGUAGE.InsertaSDCardtousethatoption), "Insert an SD-Card to use this option."); -snprintf(LANGUAGE.InstallRenameandDeleteareunlocked, sizeof(LANGUAGE.InstallRenameandDeleteareunlocked), "All the features of USB Loader GX are unlocked."); -snprintf(LANGUAGE.Installerror, sizeof(LANGUAGE.Installerror), "Install Error!"); -snprintf(LANGUAGE.Installagame, sizeof(LANGUAGE.Installagame), "Install a game"); -snprintf(LANGUAGE.Installinggame, sizeof(LANGUAGE.Installinggame), "Installing game:"); -snprintf(LANGUAGE.Failedtoboot, sizeof(LANGUAGE.Failedtoboot), "Failed to boot:"); -snprintf(LANGUAGE.FailedtomountfrontSDcard, sizeof(LANGUAGE.FailedtomountfrontSDcard), "Failed to mount front SD-card"); -snprintf(LANGUAGE.FailedtosetUSB, sizeof(LANGUAGE.FailedtosetUSB), "Failed to set USB:"); -snprintf(LANGUAGE.Failedformating, sizeof(LANGUAGE.Failedformating), "Failed formating"); -snprintf(LANGUAGE.fave, sizeof(LANGUAGE.fave), "Favorites"); -snprintf(LANGUAGE.filesnotfoundontheserver, sizeof(LANGUAGE.filesnotfoundontheserver), "files not found on the server!"); -snprintf(LANGUAGE.Filenotfound, sizeof(LANGUAGE.Filenotfound), "File not found."); -snprintf(LANGUAGE.filesleft, sizeof(LANGUAGE.filesleft), "file(s) left"); -snprintf(LANGUAGE.FlipX, sizeof(LANGUAGE.FlipX), "Flip-X"); -snprintf(LANGUAGE.Force, sizeof(LANGUAGE.Force), "Force"); -snprintf(LANGUAGE.Youneedtoformatapartition, sizeof(LANGUAGE.Youneedtoformatapartition), "You need to format a partition"); -snprintf(LANGUAGE.Format, sizeof(LANGUAGE.Format), "Format"); -snprintf(LANGUAGE.keyboard, sizeof(LANGUAGE.keyboard), "Keyboard"); -snprintf(LANGUAGE.Formattingpleasewait, sizeof(LANGUAGE.Formattingpleasewait), "Formatting, please wait..."); -snprintf(LANGUAGE.formated, sizeof(LANGUAGE.formated), "formatted!"); -snprintf(LANGUAGE.free, sizeof(LANGUAGE.free), "free"); -snprintf(LANGUAGE.FreeSpace, sizeof(LANGUAGE.FreeSpace), "Free Space"); -snprintf(LANGUAGE.FullShutdown, sizeof(LANGUAGE.FullShutdown), "Full Shutdown"); -snprintf(LANGUAGE.GameID, sizeof(LANGUAGE.GameID), "Game ID"); -snprintf(LANGUAGE.Games, sizeof(LANGUAGE.Games), "Games"); -snprintf(LANGUAGE.Gameisalreadyinstalled, sizeof(LANGUAGE.Gameisalreadyinstalled), "Game is already installed:"); -snprintf(LANGUAGE.GameRegion, sizeof(LANGUAGE.GameRegion), "Game Region"); -snprintf(LANGUAGE.GameSize, sizeof(LANGUAGE.GameSize), "Game Size"); -snprintf(LANGUAGE.GoBack, sizeof(LANGUAGE.GoBack), "Go Back"); -snprintf(LANGUAGE.HowtoShutdown, sizeof(LANGUAGE.HowtoShutdown), "How to Shutdown?"); -snprintf(LANGUAGE.Language, sizeof(LANGUAGE.Language), "Game Language"); -snprintf(LANGUAGE.Left, sizeof(LANGUAGE.Left), "Left"); -snprintf(LANGUAGE.LikeSysMenu, sizeof(LANGUAGE.LikeSysMenu), "Like SysMenu"); -snprintf(LANGUAGE.LoadingincIOS, sizeof(LANGUAGE.LoadingincIOS), "Loading in cIOS249"); -snprintf(LANGUAGE.ListSort, sizeof(LANGUAGE.ListSort), "Sort Game List"); -snprintf(LANGUAGE.Loadingstandardlanguage, sizeof(LANGUAGE.Loadingstandardlanguage), "Loading standard language."); -snprintf(LANGUAGE.Loadingstandardmusic, sizeof(LANGUAGE.Loadingstandardmusic), "Loading standard music."); -snprintf(LANGUAGE.Lock, sizeof(LANGUAGE.Lock), "Lock"); -snprintf(LANGUAGE.LockConsole, sizeof(LANGUAGE.LockConsole), "Lock Console"); -snprintf(LANGUAGE.Patchcountrystrings, sizeof(LANGUAGE.Patchcountrystrings), "Patch Country Strings"); -snprintf(LANGUAGE.Missingfiles, sizeof(LANGUAGE.Missingfiles), "Missing files"); -snprintf(LANGUAGE.Networkiniterror, sizeof(LANGUAGE.Networkiniterror), "Network init error"); -snprintf(LANGUAGE.Neither, sizeof(LANGUAGE.Neither), "Neither"); -snprintf(LANGUAGE.Next, sizeof(LANGUAGE.Next), "Next"); -snprintf(LANGUAGE.Nonewupdates, sizeof(LANGUAGE.Nonewupdates), "No new updates."); -snprintf(LANGUAGE.No, sizeof(LANGUAGE.No), "No"); -snprintf(LANGUAGE.Nofilemissing, sizeof(LANGUAGE.Nofilemissing), "No file missing!"); -snprintf(LANGUAGE.NoHDDfound, sizeof(LANGUAGE.NoHDDfound), "No HDD found!"); -snprintf(LANGUAGE.NoSDcardinserted, sizeof(LANGUAGE.NoSDcardinserted), "No SD-Card inserted!"); -snprintf(LANGUAGE.Nopartitionsfound, sizeof(LANGUAGE.Nopartitionsfound), "No partitions found"); -snprintf(LANGUAGE.NoUSBDevice, sizeof(LANGUAGE.NoUSBDevice), "No USB Device"); -snprintf(LANGUAGE.NoWBFSpartitionfound, sizeof(LANGUAGE.NoWBFSpartitionfound), "No WBFS partition found"); -snprintf(LANGUAGE.NormalCovers, sizeof(LANGUAGE.NormalCovers), "Normal Covers"); -snprintf(LANGUAGE.Normal, sizeof(LANGUAGE.Normal), "Normal"); -snprintf(LANGUAGE.NotaWiiDisc, sizeof(LANGUAGE.NotaWiiDisc), "Not a Wii Disc"); -snprintf(LANGUAGE.NoUSBDevicefound, sizeof(LANGUAGE.NoUSBDevicefound), "No USB Device found."); -snprintf(LANGUAGE.Notenoughfreespace, sizeof(LANGUAGE.Notenoughfreespace), "Not enough free space!"); -snprintf(LANGUAGE.Notasupportedformat, sizeof(LANGUAGE.Notasupportedformat), "Not supported format!"); -snprintf(LANGUAGE.notset, sizeof(LANGUAGE.notset), "not set"); -snprintf(LANGUAGE.of, sizeof(LANGUAGE.of), "of"); -snprintf(LANGUAGE.OFF, sizeof(LANGUAGE.OFF), "OFF"); -snprintf(LANGUAGE.OfficialSite, sizeof(LANGUAGE.OfficialSite), "Official Site"); -snprintf(LANGUAGE.ON, sizeof(LANGUAGE.ON), "ON"); -snprintf(LANGUAGE.OnlyInstall, sizeof(LANGUAGE.OnlyInstall), "Only for Install"); -snprintf(LANGUAGE.Parentalcontrol, sizeof(LANGUAGE.Parentalcontrol), "Parental control"); -snprintf(LANGUAGE.Partition, sizeof(LANGUAGE.Partition), "Partition"); -snprintf(LANGUAGE.Password, sizeof(LANGUAGE.Password), "Password"); -snprintf(LANGUAGE.PasswordChanged, sizeof(LANGUAGE.PasswordChanged), "Password Changed"); -snprintf(LANGUAGE.Passwordhasbeenchanged, sizeof(LANGUAGE.Passwordhasbeenchanged), "Password has been changed"); -snprintf(LANGUAGE.Passwordchange, sizeof(LANGUAGE.Passwordchange), "Password change"); -snprintf(LANGUAGE.Plays, sizeof(LANGUAGE.Plays), "Play Count"); -snprintf(LANGUAGE.PowerofftheWii, sizeof(LANGUAGE.PowerofftheWii), "Power off the Wii"); -snprintf(LANGUAGE.Prev, sizeof(LANGUAGE.Prev), "Prev"); -snprintf(LANGUAGE.PromptsButtons, sizeof(LANGUAGE.PromptsButtons), "Prompts Buttons"); -snprintf(LANGUAGE.ReloadSD, sizeof(LANGUAGE.ReloadSD), "Reload SD"); -snprintf(LANGUAGE.RenameGameonWBFS, sizeof(LANGUAGE.RenameGameonWBFS), "Rename Game on WBFS"); -snprintf(LANGUAGE.Restart, sizeof(LANGUAGE.Restart), "Restart"); -snprintf(LANGUAGE.Restarting, sizeof(LANGUAGE.Restarting), "Restarting..."); -snprintf(LANGUAGE.Return, sizeof(LANGUAGE.Return), "Return"); -snprintf(LANGUAGE.ReturntoWiiMenu, sizeof(LANGUAGE.ReturntoWiiMenu), "Return to Wii Menu"); -snprintf(LANGUAGE.Right, sizeof(LANGUAGE.Right), "Right"); -snprintf(LANGUAGE.Rumble, sizeof(LANGUAGE.Rumble), "Rumble"); -snprintf(LANGUAGE.QuickBoot, sizeof(LANGUAGE.QuickBoot), "Quick Boot"); -snprintf(LANGUAGE.Save, sizeof(LANGUAGE.Save), "Save"); -snprintf(LANGUAGE.SaveFailed, sizeof(LANGUAGE.SaveFailed), "Save Failed"); -snprintf(LANGUAGE.Specialthanksto, sizeof(LANGUAGE.Specialthanksto), "Special thanks to"); -snprintf(LANGUAGE.For, sizeof(LANGUAGE.For), "for"); -snprintf(LANGUAGE.theUSBLoaderandreleasingthesourcecode, sizeof(LANGUAGE.theUSBLoaderandreleasingthesourcecode), "and releasing the source code"); -snprintf(LANGUAGE.secondsleft, sizeof(LANGUAGE.secondsleft), "seconds left"); -snprintf(LANGUAGE.Setasbackgroundmusic, sizeof(LANGUAGE.Setasbackgroundmusic), "Set as backgroundmusic?"); -snprintf(LANGUAGE.SelectthePartition, sizeof(LANGUAGE.SelectthePartition), "Select the Partition"); -snprintf(LANGUAGE.Specialthanksto, sizeof(LANGUAGE.Specialthanksto), "Special thanks to"); -snprintf(LANGUAGE.youwanttoformat, sizeof(LANGUAGE.youwanttoformat), "you want to format"); -snprintf(LANGUAGE.Standard, sizeof(LANGUAGE.Standard), "Standard"); -snprintf(LANGUAGE.settings, sizeof(LANGUAGE.settings), "Settings"); -snprintf(LANGUAGE.ShutdowntoIdle, sizeof(LANGUAGE.ShutdowntoIdle), "Shutdown to Idle"); -snprintf(LANGUAGE.ShutdownSystem, sizeof(LANGUAGE.ShutdownSystem), "Shutdown System"); -snprintf(LANGUAGE.Success, sizeof(LANGUAGE.Success), "Success:"); -snprintf(LANGUAGE.Successfullyinstalled, sizeof(LANGUAGE.Successfullyinstalled), "Successfully installed:"); -snprintf(LANGUAGE.Successfullyupdated, sizeof(LANGUAGE.Successfullyupdated), "Successfully Updated"); -snprintf(LANGUAGE.Successfullydeleted, sizeof(LANGUAGE.Successfullydeleted), "Successfully deleted:"); -snprintf(LANGUAGE.SuccessfullySaved, sizeof(LANGUAGE.SuccessfullySaved), "Successfully Saved"); -snprintf(LANGUAGE.SystemDefault, sizeof(LANGUAGE.SystemDefault), "System Default"); -snprintf(LANGUAGE.ThemePath, sizeof(LANGUAGE.ThemePath), "ThemePath"); -snprintf(LANGUAGE.ThemepathChanged, sizeof(LANGUAGE.ThemepathChanged), "Themepath Changed"); -snprintf(LANGUAGE.Themepathchange, sizeof(LANGUAGE.Themepathchange), "Themepath change"); -snprintf(LANGUAGE.Titlestxtpath, sizeof(LANGUAGE.Titlestxtpath), "titles.txt Path"); -snprintf(LANGUAGE.Titlestxtpathchange, sizeof(LANGUAGE.Titlestxtpathchange), "Path of titles.txt change"); -snprintf(LANGUAGE.TitlestxtpathChanged, sizeof(LANGUAGE.TitlestxtpathChanged), "Path of titles.txt changed."); -snprintf(LANGUAGE.Try, sizeof(LANGUAGE.Try), "Try"); -snprintf(LANGUAGE.Tooltips, sizeof(LANGUAGE.Tooltips), "Tooltips"); -snprintf(LANGUAGE.Timeleft, sizeof(LANGUAGE.Timeleft), "Time left:"); -snprintf(LANGUAGE.updating, sizeof(LANGUAGE.updating), "Updating"); -snprintf(LANGUAGE.Unlock, sizeof(LANGUAGE.Unlock), "Unlock"); -snprintf(LANGUAGE.Unicodefix, sizeof(LANGUAGE.Unicodefix), "Unicode Fix"); -snprintf(LANGUAGE.Uninstall, sizeof(LANGUAGE.Uninstall), "Uninstall"); -snprintf(LANGUAGE.Updatepath, sizeof(LANGUAGE.Updatepath), "Updatepath"); -snprintf(LANGUAGE.Updatepathchanged, sizeof(LANGUAGE.Updatepathchanged), "Updatepath changed."); -snprintf(LANGUAGE.Updatefailed, sizeof(LANGUAGE.Updatefailed), "Update failed"); -snprintf(LANGUAGE.Updatedol, sizeof(LANGUAGE.Updatedol), "Update DOL"); -snprintf(LANGUAGE.Updateall, sizeof(LANGUAGE.Updateall), "Update All"); -snprintf(LANGUAGE.USBLoaderisprotected, sizeof(LANGUAGE.USBLoaderisprotected), "USB Loader GX is protected"); -snprintf(LANGUAGE.USBDevicenotfound, sizeof(LANGUAGE.USBDevicenotfound), "USB Device not found"); -snprintf(LANGUAGE.VideoMode, sizeof(LANGUAGE.VideoMode), "Video Mode"); -snprintf(LANGUAGE.VIDTVPatch, sizeof(LANGUAGE.VIDTVPatch), "VIDTV Patch"); -snprintf(LANGUAGE.Volume, sizeof(LANGUAGE.Volume), "Volume"); -snprintf(LANGUAGE.Waiting, sizeof(LANGUAGE.Waiting), "Waiting..."); -snprintf(LANGUAGE.WaitingforUSBDevice, sizeof(LANGUAGE.WaitingforUSBDevice), "Waiting for USB Device"); -snprintf(LANGUAGE.WidescreenFix, sizeof(LANGUAGE.WidescreenFix), "Widescreen Fix"); -snprintf(LANGUAGE.WiiMenu, sizeof(LANGUAGE.WiiMenu), "Wii Menu"); -snprintf(LANGUAGE.Wiilight, sizeof(LANGUAGE.Wiilight), "Wiilight"); -snprintf(LANGUAGE.WrongPassword, sizeof(LANGUAGE.WrongPassword), "Wrong Password"); -snprintf(LANGUAGE.Yes, sizeof(LANGUAGE.Yes), "Yes"); -snprintf(LANGUAGE.YoudonthavecIOS, sizeof(LANGUAGE.YoudonthavecIOS), "You don't have cIOS222"); -snprintf(LANGUAGE.Japanese, sizeof(LANGUAGE.Japanese), "Japanese"); -snprintf(LANGUAGE.German, sizeof(LANGUAGE.German), "German"); -snprintf(LANGUAGE.English, sizeof(LANGUAGE.English), "English"); -snprintf(LANGUAGE.French, sizeof(LANGUAGE.French), "French"); -snprintf(LANGUAGE.Spanish, sizeof(LANGUAGE.Spanish), "Spanish"); -snprintf(LANGUAGE.Italian, sizeof(LANGUAGE.Italian), "Italian"); -snprintf(LANGUAGE.Dutch, sizeof(LANGUAGE.Dutch), "Dutch"); -snprintf(LANGUAGE.SChinese, sizeof(LANGUAGE.SChinese), "SChinese"); -snprintf(LANGUAGE.TChinese, sizeof(LANGUAGE.TChinese), "TChinese"); -snprintf(LANGUAGE.Korean, sizeof(LANGUAGE.Korean), "Korean"); -}; - - -struct LANGUAGE LANGUAGE; - -void language_set(char *name, char *val) -{ - cfg_name = name; - cfg_val = val; - - if (strcmp(name, "t3Covers") == 0) { - strcopy(LANGUAGE.t3Covers, val, sizeof(LANGUAGE.t3Covers)); - return; - } - if (strcmp(name, "addToFavorite") == 0) { - strcopy(LANGUAGE.addToFavorite, val, sizeof(LANGUAGE.addToFavorite)); - return; - } - if (strcmp(name, "all") == 0) { - strcopy(LANGUAGE.all, val, sizeof(LANGUAGE.all)); - return; - } - if (strcmp(name, "Specialthanksto") == 0) { - strcopy(LANGUAGE.Specialthanksto, val, sizeof(LANGUAGE.Specialthanksto)); - return; - } - if (strcmp(name, "ok") == 0) { - strcopy(LANGUAGE.ok, val, sizeof(LANGUAGE.ok)); - return; - } - if (strcmp(name, "AppLanguage") == 0) { - strcopy(LANGUAGE.AppLanguage, val, sizeof(LANGUAGE.AppLanguage)); - return; - } - if (strcmp(name, "Areyousure") == 0) { - strcopy(LANGUAGE.Areyousure, val, sizeof(LANGUAGE.Areyousure)); - return; - } - if (strcmp(name, "AutoPatch") == 0) { - strcopy(LANGUAGE.AutoPatch, val, sizeof(LANGUAGE.AutoPatch)); - return; - } - if (strcmp(name, "Back") == 0) { - strcopy(LANGUAGE.Back, val, sizeof(LANGUAGE.Back)); - return; - } - if (strcmp(name, "Backgroundmusic") == 0) { - strcopy(LANGUAGE.Backgroundmusic, val, sizeof(LANGUAGE.Backgroundmusic)); - return; - } - if (strcmp(name, "Backgroundmusicpath") == 0) { - strcopy(LANGUAGE.Backgroundmusicpath, val, sizeof(LANGUAGE.Backgroundmusicpath)); - return; - } - if (strcmp(name, "BacktoHBCorWiiMenu") == 0) { - strcopy(LANGUAGE.BacktoHBCorWiiMenu, val, sizeof(LANGUAGE.BacktoHBCorWiiMenu)); - return; - } - if (strcmp(name, "BacktoLoader") == 0) { - strcopy(LANGUAGE.BacktoLoader, val, sizeof(LANGUAGE.BacktoLoader)); - return; - } - if (strcmp(name, "BacktoWiiMenu") == 0) { - strcopy(LANGUAGE.BacktoWiiMenu, val, sizeof(LANGUAGE.BacktoWiiMenu)); - return; - } - if (strcmp(name, "BootStandard") == 0) { - strcopy(LANGUAGE.BootStandard, val, sizeof(LANGUAGE.BootStandard)); - return; - } - if (strcmp(name, "Both") == 0) { - strcopy(LANGUAGE.Both, val, sizeof(LANGUAGE.Both)); - return; - } - if (strcmp(name, "Cantcreatedirectory") == 0) { - strcopy(LANGUAGE.Cantcreatedirectory, val, sizeof(LANGUAGE.Cantcreatedirectory)); - return; - } - if (strcmp(name, "Cancel") == 0) { - strcopy(LANGUAGE.Cancel, val, sizeof(LANGUAGE.Cancel)); - return; - } - if (strcmp(name, "Cantbeformated") == 0) { - strcopy(LANGUAGE.Cantbeformated, val, sizeof(LANGUAGE.Cantbeformated)); - return; - } - if (strcmp(name, "Cantdelete") == 0) { - strcopy(LANGUAGE.Cantdelete, val, sizeof(LANGUAGE.Cantdelete)); - return; - } - if (strcmp(name, "ClicktoDownloadCovers") == 0) { - strcopy(LANGUAGE.ClicktoDownloadCovers, val, sizeof(LANGUAGE.ClicktoDownloadCovers)); - return; - } - if (strcmp(name, "Clock") == 0) { - strcopy(LANGUAGE.Clock, val, sizeof(LANGUAGE.Clock)); - return; - } - if (strcmp(name, "Close") == 0) { - strcopy(LANGUAGE.Close, val, sizeof(LANGUAGE.Close)); - return; - } - if (strcmp(name, "Continueinstallgame") == 0) { - strcopy(LANGUAGE.Continueinstallgame, val, sizeof(LANGUAGE.Continueinstallgame)); - return; - } - if (strcmp(name, "ConsoleDefault") == 0) { - strcopy(LANGUAGE.ConsoleDefault, val, sizeof(LANGUAGE.ConsoleDefault)); - return; - } - if (strcmp(name, "Consoleshouldbeunlockedtomodifyit") == 0) { - strcopy(LANGUAGE.Consoleshouldbeunlockedtomodifyit, val, sizeof(LANGUAGE.Consoleshouldbeunlockedtomodifyit)); - return; - } - if (strcmp(name, "ConsoleLocked") == 0) { - strcopy(LANGUAGE.ConsoleLocked, val, sizeof(LANGUAGE.ConsoleLocked)); - return; - } - if (strcmp(name, "CorrectPassword") == 0) { - strcopy(LANGUAGE.CorrectPassword, val, sizeof(LANGUAGE.CorrectPassword)); - return; - } - if (strcmp(name, "Couldnotinitializenetwork") == 0) { - strcopy(LANGUAGE.Couldnotinitializenetwork, val, sizeof(LANGUAGE.Couldnotinitializenetwork)); - return; - } - if (strcmp(name, "CouldnotopenDisc") == 0) { - strcopy(LANGUAGE.CouldnotopenDisc, val, sizeof(LANGUAGE.CouldnotopenDisc)); - return; - } - if (strcmp(name, "CouldnotinitializeDIPmodule") == 0) { - strcopy(LANGUAGE.CouldnotinitializeDIPmodule, val, sizeof(LANGUAGE.CouldnotinitializeDIPmodule)); - return; - } - if (strcmp(name, "count") == 0) { - strcopy(LANGUAGE.count, val, sizeof(LANGUAGE.count)); - return; - } - if (strcmp(name, "CoverDownload") == 0) { - strcopy(LANGUAGE.CoverDownload, val, sizeof(LANGUAGE.CoverDownload)); - return; - } - if (strcmp(name, "CoverPath") == 0) { - strcopy(LANGUAGE.CoverPath, val, sizeof(LANGUAGE.CoverPath)); - return; - } - if (strcmp(name, "CoverpathChanged") == 0) { - strcopy(LANGUAGE.CoverpathChanged, val, sizeof(LANGUAGE.CoverpathChanged)); - return; - } - if (strcmp(name, "Coverpathchange") == 0) { - strcopy(LANGUAGE.Coverpathchange, val, sizeof(LANGUAGE.Coverpathchange)); - return; - } - if (strcmp(name, "Credits") == 0) { - strcopy(LANGUAGE.Credits, val, sizeof(LANGUAGE.Credits)); - return; - } - if (strcmp(name, "DiscImages") == 0) { - strcopy(LANGUAGE.DiscImages, val, sizeof(LANGUAGE.DiscImages)); - return; - } - if (strcmp(name, "DiscimagePath") == 0) { - strcopy(LANGUAGE.DiscimagePath, val, sizeof(LANGUAGE.DiscimagePath)); - return; - } - if (strcmp(name, "DiscpathChanged") == 0) { - strcopy(LANGUAGE.DiscpathChanged, val, sizeof(LANGUAGE.DiscpathChanged)); - return; - } - if (strcmp(name, "Discpathchange") == 0) { - strcopy(LANGUAGE.Discpathchange, val, sizeof(LANGUAGE.Discpathchange)); - return; - } - if (strcmp(name, "DiscDefault") == 0) { - strcopy(LANGUAGE.DiscDefault, val, sizeof(LANGUAGE.DiscDefault)); - return; - } - if (strcmp(name, "Display") == 0) { - strcopy(LANGUAGE.Display, val, sizeof(LANGUAGE.Display)); - return; - } - if (strcmp(name, "Doyouwanttoformat") == 0) { - strcopy(LANGUAGE.Doyouwanttoformat, val, sizeof(LANGUAGE.Doyouwanttoformat)); - return; - } - if (strcmp(name, "Doyoureallywanttodelete") == 0) { - strcopy(LANGUAGE.Doyoureallywanttodelete, val, sizeof(LANGUAGE.Doyoureallywanttodelete)); - return; - } - if (strcmp(name, "Doyouwanttoretryfor30secs") == 0) { - strcopy(LANGUAGE.Doyouwanttoretryfor30secs, val, sizeof(LANGUAGE.Doyouwanttoretryfor30secs)); - return; - } - if (strcmp(name, "Downloadingfile") == 0) { - strcopy(LANGUAGE.Downloadingfile, val, sizeof(LANGUAGE.Downloadingfile)); - return; - } - if (strcmp(name, "DownloadBoxartimage") == 0) { - strcopy(LANGUAGE.DownloadBoxartimage, val, sizeof(LANGUAGE.DownloadBoxartimage)); - return; - } - if (strcmp(name, "Downloadfinished") == 0) { - strcopy(LANGUAGE.Downloadfinished, val, sizeof(LANGUAGE.Downloadfinished)); - return; - } - if (strcmp(name, "Defaultgamesettings") == 0) { - strcopy(LANGUAGE.Defaultgamesettings, val, sizeof(LANGUAGE.Defaultgamesettings)); - return; - } - if (strcmp(name, "Defaultsettings") == 0) { - strcopy(LANGUAGE.Defaultsettings, val, sizeof(LANGUAGE.Defaultsettings)); - return; - } - if (strcmp(name, "Error") == 0) { - strcopy(LANGUAGE.Error, val, sizeof(LANGUAGE.Error)); - return; - } - if (strcmp(name, "BOOTERROR") == 0) { - strcopy(LANGUAGE.BOOTERROR, val, sizeof(LANGUAGE.BOOTERROR)); - return; - } - if (strcmp(name, "ErrorreadingDisc") == 0) { - strcopy(LANGUAGE.ErrorreadingDisc, val, sizeof(LANGUAGE.ErrorreadingDisc)); - return; - } - if (strcmp(name, "ExitUSBISOLoader") == 0) { - strcopy(LANGUAGE.ExitUSBISOLoader, val, sizeof(LANGUAGE.ExitUSBISOLoader)); - return; - } - if (strcmp(name, "fave") == 0) { - strcopy(LANGUAGE.fave, val, sizeof(LANGUAGE.fave)); - return; - } - if (strcmp(name, "InitializingNetwork") == 0) { - strcopy(LANGUAGE.InitializingNetwork, val, sizeof(LANGUAGE.InitializingNetwork)); - return; - } - if (strcmp(name, "InsertDisk") == 0) { - strcopy(LANGUAGE.InsertDisk, val, sizeof(LANGUAGE.InsertDisk)); - return; - } - if (strcmp(name, "InsertaWiiDisc") == 0) { - strcopy(LANGUAGE.InsertaWiiDisc, val, sizeof(LANGUAGE.InsertaWiiDisc)); - return; - } - if (strcmp(name, "InsertaSDCardtodownloadimages") == 0) { - strcopy(LANGUAGE.InsertaSDCardtodownloadimages, val, sizeof(LANGUAGE.InsertaSDCardtodownloadimages)); - return; - } - if (strcmp(name, "InsertaSDCardtousethatoption") == 0) { - strcopy(LANGUAGE.InsertaSDCardtousethatoption, val, sizeof(LANGUAGE.InsertaSDCardtousethatoption)); - return; - } - if (strcmp(name, "InsertaSDCardtosave") == 0) { - strcopy(LANGUAGE.InsertaSDCardtosave, val, sizeof(LANGUAGE.InsertaSDCardtosave)); - return; - } - if (strcmp(name, "InstallRenameandDeleteareunlocked") == 0) { - strcopy(LANGUAGE.InstallRenameandDeleteareunlocked, val, sizeof(LANGUAGE.InstallRenameandDeleteareunlocked)); - return; - } - if (strcmp(name, "Installerror") == 0) { - strcopy(LANGUAGE.Installerror, val, sizeof(LANGUAGE.Installerror)); - return; - } - if (strcmp(name, "Installagame") == 0) { - strcopy(LANGUAGE.Installagame, val, sizeof(LANGUAGE.Installagame)); - return; - } - if (strcmp(name, "Installinggame") == 0) { - strcopy(LANGUAGE.Installinggame, val, sizeof(LANGUAGE.Installinggame)); - return; - } - if (strcmp(name, "Failedtoboot") == 0) { - strcopy(LANGUAGE.Failedtoboot, val, sizeof(LANGUAGE.Failedtoboot)); - return; - } - if (strcmp(name, "FailedtomountfrontSDcard") == 0) { - strcopy(LANGUAGE.FailedtomountfrontSDcard, val, sizeof(LANGUAGE.FailedtomountfrontSDcard)); - return; - } - if (strcmp(name, "FailedtosetUSB") == 0) { - strcopy(LANGUAGE.FailedtosetUSB, val, sizeof(LANGUAGE.FailedtosetUSB)); - return; - } - if (strcmp(name, "Failedformating") == 0) { - strcopy(LANGUAGE.Failedformating, val, sizeof(LANGUAGE.Failedformating)); - return; - } - if (strcmp(name, "filesnotfoundontheserver") == 0) { - strcopy(LANGUAGE.filesnotfoundontheserver, val, sizeof(LANGUAGE.filesnotfoundontheserver)); - return; - } - if (strcmp(name, "Filenotfound") == 0) { - strcopy(LANGUAGE.Filenotfound, val, sizeof(LANGUAGE.Filenotfound)); - return; - } - if (strcmp(name, "filesleft") == 0) { - strcopy(LANGUAGE.filesleft, val, sizeof(LANGUAGE.filesleft)); - return; - } - if (strcmp(name, "FlipX") == 0) { - strcopy(LANGUAGE.FlipX, val, sizeof(LANGUAGE.FlipX)); - return; - } - if (strcmp(name, "For") == 0) { - strcopy(LANGUAGE.For, val, sizeof(LANGUAGE.For)); - return; - } - if (strcmp(name, "Force") == 0) { - strcopy(LANGUAGE.Force, val, sizeof(LANGUAGE.Force)); - return; - } - if (strcmp(name, "hour") == 0) { - strcopy(LANGUAGE.hour, val, sizeof(LANGUAGE.hour)); - return; - } - if (strcmp(name, "Youneedtoformatapartition") == 0) { - strcopy(LANGUAGE.Youneedtoformatapartition, val, sizeof(LANGUAGE.Youneedtoformatapartition)); - return; - } - if (strcmp(name, "Format") == 0) { - strcopy(LANGUAGE.Format, val, sizeof(LANGUAGE.Format)); - return; - } - if (strcmp(name, "Formattingpleasewait") == 0) { - strcopy(LANGUAGE.Formattingpleasewait, val, sizeof(LANGUAGE.Formattingpleasewait)); - return; - } - if (strcmp(name, "formated") == 0) { - strcopy(LANGUAGE.formated, val, sizeof(LANGUAGE.formated)); - return; - } - if (strcmp(name, "free") == 0) { - strcopy(LANGUAGE.free, val, sizeof(LANGUAGE.free)); - return; - } - if (strcmp(name, "FreeSpace") == 0) { - strcopy(LANGUAGE.FreeSpace, val, sizeof(LANGUAGE.FreeSpace)); - return; - } - if (strcmp(name, "FullShutdown") == 0) { - strcopy(LANGUAGE.FullShutdown, val, sizeof(LANGUAGE.FullShutdown)); - return; - } - if (strcmp(name, "GameID") == 0) { - strcopy(LANGUAGE.GameID, val, sizeof(LANGUAGE.GameID)); - return; - } - if (strcmp(name, "Games") == 0) { - strcopy(LANGUAGE.Games, val, sizeof(LANGUAGE.Games)); - return; - } - if (strcmp(name, "Gameisalreadyinstalled") == 0) { - strcopy(LANGUAGE.Gameisalreadyinstalled, val, sizeof(LANGUAGE.Gameisalreadyinstalled)); - return; - } - if (strcmp(name, "GameRegion") == 0) { - strcopy(LANGUAGE.GameRegion, val, sizeof(LANGUAGE.GameRegion)); - return; - } - if (strcmp(name, "GameSize") == 0) { - strcopy(LANGUAGE.GameSize, val, sizeof(LANGUAGE.GameSize)); - return; - } - if (strcmp(name, "GoBack") == 0) { - strcopy(LANGUAGE.GoBack, val, sizeof(LANGUAGE.GoBack)); - return; - } - if (strcmp(name, "GotoPage") == 0) { - strcopy(LANGUAGE.GotoPage, val, sizeof(LANGUAGE.GotoPage)); - return; - } - if (strcmp(name, "Homemenu") == 0) { - strcopy(LANGUAGE.Homemenu, val, sizeof(LANGUAGE.Homemenu)); - return; - } - if (strcmp(name, "HowtoShutdown") == 0) { - strcopy(LANGUAGE.HowtoShutdown, val, sizeof(LANGUAGE.HowtoShutdown)); - return; - } - if (strcmp(name, "Keyboard") == 0) { - strcopy(LANGUAGE.keyboard, val, sizeof(LANGUAGE.keyboard)); - return; - } - - if (strcmp(name, "Language") == 0) { - strcopy(LANGUAGE.Language, val, sizeof(LANGUAGE.Language)); - return; - } - if (strcmp(name, "Langchange") == 0) { - strcopy(LANGUAGE.Langchange, val, sizeof(LANGUAGE.Langchange)); - return; - } - if (strcmp(name, "Left") == 0) { - strcopy(LANGUAGE.Left, val, sizeof(LANGUAGE.Left)); - return; - } - if (strcmp(name, "LikeSysMenu") == 0) { - strcopy(LANGUAGE.LikeSysMenu, val, sizeof(LANGUAGE.LikeSysMenu)); - return; - } - if (strcmp(name, "ListSort") == 0) { - strcopy(LANGUAGE.ListSort, val, sizeof(LANGUAGE.ListSort)); - return; - } - if (strcmp(name, "LoadingincIOS") == 0) { - strcopy(LANGUAGE.LoadingincIOS, val, sizeof(LANGUAGE.LoadingincIOS)); - return; - } - if (strcmp(name, "Loadingstandardlanguage") == 0) { - strcopy(LANGUAGE.Loadingstandardlanguage, val, sizeof(LANGUAGE.Loadingstandardlanguage)); - return; - } - if (strcmp(name, "Loadingstandardmusic") == 0) { - strcopy(LANGUAGE.Loadingstandardmusic, val, sizeof(LANGUAGE.Loadingstandardmusic)); - return; - } - if (strcmp(name, "Lock") == 0) { - strcopy(LANGUAGE.Lock, val, sizeof(LANGUAGE.Lock)); - return; - } - if (strcmp(name, "LockConsole") == 0) { - strcopy(LANGUAGE.LockConsole, val, sizeof(LANGUAGE.LockConsole)); - return; - } - if (strcmp(name, "Patchcountrystrings") == 0) { - strcopy(LANGUAGE.Patchcountrystrings, val, sizeof(LANGUAGE.Patchcountrystrings)); - return; - } - if (strcmp(name, "Missingfiles") == 0) { - strcopy(LANGUAGE.Missingfiles, val, sizeof(LANGUAGE.Missingfiles)); - return; - } - if (strcmp(name, "Networkiniterror") == 0) { - strcopy(LANGUAGE.Networkiniterror, val, sizeof(LANGUAGE.Networkiniterror)); - return; - } - if (strcmp(name, "Neither") == 0) { - strcopy(LANGUAGE.Neither, val, sizeof(LANGUAGE.Neither)); - return; - } - if (strcmp(name, "Next") == 0) { - strcopy(LANGUAGE.Next, val, sizeof(LANGUAGE.Next)); - return; - } - if (strcmp(name, "No") == 0) { - strcopy(LANGUAGE.No, val, sizeof(LANGUAGE.No)); - return; - } - if (strcmp(name, "Nofilemissing") == 0) { - strcopy(LANGUAGE.Nofilemissing, val, sizeof(LANGUAGE.Nofilemissing)); - return; - } - if (strcmp(name, "NoHDDfound") == 0) { - strcopy(LANGUAGE.NoHDDfound, val, sizeof(LANGUAGE.NoHDDfound)); - return; - } - if (strcmp(name, "NoSDcardinserted") == 0) { - strcopy(LANGUAGE.NoSDcardinserted, val, sizeof(LANGUAGE.NoSDcardinserted)); - return; - } - if (strcmp(name, "Nopartitionsfound") == 0) { - strcopy(LANGUAGE.Nopartitionsfound, val, sizeof(LANGUAGE.Nopartitionsfound)); - return; - } - if (strcmp(name, "NoUSBDevice") == 0) { - strcopy(LANGUAGE.NoUSBDevice, val, sizeof(LANGUAGE.NoUSBDevice)); - return; - } - if (strcmp(name, "NoWBFSpartitionfound") == 0) { - strcopy(LANGUAGE.NoWBFSpartitionfound, val, sizeof(LANGUAGE.NoWBFSpartitionfound)); - return; - } - if (strcmp(name, "NormalCovers") == 0) { - strcopy(LANGUAGE.NormalCovers, val, sizeof(LANGUAGE.NormalCovers)); - return; - } - if (strcmp(name, "Normal") == 0) { - strcopy(LANGUAGE.Normal, val, sizeof(LANGUAGE.Normal)); - return; - } - if (strcmp(name, "NotaWiiDisc") == 0) { - strcopy(LANGUAGE.NotaWiiDisc, val, sizeof(LANGUAGE.NotaWiiDisc)); - return; - } - if (strcmp(name, "NoUSBDevicefound") == 0) { - strcopy(LANGUAGE.NoUSBDevicefound, val, sizeof(LANGUAGE.NoUSBDevicefound)); - return; - } - if (strcmp(name, "Notenoughfreespace") == 0) { - strcopy(LANGUAGE.Notenoughfreespace, val, sizeof(LANGUAGE.Notenoughfreespace)); - return; - } - if (strcmp(name, "Notasupportedformat") == 0) { - strcopy(LANGUAGE.Notasupportedformat, val, sizeof(LANGUAGE.Notasupportedformat)); - return; - } - if (strcmp(name, "notset") == 0) { - strcopy(LANGUAGE.notset, val, sizeof(LANGUAGE.notset)); - return; - } - if (strcmp(name, "of") == 0) { - strcopy(LANGUAGE.of, val, sizeof(LANGUAGE.of)); - return; - } - if (strcmp(name, "OFF") == 0) { - strcopy(LANGUAGE.OFF, val, sizeof(LANGUAGE.OFF)); - return; - } - if (strcmp(name, "OfficialSite") == 0) { - strcopy(LANGUAGE.OfficialSite, val, sizeof(LANGUAGE.OfficialSite)); - return; - } - if (strcmp(name, "OnlyInstall") == 0) { - strcopy(LANGUAGE.OnlyInstall, val, sizeof(LANGUAGE.OnlyInstall)); - return; - } - if (strcmp(name, "ON") == 0) { - strcopy(LANGUAGE.ON, val, sizeof(LANGUAGE.ON)); - return; - } - if (strcmp(name, "Parentalcontrol") == 0) { - strcopy(LANGUAGE.Parentalcontrol, val, sizeof(LANGUAGE.Parentalcontrol)); - return; - } - if (strcmp(name, "Partition") == 0) { - strcopy(LANGUAGE.Partition, val, sizeof(LANGUAGE.Partition)); - return; - } - if (strcmp(name, "Password") == 0) { - strcopy(LANGUAGE.Password, val, sizeof(LANGUAGE.Password)); - return; - } - if (strcmp(name, "PasswordChanged") == 0) { - strcopy(LANGUAGE.PasswordChanged, val, sizeof(LANGUAGE.PasswordChanged)); - return; - } - if (strcmp(name, "Passwordhasbeenchanged") == 0) { - strcopy(LANGUAGE.Passwordhasbeenchanged, val, sizeof(LANGUAGE.Passwordhasbeenchanged)); - return; - } - if (strcmp(name, "Passwordchange") == 0) { - strcopy(LANGUAGE.Passwordchange, val, sizeof(LANGUAGE.Passwordchange)); - return; - } - if (strcmp(name, "Plays") == 0) { - strcopy(LANGUAGE.Plays, val, sizeof(LANGUAGE.Plays)); - return; - } - if (strcmp(name, "PowerofftheWii") == 0) { - strcopy(LANGUAGE.PowerofftheWii, val, sizeof(LANGUAGE.PowerofftheWii)); - return; - } - if (strcmp(name, "Prev") == 0) { - strcopy(LANGUAGE.Prev, val, sizeof(LANGUAGE.Prev)); - return; - } - if (strcmp(name, "PromptsButtons") == 0) { - strcopy(LANGUAGE.PromptsButtons, val, sizeof(LANGUAGE.PromptsButtons)); - return; - } - if (strcmp(name, "ReloadSD") == 0) { - strcopy(LANGUAGE.ReloadSD, val, sizeof(LANGUAGE.ReloadSD)); - return; - } - if (strcmp(name, "RenameGameonWBFS") == 0) { - strcopy(LANGUAGE.RenameGameonWBFS, val, sizeof(LANGUAGE.RenameGameonWBFS)); - return; - } - if (strcmp(name, "Restart") == 0) { - strcopy(LANGUAGE.Restart, val, sizeof(LANGUAGE.Restart)); - return; - } - if (strcmp(name, "Return") == 0) { - strcopy(LANGUAGE.Return, val, sizeof(LANGUAGE.Return)); - return; - } - if (strcmp(name, "ReturntoWiiMenu") == 0) { - strcopy(LANGUAGE.ReturntoWiiMenu, val, sizeof(LANGUAGE.ReturntoWiiMenu)); - return; - } - if (strcmp(name, "Right") == 0) { - strcopy(LANGUAGE.Right, val, sizeof(LANGUAGE.Right)); - return; - } - if (strcmp(name, "Rumble") == 0) { - strcopy(LANGUAGE.Rumble, val, sizeof(LANGUAGE.Rumble)); - return; - } - if (strcmp(name, "QuickBoot") == 0) { - strcopy(LANGUAGE.QuickBoot, val, sizeof(LANGUAGE.QuickBoot)); - return; - } - if (strcmp(name, "Save") == 0) { - strcopy(LANGUAGE.Save, val, sizeof(LANGUAGE.Save)); - return; - } - if (strcmp(name, "SaveFailed") == 0) { - strcopy(LANGUAGE.SaveFailed, val, sizeof(LANGUAGE.SaveFailed)); - return; - } - if (strcmp(name, "Specialthanksto") == 0) { - strcopy(LANGUAGE.Specialthanksto, val, sizeof(LANGUAGE.Specialthanksto)); - return; - } - if (strcmp(name, "theUSBLoaderandreleasingthesourcecodethe") == 0) { - strcopy(LANGUAGE.theUSBLoaderandreleasingthesourcecode, val, sizeof(LANGUAGE.theUSBLoaderandreleasingthesourcecode)); - return; - } - if (strcmp(name, "secondsleft") == 0) { - strcopy(LANGUAGE.secondsleft, val, sizeof(LANGUAGE.secondsleft)); - return; - } - if (strcmp(name, "SelectthePartition") == 0) { - strcopy(LANGUAGE.SelectthePartition, val, sizeof(LANGUAGE.SelectthePartition)); - return; - } - if (strcmp(name, "youwanttoformat") == 0) { - strcopy(LANGUAGE.youwanttoformat, val, sizeof(LANGUAGE.youwanttoformat)); - return; - } - if (strcmp(name, "settings") == 0) { - strcopy(LANGUAGE.settings, val, sizeof(LANGUAGE.settings)); - return; - } - if (strcmp(name, "Setasbackgroundmusic") == 0) { - strcopy(LANGUAGE.Setasbackgroundmusic, val, sizeof(LANGUAGE.Setasbackgroundmusic)); - return; - } - if (strcmp(name, "ShutdowntoIdle") == 0) { - strcopy(LANGUAGE.ShutdowntoIdle, val, sizeof(LANGUAGE.ShutdowntoIdle)); - return; - } - if (strcmp(name, "ShutdownSystem") == 0) { - strcopy(LANGUAGE.ShutdownSystem, val, sizeof(LANGUAGE.ShutdownSystem)); - return; - } - if (strcmp(name, "Standard") == 0) { - strcopy(LANGUAGE.Standard, val, sizeof(LANGUAGE.Standard)); - return; - } - if (strcmp(name, "Success") == 0) { - strcopy(LANGUAGE.Success, val, sizeof(LANGUAGE.Success)); - return; - } - if (strcmp(name, "Successfullyinstalled") == 0) { - strcopy(LANGUAGE.Successfullyinstalled, val, sizeof(LANGUAGE.Successfullyinstalled)); - return; - } - if (strcmp(name, "Successfullydeleted") == 0) { - strcopy(LANGUAGE.Successfullydeleted, val, sizeof(LANGUAGE.Successfullydeleted)); - return; - } - if (strcmp(name, "SuccessfullySaved") == 0) { - strcopy(LANGUAGE.SuccessfullySaved, val, sizeof(LANGUAGE.SuccessfullySaved)); - return; - } - if (strcmp(name, "SystemDefault") == 0) { - strcopy(LANGUAGE.SystemDefault, val, sizeof(LANGUAGE.SystemDefault)); - return; - } - if (strcmp(name, "ThemePath") == 0) { - strcopy(LANGUAGE.ThemePath, val, sizeof(LANGUAGE.ThemePath)); - return; - } - if (strcmp(name, "ThemepathChanged") == 0) { - strcopy(LANGUAGE.ThemepathChanged, val, sizeof(LANGUAGE.ThemepathChanged)); - return; - } - if (strcmp(name, "Themepathchange") == 0) { - strcopy(LANGUAGE.Themepathchange, val, sizeof(LANGUAGE.Themepathchange)); - return; - } - if (strcmp(name, "Titlestxtpath") == 0) { - strcopy(LANGUAGE.Titlestxtpath, val, sizeof(LANGUAGE.Titlestxtpath)); - return; - } - if (strcmp(name, "Titlestxtpathchange") == 0) { - strcopy(LANGUAGE.Titlestxtpathchange, val, sizeof(LANGUAGE.Titlestxtpathchange)); - return; - } - if (strcmp(name, "TitlestxtpathChanged") == 0) { - strcopy(LANGUAGE.TitlestxtpathChanged, val, sizeof(LANGUAGE.TitlestxtpathChanged)); - return; - } - if (strcmp(name, "Try") == 0) { - strcopy(LANGUAGE.Try, val, sizeof(LANGUAGE.Try)); - return; - } - if (strcmp(name, "Tooltips") == 0) { - strcopy(LANGUAGE.Tooltips, val, sizeof(LANGUAGE.Tooltips)); - return; - } - if (strcmp(name, "Timeleft") == 0) { - strcopy(LANGUAGE.Timeleft, val, sizeof(LANGUAGE.Timeleft)); - return; - } - if (strcmp(name, "Unlock") == 0) { - strcopy(LANGUAGE.Unlock, val, sizeof(LANGUAGE.Unlock)); - return; - } - if (strcmp(name, "Unicodefix") == 0) { - strcopy(LANGUAGE.Unicodefix, val, sizeof(LANGUAGE.Unicodefix)); - return; - } - if (strcmp(name, "Uninstall") == 0) { - strcopy(LANGUAGE.Uninstall, val, sizeof(LANGUAGE.Uninstall)); - return; - } - if (strcmp(name, "Updatepath") == 0) { - strcopy(LANGUAGE.Updatepath, val, sizeof(LANGUAGE.Updatepath)); - return; - } - if (strcmp(name, "Updatepathchanged") == 0) { - strcopy(LANGUAGE.Updatepathchanged, val, sizeof(LANGUAGE.Updatepathchanged)); - return; - } - if (strcmp(name, "CheckingforUpdates") == 0) { - strcopy(LANGUAGE.CheckingforUpdates, val, sizeof(LANGUAGE.CheckingforUpdates)); - return; - } - if (strcmp(name, "Updatefailed") == 0) { - strcopy(LANGUAGE.Updatefailed, val, sizeof(LANGUAGE.Updatefailed)); - return; - } - if (strcmp(name, "Updatedol") == 0) { - strcopy(LANGUAGE.Updatedol, val, sizeof(LANGUAGE.Updatedol)); - return; - } - if (strcmp(name, "Updateall") == 0) { - strcopy(LANGUAGE.Updateall, val, sizeof(LANGUAGE.Updateall)); - return; - } - if (strcmp(name, "USBLoaderisprotected") == 0) { - strcopy(LANGUAGE.USBLoaderisprotected, val, sizeof(LANGUAGE.USBLoaderisprotected)); - return; - } - if (strcmp(name, "USBDevicenotfound") == 0) { - strcopy(LANGUAGE.USBDevicenotfound, val, sizeof(LANGUAGE.USBDevicenotfound)); - return; - } - if (strcmp(name, "VideoMode") == 0) { - strcopy(LANGUAGE.VideoMode, val, sizeof(LANGUAGE.VideoMode)); - return; - } - if (strcmp(name, "VIDTVPatch") == 0) { - strcopy(LANGUAGE.VIDTVPatch, val, sizeof(LANGUAGE.VIDTVPatch)); - return; - } - if (strcmp(name, "Volume") == 0) { - strcopy(LANGUAGE.Volume, val, sizeof(LANGUAGE.Volume)); - return; - } - if (strcmp(name, "Waiting") == 0) { - strcopy(LANGUAGE.Waiting, val, sizeof(LANGUAGE.Waiting)); - return; - } - if (strcmp(name, "WaitingforUSBDevice") == 0) { - strcopy(LANGUAGE.WaitingforUSBDevice, val, sizeof(LANGUAGE.WaitingforUSBDevice)); - return; - } - if (strcmp(name, "WidescreenFix") == 0) { - strcopy(LANGUAGE.WidescreenFix, val, sizeof(LANGUAGE.WidescreenFix)); - return; - } - if (strcmp(name, "WiiMenu") == 0) { - strcopy(LANGUAGE.WiiMenu, val, sizeof(LANGUAGE.WiiMenu)); - return; - } - if (strcmp(name, "Wiilight") == 0) { - strcopy(LANGUAGE.Wiilight, val, sizeof(LANGUAGE.Wiilight)); - return; - } - if (strcmp(name, "WrongPassword") == 0) { - strcopy(LANGUAGE.WrongPassword, val, sizeof(LANGUAGE.WrongPassword)); - return; - } - if (strcmp(name, "Yes") == 0) { - strcopy(LANGUAGE.Yes, val, sizeof(LANGUAGE.Yes)); - return; - } - if (strcmp(name, "YoudonthavecIOS") == 0) { - strcopy(LANGUAGE.YoudonthavecIOS, val, sizeof(LANGUAGE.YoudonthavecIOS)); - return; - } - if (strcmp(name, "Japanese") == 0) { - strcopy(LANGUAGE.Japanese, val, sizeof(LANGUAGE.Japanese)); - return; - } - if (strcmp(name, "German") == 0) { - strcopy(LANGUAGE.German, val, sizeof(LANGUAGE.German)); - return; - } - if (strcmp(name, "English") == 0) { - strcopy(LANGUAGE.English, val, sizeof(LANGUAGE.English)); - return; - } - if (strcmp(name, "French") == 0) { - strcopy(LANGUAGE.French, val, sizeof(LANGUAGE.French)); - return; - } - if (strcmp(name, "Spanish") == 0) { - strcopy(LANGUAGE.Spanish, val, sizeof(LANGUAGE.Spanish)); - return; - } - if (strcmp(name, "Italian") == 0) { - strcopy(LANGUAGE.Italian, val, sizeof(LANGUAGE.Italian)); - return; - } - if (strcmp(name, "Dutch") == 0) { - strcopy(LANGUAGE.Dutch, val, sizeof(LANGUAGE.Dutch)); - return; - } - if (strcmp(name, "SChinese") == 0) { - strcopy(LANGUAGE.SChinese, val, sizeof(LANGUAGE.SChinese)); - return; - } - if (strcmp(name, "TChinese") == 0) { - strcopy(LANGUAGE.TChinese, val, sizeof(LANGUAGE.TChinese)); - return; - } - if (strcmp(name, "Korean") == 0) { - strcopy(LANGUAGE.Korean, val, sizeof(LANGUAGE.Korean)); - return; - } - if (strcmp(name, "Successfullyupdated") == 0) { - strcopy(LANGUAGE.Successfullyupdated, val, sizeof(LANGUAGE.Successfullyupdated)); - return; - } - if (strcmp(name, "Nonewupdates") == 0) { - strcopy(LANGUAGE.Nonewupdates, val, sizeof(LANGUAGE.Nonewupdates)); - return; - } - if (strcmp(name, "Restarting") == 0) { - strcopy(LANGUAGE.Restarting, val, sizeof(LANGUAGE.Restarting)); - return; - } - if (strcmp(name, "available") == 0) { - strcopy(LANGUAGE.available, val, sizeof(LANGUAGE.available)); - return; - } - if (strcmp(name, "Doyouwanttoupdate") == 0) { - strcopy(LANGUAGE.Doyouwanttoupdate, val, sizeof(LANGUAGE.Doyouwanttoupdate)); - return; - } - if (strcmp(name, "updating") == 0) { - strcopy(LANGUAGE.updating, val, sizeof(LANGUAGE.updating)); - return; - } - - -} - diff --git a/source/language.h b/source/language.h deleted file mode 100644 index 22d10b37..00000000 --- a/source/language.h +++ /dev/null @@ -1,237 +0,0 @@ -#include -#include "disc.h" - -#ifndef _LANGUAGE_H_ -#define _LANGUAGE_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif - -struct LANGUAGE -{ - - char t3Covers[50]; - char addToFavorite[50]; - char all[30]; - char AppLanguage[50]; - char available[20]; - char Areyousure[50]; - char AutoPatch[30]; - char Back[20]; - char Backgroundmusic[80]; - char Backgroundmusicpath[100]; - char BacktoHBCorWiiMenu[50]; - char BacktoLoader[50]; - char BacktoWiiMenu[50]; - char BootStandard[50]; - char Both[35]; - char Cantcreatedirectory[50]; - char Cancel[20]; - char Cantbeformated[50]; - char Cantdelete[50]; - char CheckingforUpdates[40]; - char ClicktoDownloadCovers[50]; - char Clock[20]; - char Close[20]; - char Continueinstallgame[50]; - char ConsoleDefault[50]; - char Consoleshouldbeunlockedtomodifyit[100]; - char ConsoleLocked[50]; - char CorrectPassword[50]; - char Couldnotinitializenetwork[50]; - char CouldnotopenDisc[50]; - char CouldnotinitializeDIPmodule[60]; - char CoverDownload[50]; - char CoverPath[50]; - char CoverpathChanged[50]; - char Coverpathchange[50]; - char count[20]; - char Credits[30]; - char DiscImages[50]; - char DiscimagePath[50]; - char DiscpathChanged[50]; - char Discpathchange[50]; - char DiscDefault[50]; - char Display[30]; - char Doyouwanttoformat[50]; - char Doyoureallywanttodelete[50]; - char Doyouwanttoretryfor30secs[80]; - char Doyouwanttoupdate[50]; - char Downloadingfile[50]; - char DownloadBoxartimage[50]; - char Downloadfinished[50]; - char Defaultgamesettings[50]; - char Defaultsettings[40]; - char Error[30]; - char BOOTERROR[50]; - char ErrorreadingDisc[50]; - char ExitUSBISOLoader[50]; - char InitializingNetwork[50]; - char InsertDisk[50]; - char InsertaWiiDisc[50]; - char InsertaSDCardtodownloadimages[80]; - char InsertaSDCardtosave[60]; - char InsertaSDCardtousethatoption[100]; - char InstallRenameandDeleteareunlocked[100]; - char Installerror[50]; - char Installagame[50]; - char Installinggame[50]; - char Failedtoboot[50]; - char FailedtomountfrontSDcard[80]; - char FailedtosetUSB[50]; - char Failedformating[50]; - char fave[15]; - char Filenotfound[50]; - char filesnotfoundontheserver[80]; - char filesleft[50]; - char FlipX[50]; - char Force[50]; - char Youneedtoformatapartition[80]; - char Format[50]; - char Formattingpleasewait[70]; - char formated[30]; - char free[30]; - char FreeSpace[50]; - char FullShutdown[50]; - char GameID[30]; - char Games[50]; - char Gameisalreadyinstalled[90]; - char GameRegion[50]; - char GameSize[50]; - char GoBack[50]; - char GotoPage[50];/////// - char HowtoShutdown[50]; - char Homemenu[30]; - char hour[30]; - char keyboard[50]; - char Language[50]; - char Langchange[50]; - char Left[50]; - char LikeSysMenu[50]; - char ListSort[30]; - char LoadingincIOS[50]; - char Loadingstandardlanguage[80]; - char Loadingstandardmusic[80]; - char Lock[30]; - char LockConsole[50]; - char Patchcountrystrings[80]; - char Missingfiles[50]; - char Networkiniterror[50]; - char Neither[40]; - char Next[40]; - char No[40]; - char Nofilemissing[50]; - char NoHDDfound[40]; - char NoSDcardinserted[50]; - char Nopartitionsfound[50]; - char NoUSBDevice[40]; - char NoWBFSpartitionfound[50]; - char Nonewupdates[40]; - char NormalCovers[40]; - char Normal[30]; - char NotaWiiDisc[40]; - char NoUSBDevicefound[50]; - char Notenoughfreespace[50]; - char Notasupportedformat[100]; - char notset[40]; - char of[30]; - char OFF[30]; - char OfficialSite[50]; - char ok[30]; - char ON[30]; - char OnlyInstall[50]; - char Parentalcontrol[50]; - char Partition[50]; - char Password[50]; - char PasswordChanged[50]; - char Passwordhasbeenchanged[80]; - char Passwordchange[50]; - char PowerofftheWii[50]; - char Plays[20]; - char Prev[50]; - char PromptsButtons[50]; - char ReloadSD[50]; - char RenameGameonWBFS[50]; - char Restart[30]; - char Restarting[20]; - char Return[30]; - char ReturntoWiiMenu[50]; - char Right[30]; - char Rumble[30]; - char QuickBoot[50]; - char Save[30]; - char SaveFailed[50]; - char Specialthanksto[50]; - char For[20]; - char theUSBLoaderandreleasingthesourcecode[100]; - char secondsleft[50]; - char SelectthePartition[50]; - char youwanttoformat[50]; - char settings[50]; - char Setasbackgroundmusic[90]; - char Standard[30]; - char ShutdowntoIdle[50]; - char ShutdownSystem[50]; - char Success[30]; - char Successfullyinstalled[80]; - char Successfullyupdated[70]; - char Successfullydeleted[60]; - char SuccessfullySaved[50]; - char SystemDefault[50]; - char ThemePath[50]; - char ThemepathChanged[50]; - char Themepathchange[80]; - char Titlestxtpath[80]; - char Titlestxtpathchange[80]; - char TitlestxtpathChanged[80]; - char Try[30]; - char Tooltips[50]; - char Timeleft[50]; - char Unlock[50]; - char Unicodefix[50]; - char Uninstall[50]; - char USBLoaderisprotected[80]; - char USBDevicenotfound[80]; - char updating[25]; - char Updatepath[50]; - char Updatepathchanged[50]; - char Updatefailed[40]; - char Updatedol[40]; - char Updateall[40]; - char VideoMode[50]; - char VIDTVPatch[50]; - char Volume[50]; - char Waiting[50]; - char WaitingforUSBDevice[80]; - char WidescreenFix[50]; - char WiiMenu[50]; - char Wiilight[20]; - char WrongPassword[50]; - char Yes[20]; - char YoudonthavecIOS[70]; - char Japanese[30]; - char German[30]; - char English[30]; - char French[30]; - char Spanish[30]; - char Italian[30]; - char Dutch[30]; - char SChinese[30]; - char TChinese[30]; - char Korean[30]; -}; - -extern struct LANGUAGE LANGUAGE; - -char* strcopy(char *dest, char *src, int size); -bool checkfile(char * path); -void lang_default(); -void language_set(char *name, char *val); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/source/libwbfs/libwbfs.c b/source/libwbfs/libwbfs.c deleted file mode 100644 index b891c3b5..00000000 --- a/source/libwbfs/libwbfs.c +++ /dev/null @@ -1,632 +0,0 @@ -// Copyright 2009 Kwiirk -// Licensed under the terms of the GNU GPL, version 2 -// http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt - - -#include "libwbfs.h" -#include - -#define likely(x) __builtin_expect(!!(x), 1) -#define unlikely(x) __builtin_expect(!!(x), 0) - -#define ERROR(x) do {wbfs_error(x);goto error;}while(0) -#define ALIGN_LBA(x) (((x)+p->hd_sec_sz-1)&(~(p->hd_sec_sz-1))) -static int force_mode=0; -void wbfs_set_force_mode(int force) -{ - force_mode = force; -} -static u8 size_to_shift(u32 size) -{ - u8 ret = 0; - while(size) - { - ret++; - size>>=1; - } - return ret-1; -} -#define read_le32_unaligned(x) ((x)[0]|((x)[1]<<8)|((x)[2]<<16)|((x)[3]<<24)) - - -wbfs_t*wbfs_open_hd(rw_sector_callback_t read_hdsector, - rw_sector_callback_t write_hdsector, - void *callback_data, - int hd_sector_size, int num_hd_sector __attribute((unused)), int reset) -{ - int i=num_hd_sector,ret; - u8 *ptr,*tmp_buffer = wbfs_ioalloc(hd_sector_size); - u8 part_table[16*4]; - ret = read_hdsector(callback_data,0,1,tmp_buffer); - if(ret) - return 0; - //find wbfs partition - wbfs_memcpy(part_table,tmp_buffer+0x1be,16*4); - ptr = part_table; - for(i=0;i<4;i++,ptr+=16) - { - u32 part_lba = read_le32_unaligned(ptr+0x8); - wbfs_head_t *head = (wbfs_head_t *)tmp_buffer; - ret = read_hdsector(callback_data,part_lba,1,tmp_buffer); - // verify there is the magic. - if (head->magic == wbfs_htonl(WBFS_MAGIC)) - { - wbfs_t*p = wbfs_open_partition(read_hdsector,write_hdsector, - callback_data,hd_sector_size,0,part_lba,reset); - return p; - } - } - if(reset)// XXX make a empty hd partition.. - { - } - return 0; -} -wbfs_t*wbfs_open_partition(rw_sector_callback_t read_hdsector, - rw_sector_callback_t write_hdsector, - void *callback_data, - int hd_sector_size, int num_hd_sector, u32 part_lba, int reset) -{ - wbfs_t *p = wbfs_malloc(sizeof(wbfs_t)); - - wbfs_head_t *head = wbfs_ioalloc(hd_sector_size?hd_sector_size:512); - - //constants, but put here for consistancy - p->wii_sec_sz = 0x8000; - p->wii_sec_sz_s = size_to_shift(0x8000); - p->n_wii_sec = (num_hd_sector/0x8000)*hd_sector_size; - p->n_wii_sec_per_disc = 143432*2;//support for double layers discs.. - p->head = head; - p->part_lba = part_lba; - // init the partition - if (reset) - { - u8 sz_s; - wbfs_memset(head,0,hd_sector_size); - head->magic = wbfs_htonl(WBFS_MAGIC); - head->hd_sec_sz_s = size_to_shift(hd_sector_size); - head->n_hd_sec = wbfs_htonl(num_hd_sector); - // choose minimum wblk_sz that fits this partition size - for(sz_s=6;sz_s<11;sz_s++) - { - // ensure that wbfs_sec_sz is big enough to address every blocks using 16 bits - if(p->n_wii_sec <((1U<<16)*(1<wbfs_sec_sz_s = sz_s+p->wii_sec_sz_s; - }else - read_hdsector(callback_data,p->part_lba,1,head); - if (head->magic != wbfs_htonl(WBFS_MAGIC)) - ERROR("bad magic"); - if(!force_mode && hd_sector_size && head->hd_sec_sz_s != size_to_shift(hd_sector_size)) - ERROR("hd sector size doesn't match"); - if(!force_mode && num_hd_sector && head->n_hd_sec != wbfs_htonl(num_hd_sector)) - ERROR("hd num sector doesn't match"); - p->hd_sec_sz = 1<hd_sec_sz_s; - p->hd_sec_sz_s = head->hd_sec_sz_s; - p->n_hd_sec = wbfs_ntohl(head->n_hd_sec); - - p->n_wii_sec = (p->n_hd_sec/p->wii_sec_sz)*(p->hd_sec_sz); - - p->wbfs_sec_sz_s = head->wbfs_sec_sz_s; - p->wbfs_sec_sz = 1<wbfs_sec_sz_s; - p->n_wbfs_sec = p->n_wii_sec >> (p->wbfs_sec_sz_s - p->wii_sec_sz_s); - p->n_wbfs_sec_per_disc = p->n_wii_sec_per_disc >> (p->wbfs_sec_sz_s - p->wii_sec_sz_s); - p->disc_info_sz = ALIGN_LBA(sizeof(wbfs_disc_info_t) + p->n_wbfs_sec_per_disc*2); - - //printf("hd_sector_size %X wii_sector size %X wbfs sector_size %X\n",p->hd_sec_sz,p->wii_sec_sz,p->wbfs_sec_sz); - p->read_hdsector = read_hdsector; - p->write_hdsector = write_hdsector; - p->callback_data = callback_data; - - p->freeblks_lba = (p->wbfs_sec_sz - p->n_wbfs_sec/8)>>p->hd_sec_sz_s; - - if(!reset) - p->freeblks = 0; // will alloc and read only if needed - else - { - // init with all free blocks - p->freeblks = wbfs_ioalloc(ALIGN_LBA(p->n_wbfs_sec/8)); - wbfs_memset(p->freeblks,0xff,p->n_wbfs_sec/8); - } - p->max_disc = (p->freeblks_lba-1)/(p->disc_info_sz>>p->hd_sec_sz_s); - if(p->max_disc > p->hd_sec_sz - sizeof(wbfs_head_t)) - p->max_disc = p->hd_sec_sz - sizeof(wbfs_head_t); - - p->tmp_buffer = wbfs_ioalloc(p->hd_sec_sz); - p->n_disc_open = 0; - return p; -error: - wbfs_free(p); - wbfs_iofree(head); - return 0; - -} - -void wbfs_sync(wbfs_t*p) -{ - // copy back descriptors - if(p->write_hdsector){ - p->write_hdsector(p->callback_data,p->part_lba+0,1, p->head); - - if(p->freeblks) - p->write_hdsector(p->callback_data,p->part_lba+p->freeblks_lba,ALIGN_LBA(p->n_wbfs_sec/8)>>p->hd_sec_sz_s, p->freeblks); - } -} -void wbfs_close(wbfs_t*p) -{ - wbfs_sync(p); - - if(p->n_disc_open) - ERROR("trying to close wbfs while discs still open"); - - wbfs_iofree(p->head); - wbfs_iofree(p->tmp_buffer); - if(p->freeblks) - wbfs_iofree(p->freeblks); - - wbfs_free(p); - -error: - return; -} - -wbfs_disc_t *wbfs_open_disc(wbfs_t* p, u8 *discid) -{ - u32 i; - int disc_info_sz_lba = p->disc_info_sz>>p->hd_sec_sz_s; - wbfs_disc_t *d = 0; - for(i=0;imax_disc;i++) - { - if (p->head->disc_table[i]){ - p->read_hdsector(p->callback_data, - p->part_lba+1+i*disc_info_sz_lba,1,p->tmp_buffer); - if(wbfs_memcmp(discid,p->tmp_buffer,6)==0){ - d = wbfs_malloc(sizeof(*d)); - if(!d) - ERROR("allocating memory"); - d->p = p; - d->i = i; - d->header = wbfs_ioalloc(p->disc_info_sz); - if(!d->header) - ERROR("allocating memory"); - p->read_hdsector(p->callback_data, - p->part_lba+1+i*disc_info_sz_lba, - disc_info_sz_lba,d->header); - p->n_disc_open ++; -// for(i=0;in_wbfs_sec_per_disc;i++) -// printf("%d,",wbfs_ntohs(d->header->wlba_table[i])); - return d; - } - } - } - return 0; -error: - if(d) - wbfs_iofree(d); - return 0; - -} -void wbfs_close_disc(wbfs_disc_t*d) -{ - d->p->n_disc_open --; - wbfs_iofree(d->header); - wbfs_free(d); -} -// offset is pointing 32bit words to address the whole dvd, although len is in bytes -int wbfs_disc_read(wbfs_disc_t*d,u32 offset, u8 *data, u32 len) -{ - - wbfs_t *p = d->p; - u16 wlba = offset>>(p->wbfs_sec_sz_s-2); - u32 iwlba_shift = p->wbfs_sec_sz_s - p->hd_sec_sz_s; - u32 lba_mask = (p->wbfs_sec_sz-1)>>(p->hd_sec_sz_s); - u32 lba = (offset>>(p->hd_sec_sz_s-2))&lba_mask; - u32 off = offset&((p->hd_sec_sz>>2)-1); - u16 iwlba = wbfs_ntohs(d->header->wlba_table[wlba]); - u32 len_copied; - int err = 0; - u8 *ptr = data; - if(unlikely(iwlba==0)) - return 1; - if(unlikely(off)){ - off*=4; - err = p->read_hdsector(p->callback_data, - p->part_lba + (iwlba<tmp_buffer); - if(err) - return err; - len_copied = p->hd_sec_sz - off; - if(likely(len < len_copied)) - len_copied = len; - wbfs_memcpy(ptr, p->tmp_buffer + off, len_copied); - len -= len_copied; - ptr += len_copied; - lba++; - if(unlikely(lba>lba_mask && len)){ - lba=0; - iwlba = wbfs_ntohs(d->header->wlba_table[++wlba]); - if(unlikely(iwlba==0)) - return 1; - } - } - while(likely(len>=p->hd_sec_sz)) - { - u32 nlb = len>>(p->hd_sec_sz_s); - - if(unlikely(lba + nlb > p->wbfs_sec_sz)) // dont cross wbfs sectors.. - nlb = p->wbfs_sec_sz-lba; - err = p->read_hdsector(p->callback_data, - p->part_lba + (iwlba<hd_sec_sz_s; - ptr += nlb<hd_sec_sz_s; - lba += nlb; - if(unlikely(lba>lba_mask && len)){ - lba = 0; - iwlba =wbfs_ntohs(d->header->wlba_table[++wlba]); - if(unlikely(iwlba==0)) - return 1; - } - } - if(unlikely(len)){ - err = p->read_hdsector(p->callback_data, - p->part_lba + (iwlba<tmp_buffer); - if(err) - return err; - wbfs_memcpy(ptr, p->tmp_buffer, len); - } - return 0; -} - -// disc listing -u32 wbfs_count_discs(wbfs_t*p) -{ - u32 i,count=0; - for(i=0;imax_disc;i++) - if (p->head->disc_table[i]) - count++; - return count; - -} -u32 wbfs_sector_used(wbfs_t *p,wbfs_disc_info_t *di) -{ - u32 tot_blk=0,j; - for(j=0;jn_wbfs_sec_per_disc;j++) - if(wbfs_ntohs(di->wlba_table[j])) - tot_blk++; - return tot_blk; - -} -u32 wbfs_get_disc_info(wbfs_t*p, u32 index,u8 *header,int header_size,u32 *size)//size in 32 bit -{ - u32 i,count=0; - int disc_info_sz_lba = p->disc_info_sz>>p->hd_sec_sz_s; - for(i=0;imax_disc;i++) - if (p->head->disc_table[i]){ - if(count++==index) - { - p->read_hdsector(p->callback_data, - p->part_lba+1+i*disc_info_sz_lba,1,p->tmp_buffer); - if(header_size > (int)p->hd_sec_sz) - header_size = p->hd_sec_sz; - u32 magic = wbfs_ntohl(*(u32*)(p->tmp_buffer+24)); - if(magic!=0x5D1C9EA3){ - p->head->disc_table[i]=0; - return 1; - } - memcpy(header,p->tmp_buffer,header_size); - if(size) - { - u8 *header = wbfs_ioalloc(p->disc_info_sz); - p->read_hdsector(p->callback_data, - p->part_lba+1+i*disc_info_sz_lba,disc_info_sz_lba,header); - u32 sec_used = wbfs_sector_used(p,(wbfs_disc_info_t *)header); - wbfs_iofree(header); - *size = sec_used<<(p->wbfs_sec_sz_s-2); - } - return 0; - } - } - return 1; -} - -static void load_freeblocks(wbfs_t*p) -{ - if(p->freeblks) - return; - // XXX should handle malloc error.. - p->freeblks = wbfs_ioalloc(ALIGN_LBA(p->n_wbfs_sec/8)); - p->read_hdsector(p->callback_data,p->part_lba+p->freeblks_lba,ALIGN_LBA(p->n_wbfs_sec/8)>>p->hd_sec_sz_s, p->freeblks); - -} -u32 wbfs_count_usedblocks(wbfs_t*p) -{ - u32 i,j,count=0; - load_freeblocks(p); - for(i=0;in_wbfs_sec/(8*4);i++) - { - u32 v = wbfs_ntohl(p->freeblks[i]); - if(v == ~0U) - count+=32; - else if(v!=0) - for(j=0;j<32;j++) - if (v & (1<n_wbfs_sec/(8*4);i++) - { - u32 v = wbfs_ntohl(p->freeblks[i]); - if(v != 0) - { - for(j=0;j<32;j++) - if (v & (1<freeblks[i] = wbfs_htonl(v & ~(1<freeblks[i]); - p->freeblks[i] = wbfs_htonl(v | 1<wbfs_sec_sz_s-p->wii_sec_sz_s); - wiidisc_t *d = 0; - u8 *used = 0; - wbfs_disc_info_t *info = 0; - u8* copy_buffer = 0; - used = wbfs_malloc(p->n_wii_sec_per_disc); - time_t last_time = 0; - time_t time_now = 0; - if(!used) - ERROR("unable to alloc memory"); - if(!copy_1_1) - { - d = wd_open_disc(read_src_wii_disc,callback_data); - if(!d) - ERROR("unable to open wii disc"); - wd_build_disc_usage(d,sel,used); - wd_close_disc(d); - d = 0; - } - - - for(i=0;imax_disc;i++)// find a free slot. - if(p->head->disc_table[i]==0) - break; - if(i==p->max_disc) - ERROR("no space left on device (table full)"); - p->head->disc_table[i] = 1; - discn = i; - load_freeblocks(p); - - // build disc info - info = wbfs_ioalloc(p->disc_info_sz); - read_src_wii_disc(callback_data,0,0x100,info->disc_header_copy); - - copy_buffer = wbfs_ioalloc(p->wii_sec_sz); - if(!copy_buffer) - ERROR("alloc memory"); - tot=0; - cur=0; - if(spinner){ - // count total number to write for spinner - for(i=0; in_wbfs_sec_per_disc;i++) - if(copy_1_1 || block_used(used,i,wii_sec_per_wbfs_sect)) tot += wii_sec_per_wbfs_sect; - spinner(0,tot); - } - for(i=0; in_wbfs_sec_per_disc;i++){ - u16 bl = 0; - if(copy_1_1 || block_used(used,i,wii_sec_per_wbfs_sect)) { - u16 j; - - bl = alloc_block(p); - if (bl==0xffff) - ERROR("no space left on device (disc full)"); - for(j=0; jwbfs_sec_sz>>2)) + (j*(p->wii_sec_sz>>2)); - - read_src_wii_disc(callback_data,offset,p->wii_sec_sz,copy_buffer); - - //fix the partition table - if(offset == (0x40000>>2)) - wd_fix_partition_table(d, sel, copy_buffer); - p->write_hdsector(p->callback_data,p->part_lba+bl*(p->wbfs_sec_sz/p->hd_sec_sz)+j*(p->wii_sec_sz/p->hd_sec_sz), - p->wii_sec_sz/p->hd_sec_sz,copy_buffer); - cur++; - } - if(spinner) { - if(last_time == 0) - time(&last_time); - - time(&time_now); - /* Update that crap only every 0.5 secs */ - if (difftime(time_now,last_time) > 0.5) { - spinner(cur,tot); - last_time = 0; - } - } - } - info->wlba_table[i] = wbfs_htons(bl); - } - // write disc info - int disc_info_sz_lba = p->disc_info_sz>>p->hd_sec_sz_s; - p->write_hdsector(p->callback_data,p->part_lba+1+discn*disc_info_sz_lba,disc_info_sz_lba,info); - wbfs_sync(p); -error: - if(d) - wd_close_disc(d); - if(used) - wbfs_free(used); - if(info) - wbfs_iofree(info); - if(copy_buffer) - wbfs_iofree(copy_buffer); - // init with all free blocks - - return 0; -} - -u32 wbfs_rm_disc(wbfs_t*p, u8* discid) -{ - wbfs_disc_t *d = wbfs_open_disc(p,discid); - int i; - int discn = 0; - int disc_info_sz_lba = p->disc_info_sz>>p->hd_sec_sz_s; - if(!d) - return 1; - load_freeblocks(p); - discn = d->i; - for( i=0; i< p->n_wbfs_sec_per_disc; i++) - { - u32 iwlba = wbfs_ntohs(d->header->wlba_table[i]); - if (iwlba) - free_block(p,iwlba); - } - memset(d->header,0,p->disc_info_sz); - p->write_hdsector(p->callback_data,p->part_lba+1+discn*disc_info_sz_lba,disc_info_sz_lba,d->header); - p->head->disc_table[discn] = 0; - wbfs_close_disc(d); - wbfs_sync(p); - return 0; -} - -u32 wbfs_ren_disc(wbfs_t*p, u8* discid, u8* newname) -{ - wbfs_disc_t *d = wbfs_open_disc(p,discid); - int disc_info_sz_lba = p->disc_info_sz>>p->hd_sec_sz_s; - - if(!d) - return 1; - - memset(d->header->disc_header_copy+0x20, 0, 0x40); - strncpy((char *) d->header->disc_header_copy+0x20, (char *) newname, 0x39); - - p->write_hdsector(p->callback_data,p->part_lba+1+d->i*disc_info_sz_lba,disc_info_sz_lba,d->header); - wbfs_close_disc(d); - return 0; -} - -// trim the file-system to its minimum size -u32 wbfs_trim(wbfs_t*p); - -// data extraction -u32 wbfs_extract_disc(wbfs_disc_t*d, rw_sector_callback_t write_dst_wii_sector,void *callback_data,progress_callback_t spinner) -{ - wbfs_t *p = d->p; - u8* copy_buffer = 0; - int i; - int src_wbs_nlb=p->wbfs_sec_sz/p->hd_sec_sz; - int dst_wbs_nlb=p->wbfs_sec_sz/p->wii_sec_sz; - copy_buffer = wbfs_ioalloc(p->wbfs_sec_sz); - if(!copy_buffer) - ERROR("alloc memory"); - - for( i=0; i< p->n_wbfs_sec_per_disc; i++) - { - u32 iwlba = wbfs_ntohs(d->header->wlba_table[i]); - if (iwlba) - { - - if(spinner) - spinner(i,p->n_wbfs_sec_per_disc); - p->read_hdsector(p->callback_data, p->part_lba + iwlba*src_wbs_nlb, src_wbs_nlb, copy_buffer); - write_dst_wii_sector(callback_data, i*dst_wbs_nlb, dst_wbs_nlb, copy_buffer); - } - } - wbfs_iofree(copy_buffer); - return 0; -error: - return 1; -} -u32 wbfs_extract_file(wbfs_disc_t*d, char *path); - -float wbfs_estimate_disc -( - wbfs_t *p, read_wiidisc_callback_t read_src_wii_disc, - void *callback_data, - partition_selector_t sel) -{ - u8 *b; - int i; - u32 tot; - u32 wii_sec_per_wbfs_sect = 1 << (p->wbfs_sec_sz_s-p->wii_sec_sz_s); - wiidisc_t *d = 0; - u8 *used = 0; - wbfs_disc_info_t *info = 0; - - tot = 0; - - used = wbfs_malloc(p->n_wii_sec_per_disc); - if (!used) - { - ERROR("unable to alloc memory"); - } - - d = wd_open_disc(read_src_wii_disc, callback_data); - if (!d) - { - ERROR("unable to open wii disc"); - } - - wd_build_disc_usage(d,sel,used); - wd_close_disc(d); - d = 0; - - info = wbfs_ioalloc(p->disc_info_sz); - b = (u8 *)info; - read_src_wii_disc(callback_data, 0, 0x100, info->disc_header_copy); - - //fprintf(stderr, "estimating %c%c%c%c%c%c %s...\n",b[0], b[1], b[2], b[3], b[4], b[5], b + 0x20); - - for (i = 0; i < p->n_wbfs_sec_per_disc; i++) - { - if (block_used(used, i, wii_sec_per_wbfs_sect)) - { - tot++; - } - } - //memcpy(header, b,0x100); - -error: - if (d) - wd_close_disc(d); - - if (used) - wbfs_free(used); - - if (info) - wbfs_iofree(info); - - return tot * (((p->wbfs_sec_sz*1.0) / p->hd_sec_sz) * 512); -} diff --git a/source/libwbfs/libwbfs.h b/source/libwbfs/libwbfs.h deleted file mode 100644 index 2f6f1a9f..00000000 --- a/source/libwbfs/libwbfs.h +++ /dev/null @@ -1,223 +0,0 @@ -#ifndef LIBWBFS_H -#define LIBWBFS_H - -#include "libwbfs_os.h" // this file is provided by the project wanting to compile libwbfs -#include "wiidisc.h" - -#ifdef __cplusplus - extern "C" { -#endif /* __cplusplus */ - -typedef u32 be32_t; -typedef u16 be16_t; - - - -typedef struct wbfs_head -{ - be32_t magic; - // parameters copied in the partition for easy dumping, and bug reports - be32_t n_hd_sec; // total number of hd_sec in this partition - u8 hd_sec_sz_s; // sector size in this partition - u8 wbfs_sec_sz_s; // size of a wbfs sec - u8 padding3[2]; - u8 disc_table[0]; // size depends on hd sector size -}__attribute((packed)) wbfs_head_t ; - -typedef struct wbfs_disc_info -{ - u8 disc_header_copy[0x100]; - be16_t wlba_table[0]; -}wbfs_disc_info_t; - -// WBFS first wbfs_sector structure: -// -// ----------- -// | wbfs_head | (hd_sec_sz) -// ----------- -// | | -// | disc_info | -// | | -// ----------- -// | | -// | disc_info | -// | | -// ----------- -// | | -// | ... | -// | | -// ----------- -// | | -// | disc_info | -// | | -// ----------- -// | | -// |freeblk_tbl| -// | | -// ----------- -// - -// callback definition. Return 1 on fatal error (callback is supposed to make retries until no hopes..) -typedef int (*rw_sector_callback_t)(void*fp,u32 lba,u32 count,void*iobuf); -typedef void (*progress_callback_t)(int status,int total); - - -typedef struct wbfs_s -{ - wbfs_head_t *head; - - /* hdsectors, the size of the sector provided by the hosting hard drive */ - u32 hd_sec_sz; - u8 hd_sec_sz_s; // the power of two of the last number - u32 n_hd_sec; // the number of hd sector in the wbfs partition - - /* standard wii sector (0x8000 bytes) */ - u32 wii_sec_sz; - u8 wii_sec_sz_s; - u32 n_wii_sec; - u32 n_wii_sec_per_disc; - - /* The size of a wbfs sector */ - u32 wbfs_sec_sz; - u32 wbfs_sec_sz_s; - u16 n_wbfs_sec; // this must fit in 16 bit! - u16 n_wbfs_sec_per_disc; // size of the lookup table - - u32 part_lba; - /* virtual methods to read write the partition */ - rw_sector_callback_t read_hdsector; - rw_sector_callback_t write_hdsector; - void *callback_data; - - u16 max_disc; - u32 freeblks_lba; - u32 *freeblks; - u16 disc_info_sz; - - u8 *tmp_buffer; // pre-allocated buffer for unaligned read - - u32 n_disc_open; - -}wbfs_t; - -typedef struct wbfs_disc_s -{ - wbfs_t *p; - wbfs_disc_info_t *header; // pointer to wii header - int i; // disc index in the wbfs header (disc_table) -}wbfs_disc_t; - - -#define WBFS_MAGIC (('W'<<24)|('B'<<16)|('F'<<8)|('S')) - -/*! @brief open a MSDOS partitionned harddrive. This tries to find a wbfs partition into the harddrive - @param read_hdsector,write_hdsector: accessors to a harddrive - @hd_sector_size: size of the hd sector. Can be set to zero if the partition in already initialized - @num_hd_sector: number of sectors in this disc. Can be set to zero if the partition in already initialized - @reset: not implemented, This will format the whole harddrive with one wbfs partition that fits the whole disk. - calls wbfs_error() to have textual meaning of errors - @return NULL in case of error -*/ -wbfs_t*wbfs_open_hd(rw_sector_callback_t read_hdsector, - rw_sector_callback_t write_hdsector, - void *callback_data, - int hd_sector_size, int num_hd_sector, int reset); - -/*! @brief open a wbfs partition - @param read_hdsector,write_hdsector: accessors to the partition - @hd_sector_size: size of the hd sector. Can be set to zero if the partition in already initialized - @num_hd_sector: number of sectors in this partition. Can be set to zero if the partition in already initialized - @partition_lba: The partitio offset if you provided accessors to the whole disc. - @reset: initialize the partition with an empty wbfs. - calls wbfs_error() to have textual meaning of errors - @return NULL in case of error -*/ -wbfs_t*wbfs_open_partition(rw_sector_callback_t read_hdsector, - rw_sector_callback_t write_hdsector, - void *callback_data, - int hd_sector_size, int num_hd_sector, u32 partition_lba, int reset); - - -/*! @brief close a wbfs partition, and sync the metadatas to the disc */ -void wbfs_close(wbfs_t*); - -/*! @brief open a disc inside a wbfs partition use a 6 char discid+vendorid - @return NULL if discid is not present -*/ -wbfs_disc_t *wbfs_open_disc(wbfs_t* p, u8 *diskid); - -/*! @brief close a already open disc inside a wbfs partition */ -void wbfs_close_disc(wbfs_disc_t*d); - -u32 wbfs_sector_used(wbfs_t *p,wbfs_disc_info_t *di); - -/*! @brief accessor to the wii disc - @param d: a pointer to already open disc - @param offset: an offset inside the disc, *points 32bit words*, allowing to access 16GB data - @param len: The length of the data to fetch, in *bytes* - */ -// offset is pointing 32bit words to address the whole dvd, although len is in bytes -int wbfs_disc_read(wbfs_disc_t*d,u32 offset, u8 *data, u32 len); - -/*! @return the number of discs inside the paritition */ -u32 wbfs_count_discs(wbfs_t*p); -/*! get the disc info of ith disc inside the partition. It correspond to the first 0x100 bytes of the wiidvd - http://www.wiibrew.org/wiki/Wiidisc#Header - @param i: index of the disc inside the partition - @param header: pointer to 0x100 bytes to write the header - @size: optional pointer to a 32bit word that will get the size in 32bit words of the DVD taken on the partition. -*/ -u32 wbfs_get_disc_info(wbfs_t*p, u32 i,u8 *header,int header_size,u32 *size); - -/*! get the number of used block of the partition. - to be multiplied by p->wbfs_sec_sz (use 64bit multiplication) to have the number in bytes -*/ -u32 wbfs_count_usedblocks(wbfs_t*p); - -/******************* write access ******************/ - -/*! add a wii dvd inside the partition - @param read_src_wii_disc: a callback to access the wii dvd. offsets are in 32bit, len in bytes! - @callback_data: private data passed to the callback - @spinner: a pointer to a function that is regulary called to update a progress bar. - @sel: selects which partitions to copy. - @copy_1_1: makes a 1:1 copy, whenever a game would not use the wii disc format, and some data is hidden outside the filesystem. - */ -u32 wbfs_add_disc(wbfs_t*p,read_wiidisc_callback_t read_src_wii_disc, void *callback_data, - progress_callback_t spinner,partition_selector_t sel,int copy_1_1); - - -/*! remove a wiidvd inside a partition */ -u32 wbfs_rm_disc(wbfs_t*p, u8* discid); - -/*! rename a game */ -u32 wbfs_ren_disc(wbfs_t*p, u8* discid, u8* newname); - -/*! trim the file-system to its minimum size - This allows to use wbfs as a wiidisc container - */ -u32 wbfs_trim(wbfs_t*p); - -/*! extract a disc from the wbfs, unused sectors are just untouched, allowing descent filesystem to only really usefull space to store the disc. -Even if the filesize is 4.7GB, the disc usage will be less. - */ -u32 wbfs_extract_disc(wbfs_disc_t*d, rw_sector_callback_t write_dst_wii_sector,void *callback_data,progress_callback_t spinner); - -/*! extract a file from the wii disc filesystem. - E.G. Allows to extract the opening.bnr to install a game as a system menu channel - */ -u32 wbfs_extract_file(wbfs_disc_t*d, char *path); - -// remove some sanity checks -void wbfs_set_force_mode(int force); - -float wbfs_estimate_disc( - wbfs_t *p, read_wiidisc_callback_t read_src_wii_disc, - void *callback_data, - partition_selector_t sel); - -#ifdef __cplusplus - } -#endif /* __cplusplus */ - -#endif diff --git a/source/libwbfs/libwbfs_os.h b/source/libwbfs/libwbfs_os.h deleted file mode 100644 index 7b3efbaa..00000000 --- a/source/libwbfs/libwbfs_os.h +++ /dev/null @@ -1,33 +0,0 @@ -#ifndef LIBWBFS_GLUE_H -#define LIBWBFS_GLUE_H - -#include - -#define debug_printf(fmt, ...); - -#include -#define wbfs_fatal(x) do { printf("\nwbfs panic: %s\n\n",x); while(1); } while(0) -#define wbfs_error(x) do { printf("\nwbfs error: %s\n\n",x); } while(0) - -#include -#include - -#define wbfs_malloc(x) malloc(x) -#define wbfs_free(x) free(x) -#define wbfs_ioalloc(x) memalign(32, x) -#define wbfs_iofree(x) free(x) -#define wbfs_be16(x) (*((u16*)(x))) -#define wbfs_be32(x) (*((u32*)(x))) -#define wbfs_ntohl(x) (x) -#define wbfs_htonl(x) (x) -#define wbfs_ntohs(x) (x) -#define wbfs_htons(x) (x) - -#include - -#define wbfs_memcmp(x,y,z) memcmp(x,y,z) -#define wbfs_memcpy(x,y,z) memcpy(x,y,z) -#define wbfs_memset(x,y,z) memset(x,y,z) - - -#endif diff --git a/source/libwbfs/rijndael.c b/source/libwbfs/rijndael.c deleted file mode 100644 index baf8c871..00000000 --- a/source/libwbfs/rijndael.c +++ /dev/null @@ -1,398 +0,0 @@ -/* Rijndael Block Cipher - rijndael.c - - Written by Mike Scott 21st April 1999 - mike@compapp.dcu.ie - - Permission for free direct or derivative use is granted subject - to compliance with any conditions that the originators of the - algorithm place on its exploitation. - -*/ - -#include -#include - -#define u8 unsigned char /* 8 bits */ -#define u32 unsigned long /* 32 bits */ -#define u64 unsigned long long - -/* rotates x one bit to the left */ - -#define ROTL(x) (((x)>>7)|((x)<<1)) - -/* Rotates 32-bit word left by 1, 2 or 3 byte */ - -#define ROTL8(x) (((x)<<8)|((x)>>24)) -#define ROTL16(x) (((x)<<16)|((x)>>16)) -#define ROTL24(x) (((x)<<24)|((x)>>8)) - -/* Fixed Data */ - -static u8 InCo[4]={0xB,0xD,0x9,0xE}; /* Inverse Coefficients */ - -static u8 fbsub[256]; -static u8 rbsub[256]; -static u8 ptab[256],ltab[256]; -static u32 ftable[256]; -static u32 rtable[256]; -static u32 rco[30]; - -/* Parameter-dependent data */ - -int Nk,Nb,Nr; -u8 fi[24],ri[24]; -u32 fkey[120]; -u32 rkey[120]; - -static u32 pack(u8 *b) -{ /* pack bytes into a 32-bit Word */ - return ((u32)b[3]<<24)|((u32)b[2]<<16)|((u32)b[1]<<8)|(u32)b[0]; -} - -static void unpack(u32 a,u8 *b) -{ /* unpack bytes from a word */ - b[0]=(u8)a; - b[1]=(u8)(a>>8); - b[2]=(u8)(a>>16); - b[3]=(u8)(a>>24); -} - -static u8 xtime(u8 a) -{ - u8 b; - if (a&0x80) b=0x1B; - else b=0; - a<<=1; - a^=b; - return a; -} - -static u8 bmul(u8 x,u8 y) -{ /* x.y= AntiLog(Log(x) + Log(y)) */ - if (x && y) return ptab[(ltab[x]+ltab[y])%255]; - else return 0; -} - -static u32 SubByte(u32 a) -{ - u8 b[4]; - unpack(a,b); - b[0]=fbsub[b[0]]; - b[1]=fbsub[b[1]]; - b[2]=fbsub[b[2]]; - b[3]=fbsub[b[3]]; - return pack(b); -} - -static u8 product(u32 x,u32 y) -{ /* dot product of two 4-byte arrays */ - u8 xb[4],yb[4]; - unpack(x,xb); - unpack(y,yb); - return bmul(xb[0],yb[0])^bmul(xb[1],yb[1])^bmul(xb[2],yb[2])^bmul(xb[3],yb[3]); -} - -static u32 InvMixCol(u32 x) -{ /* matrix Multiplication */ - u32 y,m; - u8 b[4]; - - m=pack(InCo); - b[3]=product(m,x); - m=ROTL24(m); - b[2]=product(m,x); - m=ROTL24(m); - b[1]=product(m,x); - m=ROTL24(m); - b[0]=product(m,x); - y=pack(b); - return y; -} - -u8 ByteSub(u8 x) -{ - u8 y=ptab[255-ltab[x]]; /* multiplicative inverse */ - x=y; x=ROTL(x); - y^=x; x=ROTL(x); - y^=x; x=ROTL(x); - y^=x; x=ROTL(x); - y^=x; y^=0x63; - return y; -} - -void gentables(void) -{ /* generate tables */ - int i; - u8 y,b[4]; - - /* use 3 as primitive root to generate power and log tables */ - - ltab[0]=0; - ptab[0]=1; ltab[1]=0; - ptab[1]=3; ltab[3]=1; - for (i=2;i<256;i++) - { - ptab[i]=ptab[i-1]^xtime(ptab[i-1]); - ltab[ptab[i]]=i; - } - - /* affine transformation:- each bit is xored with itself shifted one bit */ - - fbsub[0]=0x63; - rbsub[0x63]=0; - for (i=1;i<256;i++) - { - y=ByteSub((u8)i); - fbsub[i]=y; rbsub[y]=i; - } - - for (i=0,y=1;i<30;i++) - { - rco[i]=y; - y=xtime(y); - } - - /* calculate forward and reverse tables */ - for (i=0;i<256;i++) - { - y=fbsub[i]; - b[3]=y^xtime(y); b[2]=y; - b[1]=y; b[0]=xtime(y); - ftable[i]=pack(b); - - y=rbsub[i]; - b[3]=bmul(InCo[0],y); b[2]=bmul(InCo[1],y); - b[1]=bmul(InCo[2],y); b[0]=bmul(InCo[3],y); - rtable[i]=pack(b); - } -} - -void gkey(int nb,int nk,char *key) -{ /* blocksize=32*nb bits. Key=32*nk bits */ - /* currently nb,bk = 4, 6 or 8 */ - /* key comes as 4*Nk bytes */ - /* Key Scheduler. Create expanded encryption key */ - int i,j,k,m,N; - int C1,C2,C3; - u32 CipherKey[8]; - - Nb=nb; Nk=nk; - - /* Nr is number of rounds */ - if (Nb>=Nk) Nr=6+Nb; - else Nr=6+Nk; - - C1=1; - if (Nb<8) { C2=2; C3=3; } - else { C2=3; C3=4; } - - /* pre-calculate forward and reverse increments */ - for (m=j=0;j>8)])^ - ROTL16(ftable[(u8)(x[fi[m+1]]>>16)])^ - ROTL24(ftable[x[fi[m+2]]>>24]); - } - t=x; x=y; y=t; /* swap pointers */ - } - -/* Last Round - unroll if possible */ - for (m=j=0;j>8)])^ - ROTL16((u32)fbsub[(u8)(x[fi[m+1]]>>16)])^ - ROTL24((u32)fbsub[x[fi[m+2]]>>24]); - } - for (i=j=0;i>8)])^ - ROTL16(rtable[(u8)(x[ri[m+1]]>>16)])^ - ROTL24(rtable[x[ri[m+2]]>>24]); - } - t=x; x=y; y=t; /* swap pointers */ - } - -/* Last Round - unroll if possible */ - for (m=j=0;j>8)])^ - ROTL16((u32)rbsub[(u8)(x[ri[m+1]]>>16)])^ - ROTL24((u32)rbsub[x[ri[m+2]]>>24]); - } - for (i=j=0;i -// Licensed under the terms of the GNU GPL, version 2 -// http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt - -#include "wiidisc.h" - -void aes_set_key(u8 *key); -void aes_decrypt(u8 *iv, u8 *inbuf, u8 *outbuf, unsigned long long len); - -static void _decrypt_title_key(u8 *tik, u8 *title_key) -{ - u8 common_key[16]={ - 0xeb, 0xe4, 0x2a, 0x22, 0x5e, 0x85, 0x93, 0xe4, 0x48, 0xd9, 0xc5, 0x45, - 0x73, 0x81, 0xaa, 0xf7 - };; - u8 iv[16]; - - wbfs_memset(iv, 0, sizeof iv); - wbfs_memcpy(iv, tik + 0x01dc, 8); - aes_set_key(common_key); - //_aes_cbc_dec(common_key, iv, tik + 0x01bf, 16, title_key); - aes_decrypt(iv, tik + 0x01bf,title_key,16); -} -static u32 _be32(const u8 *p) -{ - return (p[0] << 24) | (p[1] << 16) | (p[2] << 8) | p[3]; -} - -static void disc_read(wiidisc_t *d,u32 offset, u8 *data, u32 len) -{ - if(data){ - int ret=0; - if(len==0) - return ; - ret = d->read(d->fp,offset,len,data); - if(ret) - wbfs_fatal("error reading disc"); - } - if(d->sector_usage_table) - { - u32 blockno = offset>>13; - do - { - d->sector_usage_table[blockno]=1; - blockno+=1; - if(len>0x8000) - len-=0x8000; - }while(len>0x8000); - } -} - -static void partition_raw_read(wiidisc_t *d,u32 offset, u8 *data, u32 len) -{ - disc_read(d, d->partition_raw_offset + offset, data, len); -} - -static void partition_read_block(wiidisc_t *d,u32 blockno, u8 *block) -{ - u8*raw = d->tmp_buffer; - u8 iv[16]; - u32 offset; - if(d->sector_usage_table) - d->sector_usage_table[d->partition_block+blockno]=1; - offset = d->partition_data_offset + ((0x8000>>2) * blockno); - partition_raw_read(d,offset, raw, 0x8000); - - // decrypt data - memcpy(iv, raw + 0x3d0, 16); - aes_set_key(d->disc_key); - aes_decrypt(iv, raw + 0x400,block,0x7c00); -} - -static void partition_read(wiidisc_t *d,u32 offset, u8 *data, u32 len,int fake) -{ - u8 *block = d->tmp_buffer2; - u32 offset_in_block; - u32 len_in_block; - if(fake && d->sector_usage_table==0) - return; - - while(len) { - offset_in_block = offset % (0x7c00>>2); - len_in_block = 0x7c00 - (offset_in_block<<2); - if (len_in_block > len) - len_in_block = len; - if(!fake){ - partition_read_block(d,offset / (0x7c00>>2), block); - wbfs_memcpy(data, block + (offset_in_block<<2), len_in_block); - }else - d->sector_usage_table[d->partition_block+(offset/(0x7c00>>2))]=1; - data += len_in_block; - offset += len_in_block>>2; - len -= len_in_block; - } -} - - -static u32 do_fst(wiidisc_t *d,u8 *fst, const char *names, u32 i) -{ - u32 offset; - u32 size; - const char *name; - u32 j; - - name = names + (_be32(fst + 12*i) & 0x00ffffff); - size = _be32(fst + 12*i + 8); - - if (i == 0) { - for (j = 1; j < size && !d->extracted_buffer; ){ - j = do_fst(d,fst, names, j); - } - return size; - } - //printf("name %s\n",name); - - if (fst[12*i]) { - - for (j = i + 1; j < size && !d->extracted_buffer; ) - j = do_fst(d,fst, names, j); - - return size; - } else { - offset = _be32(fst + 12*i + 4); - if(d->extract_pathname && strcmp(name, d->extract_pathname)==0) - { - d->extracted_buffer = wbfs_ioalloc(size); - partition_read(d,offset, d->extracted_buffer, size,0); - }else - partition_read(d,offset, 0, size,1); - return i + 1; - } -} - -static void do_files(wiidisc_t*d) -{ - u8 *b = wbfs_ioalloc(0x480); // XXX: determine actual header size - u32 dol_offset; - u32 fst_offset; - u32 fst_size; - u32 apl_offset; - u32 apl_size; - u8 *apl_header = wbfs_ioalloc(0x20); - u8 *fst; - u32 n_files; - partition_read(d,0, b, 0x480,0); - - dol_offset = _be32(b + 0x0420); - fst_offset = _be32(b + 0x0424); - fst_size = _be32(b + 0x0428)<<2; - - apl_offset = 0x2440>>2; - partition_read(d,apl_offset, apl_header, 0x20,0); - apl_size = 0x20 + _be32(apl_header + 0x14) + _be32(apl_header + 0x18); - // fake read dol and partition - partition_read(d,apl_offset, 0, apl_size,1); - partition_read(d,dol_offset, 0, (fst_offset - dol_offset)<<2,1); - - - fst = wbfs_ioalloc(fst_size); - if (fst == 0) - wbfs_fatal("malloc fst"); - partition_read(d,fst_offset, fst, fst_size,0); - n_files = _be32(fst + 8); - - if (n_files > 1) - do_fst(d,fst, (char *)fst + 12*n_files, 0); - wbfs_iofree(b); - wbfs_iofree(apl_header); - wbfs_iofree(fst); -} - -static void do_partition(wiidisc_t*d) -{ - u8 *tik = wbfs_ioalloc(0x2a4); - u8 *b = wbfs_ioalloc(0x1c); - u64 tmd_offset; - u32 tmd_size; - u8 *tmd; - u64 cert_offset; - u32 cert_size; - u8 *cert; - u64 h3_offset; - - // read ticket, and read some offsets and sizes - partition_raw_read(d,0, tik, 0x2a4); - partition_raw_read(d,0x2a4>>2, b, 0x1c); - - tmd_size = _be32(b); - tmd_offset = _be32(b + 4); - cert_size = _be32(b + 8); - cert_offset = _be32(b + 0x0c); - h3_offset = _be32(b + 0x10); - d->partition_data_offset = _be32(b + 0x14); - d->partition_block = (d->partition_raw_offset+d->partition_data_offset)>>13; - tmd = wbfs_ioalloc(tmd_size); - if (tmd == 0) - wbfs_fatal("malloc tmd"); - partition_raw_read(d,tmd_offset, tmd, tmd_size); - - cert = wbfs_ioalloc(cert_size); - if (cert == 0) - wbfs_fatal("malloc cert"); - partition_raw_read(d,cert_offset, cert, cert_size); - - - _decrypt_title_key(tik, d->disc_key); - - partition_raw_read(d,h3_offset, 0, 0x18000); - wbfs_iofree(b); - wbfs_iofree(tik); - wbfs_iofree(cert); - wbfs_iofree(tmd); - - do_files(d); - -} -static int test_parition_skip(u32 partition_type,partition_selector_t part_sel) -{ - switch(part_sel) - { - case ALL_PARTITIONS: - return 0; - case REMOVE_UPDATE_PARTITION: - return (partition_type==1); - case ONLY_GAME_PARTITION: - return (partition_type!=0); - default: - return (partition_type!=part_sel); - } -} -static void do_disc(wiidisc_t*d) -{ - u8 *b = wbfs_ioalloc(0x100); - u64 partition_offset[32]; // XXX: don't know the real maximum - u64 partition_type[32]; // XXX: don't know the real maximum - u32 n_partitions; - u32 magic; - u32 i; - disc_read(d,0, b, 0x100); - magic=_be32(b+24); - if(magic!=0x5D1C9EA3){ - wbfs_error("not a wii disc"); - return ; - } - disc_read(d,0x40000>>2, b, 0x100); - n_partitions = _be32(b); - disc_read(d,_be32(b + 4), b, 0x100); - for (i = 0; i < n_partitions; i++){ - partition_offset[i] = _be32(b + 8 * i); - partition_type[i] = _be32(b + 8 * i+4); - } - for (i = 0; i < n_partitions; i++) { - d->partition_raw_offset = partition_offset[i]; - if(!test_parition_skip(partition_type[i],d->part_sel)) - do_partition(d); - } - wbfs_iofree(b); -} - -wiidisc_t *wd_open_disc(read_wiidisc_callback_t read,void*fp) -{ - wiidisc_t *d = wbfs_malloc(sizeof(wiidisc_t)); - if(!d) - return 0; - wbfs_memset(d,0,sizeof(wiidisc_t)); - d->read = read; - d->fp = fp; - d->part_sel = ALL_PARTITIONS; - d->tmp_buffer = wbfs_ioalloc(0x8000); - d->tmp_buffer2 = wbfs_malloc(0x8000); - - return d; -} -void wd_close_disc(wiidisc_t *d) -{ - wbfs_iofree(d->tmp_buffer); - wbfs_free(d->tmp_buffer2); - wbfs_free(d); -} -// returns a buffer allocated with wbfs_ioalloc() or NULL if not found of alloc error -// XXX pathname not implemented. files are extracted by their name. -// first file found with that name is returned. -u8 * wd_extract_file(wiidisc_t *d, partition_selector_t partition_type, char *pathname) -{ - u8 *retval = 0; - d->extract_pathname = pathname; - d->extracted_buffer = 0; - d->part_sel = partition_type; - do_disc(d); - d->extract_pathname = 0; - d->part_sel = ALL_PARTITIONS; - retval = d->extracted_buffer; - d->extracted_buffer = 0; - return retval; -} - -void wd_build_disc_usage(wiidisc_t *d, partition_selector_t selector, u8* usage_table) -{ - d->sector_usage_table = usage_table; - wbfs_memset(usage_table,0,143432*2); - d->part_sel = selector; - do_disc(d); - d->part_sel = ALL_PARTITIONS; - d->sector_usage_table = 0; -} - -void wd_fix_partition_table(wiidisc_t *d, partition_selector_t selector, u8* partition_table) -{ - u8 *b = partition_table; - u32 partition_offset; - u32 partition_type; - u32 n_partitions,i,j; - u32 *b32; - if(selector == ALL_PARTITIONS) - return; - n_partitions = _be32(b); - if(_be32(b + 4)-(0x40000>>2) >0x50) - wbfs_fatal("cannot modify this partition table. Please report the bug."); - - b += (_be32(b + 4)-(0x40000>>2))*4; - j=0; - for (i = 0; i < n_partitions; i++){ - partition_offset = _be32(b + 8 * i); - partition_type = _be32(b + 8 * i+4); - if(!test_parition_skip(partition_type,selector)) - { - b32 = (u32*)(b + 8 * j); - b32[0] = wbfs_htonl(partition_offset); - b32[1] = wbfs_htonl(partition_type); - j++; - } - } - b32 = (u32*)(partition_table); - *b32 = wbfs_htonl(j); -} - diff --git a/source/libwbfs/wiidisc.h b/source/libwbfs/wiidisc.h deleted file mode 100644 index 24a27f43..00000000 --- a/source/libwbfs/wiidisc.h +++ /dev/null @@ -1,67 +0,0 @@ -#ifndef WIIDISC_H -#define WIIDISC_H -#include -#include "libwbfs_os.h" // this file is provided by the project wanting to compile libwbfs and wiidisc - -#ifdef __cplusplus - extern "C" { -#endif /* __cplusplus */ -#if 0 //removes extra automatic indentation by editors - } -#endif -// callback definition. Return 1 on fatal error (callback is supposed to make retries until no hopes..) -// offset points 32bit words, count counts bytes -typedef int (*read_wiidisc_callback_t)(void*fp,u32 offset,u32 count,void*iobuf); - -typedef enum{ - UPDATE_PARTITION_TYPE=0, - GAME_PARTITION_TYPE, - OTHER_PARTITION_TYPE, - // value in between selects partition types of that value - ALL_PARTITIONS=0xffffffff-3, - REMOVE_UPDATE_PARTITION, // keeps game + channel installers - ONLY_GAME_PARTITION, -}partition_selector_t; - -typedef struct wiidisc_s -{ - read_wiidisc_callback_t read; - void *fp; - u8 *sector_usage_table; - - // everything points 32bit words. - u32 disc_raw_offset; - u32 partition_raw_offset; - u32 partition_data_offset; - u32 partition_data_size; - u32 partition_block; - - u8 *tmp_buffer; - u8 *tmp_buffer2; - u8 disc_key[16]; - int dont_decrypt; - - partition_selector_t part_sel; - - char *extract_pathname; - u8 *extracted_buffer; -}wiidisc_t; - -wiidisc_t *wd_open_disc(read_wiidisc_callback_t read,void*fp); -void wd_close_disc(wiidisc_t *); -// returns a buffer allocated with wbfs_ioalloc() or NULL if not found of alloc error -u8 * wd_extract_file(wiidisc_t *d, partition_selector_t partition_type, char *pathname); - -void wd_build_disc_usage(wiidisc_t *d, partition_selector_t selector, u8* usage_table); - -// effectively remove not copied partition from the partition table. -void wd_fix_partition_table(wiidisc_t *d, partition_selector_t selector, u8* partition_table); - -#if 0 -{ -#endif -#ifdef __cplusplus - } -#endif /* __cplusplus */ - -#endif diff --git a/source/libwiigui/gui.h b/source/libwiigui/gui.h deleted file mode 100644 index 7565756d..00000000 --- a/source/libwiigui/gui.h +++ /dev/null @@ -1,992 +0,0 @@ -/*!\mainpage libwiigui Documentation - * - * \section Introduction - * libwiigui is a GUI library for the Wii, created to help structure the - * design of a complicated GUI interface, and to enable an author to create - * a sophisticated, feature-rich GUI. It was originally conceived and written - * after I started to design a GUI for Snes9x GX, and found libwiisprite and - * GRRLIB inadequate for the purpose. It uses GX for drawing, and makes use - * of PNGU for displaying images and FreeTypeGX for text. It was designed to - * be flexible and is easy to modify - don't be afraid to change the way it - * works or expand it to suit your GUI's purposes! If you do, and you think - * your changes might benefit others, please share them so they might be - * added to the project! - * - * \section Quickstart - * Start from the supplied template example. For more advanced uses, see the - * source code for Snes9x GX, FCE Ultra GX, and Visual Boy Advance GX. - - * \section Contact - * If you have any suggestions for the library or documentation, or want to - * contribute, please visit the libwiigui website: - - * http://code.google.com/p/libwiigui/ - * \section Credits - * This library was wholly designed and written by Tantric. Thanks to the - * authors of PNGU and FreeTypeGX, of which this library makes use. Thanks - * also to the authors of GRRLIB and libwiisprite for laying the foundations. - * -*/ - -#ifndef LIBWIIGUI_H -#define LIBWIIGUI_H - -#include -#include -#include -#include -#include -#include -#include -#include -#include "pngu/pngu.h" -#include "FreeTypeGX.h" -#include "video.h" -#include "filelist.h" -#include "input.h" -#include "oggplayer.h" - -extern FreeTypeGX *fontSystem; - -#define SCROLL_INITIAL_DELAY 20 -#define SCROLL_LOOP_DELAY 3 -#define PAGESIZE 9 -#define MAX_OPTIONS 170 - -typedef void (*UpdateCallback)(void * e); - -enum -{ - ALIGN_LEFT, - ALIGN_RIGHT, - ALIGN_CENTRE, - ALIGN_TOP, - ALIGN_BOTTOM, - ALIGN_MIDDLE -}; -#define ALIGN_CENTER ALIGN_CENTRE -enum -{ - STATE_DEFAULT, - STATE_SELECTED, - STATE_CLICKED, - STATE_HELD, - STATE_DISABLED -}; - -enum -{ - SOUND_PCM, - SOUND_OGG -}; - -enum -{ - IMAGE_TEXTURE, - IMAGE_COLOR, - IMAGE_DATA -}; - -enum -{ - TRIGGER_SIMPLE, - TRIGGER_HELD, - TRIGGER_BUTTON_ONLY, - TRIGGER_BUTTON_ONLY_IN_FOCUS -}; - -typedef struct _paddata { - u16 btns_d; - u16 btns_u; - u16 btns_h; - s8 stickX; - s8 stickY; - s8 substickX; - s8 substickY; - u8 triggerL; - u8 triggerR; -} PADData; - -#define EFFECT_SLIDE_TOP 1 -#define EFFECT_SLIDE_BOTTOM 2 -#define EFFECT_SLIDE_RIGHT 4 -#define EFFECT_SLIDE_LEFT 8 -#define EFFECT_SLIDE_IN 16 -#define EFFECT_SLIDE_OUT 32 -#define EFFECT_FADE 64 -#define EFFECT_SCALE 128 -#define EFFECT_COLOR_TRANSITION 256 -#define EFFECT_PULSE 512 -#define EFFECT_ROCK_VERTICLE 1024 -#define EFFECT_GOROUND 2048 - -//!Sound conversion and playback. A wrapper for other sound libraries - ASND, libmad, ltremor, etc -class GuiSound -{ - public: - //!Constructor - //!\param s Pointer to the sound data - //!\param l Length of sound data - //!\param t Sound format type (SOUND_PCM or SOUND_OGG) - GuiSound(const u8 * s, int l, int t); - GuiSound(const u8 * s, int l, int t, int v); - //!Destructor - ~GuiSound(); - //!Start sound playback - void Play(); - //!Start sound playback from ogg file - int PlayOggFile(char * path); - //!Stop sound playback - void Stop(); - //!Pause sound playback - void Pause(); - //!Resume sound playback - void Resume(); - //!Checks if the sound is currently playing - //!\return true if sound is playing, false otherwise - bool IsPlaying(); - //!Set sound volume - //!\param v Sound volume (0-100) - void SetVolume(int v); - //!Set the sound to loop playback (only applies to OGG) - //!\param l Loop (true to loop) - void SetLoop(bool l); - //!Get the playing time in ms for that moment (only applies to OGG) - s32 GetPlayTime(); - //!Set the starting point or playtime for skipping (only applies to OGG) - //!\param time in ms - void SetPlayTime(s32 time); - protected: - const u8 * sound; //!< Pointer to the sound data - int type; //!< Sound format type (SOUND_PCM or SOUND_OGG) - s32 length; //!< Length of sound data - s32 voice; //!< Currently assigned ASND voice channel - s32 volume; //!< Sound volume (0-100) - bool loop; //!< Loop sound playback -}; - -//!Menu input trigger management. Determine if action is neccessary based on input data by comparing controller input data to a specific trigger element. -class GuiTrigger -{ - public: - //!Constructor - GuiTrigger(); - //!Destructor - ~GuiTrigger(); - //!Sets a simple trigger. Requires: element is selected, and trigger button is pressed - //!\param ch Controller channel number - //!\param wiibtns Wii controller trigger button(s) - classic controller buttons are considered separately - //!\param gcbtns GameCube controller trigger button(s) - void SetSimpleTrigger(s32 ch, u32 wiibtns, u16 gcbtns); - //!Sets a held trigger. Requires: element is selected, and trigger button is pressed - //!\param ch Controller channel number - //!\param wiibtns Wii controller trigger button(s) - classic controller buttons are considered separately - //!\param gcbtns GameCube controller trigger button(s) - void SetHeldTrigger(s32 ch, u32 wiibtns, u16 gcbtns); - //!Sets a button-only trigger. Requires: Trigger button is pressed - //!\param ch Controller channel number - //!\param wiibtns Wii controller trigger button(s) - classic controller buttons are considered separately - //!\param gcbtns GameCube controller trigger button(s) - void SetButtonOnlyTrigger(s32 ch, u32 wiibtns, u16 gcbtns); - //!Sets a button-only trigger. Requires: trigger button is pressed and parent window of element is in focus - //!\param ch Controller channel number - //!\param wiibtns Wii controller trigger button(s) - classic controller buttons are considered separately - //!\param gcbtns GameCube controller trigger button(s) - void SetButtonOnlyInFocusTrigger(s32 ch, u32 wiibtns, u16 gcbtns); - //!Get X/Y value from Wii Joystick (classic, nunchuk) input - //!\param right Controller stick (left = 0, right = 1) - //!\param axis Controller stick axis (x-axis = 0, y-axis = 1) - //!\return Stick value - s8 WPAD_Stick(u8 right, int axis); - //!Move menu selection left (via pad/joystick). Allows scroll delay and button overriding - //!\return true if selection should be moved left, false otherwise - bool Left(); - //!Move menu selection right (via pad/joystick). Allows scroll delay and button overriding - //!\return true if selection should be moved right, false otherwise - bool Right(); - //!Move menu selection up (via pad/joystick). Allows scroll delay and button overriding - //!\return true if selection should be moved up, false otherwise - bool Up(); - //!Move menu selection down (via pad/joystick). Allows scroll delay and button overriding - //!\return true if selection should be moved down, false otherwise - bool Down(); - - u8 type; //!< trigger type (TRIGGER_SIMPLE, TRIGGER_HELD, TRIGGER_BUTTON_ONLY, TRIGGER_BUTTON_ONLY_IN_FOCUS) - s32 chan; //!< Trigger controller channel (0-3, -1 for all) - WPADData wpad; //!< Wii controller trigger data - PADData pad; //!< GameCube controller trigger data -}; - -extern GuiTrigger userInput[4]; - -//!Primary GUI class. Most other classes inherit from this class. -class GuiElement -{ - public: - //!Constructor - GuiElement(); - //!Destructor - ~GuiElement(); - //!Set the element's parent - //!\param e Pointer to parent element - void SetParent(GuiElement * e); - //!Gets the current leftmost coordinate of the element - //!Considers horizontal alignment, x offset, width, and parent element's GetLeft() / GetWidth() values - //!\return left coordinate - int GetLeft(); - //!Gets the current topmost coordinate of the element - //!Considers vertical alignment, y offset, height, and parent element's GetTop() / GetHeight() values - //!\return top coordinate - int GetTop(); - //!Sets the minimum y offset of the element - //!\param y Y offset - void SetMinY(int y); - //!Gets the minimum y offset of the element - //!\return Minimum Y offset - int GetMinY(); - //!Sets the maximum y offset of the element - //!\param y Y offset - void SetMaxY(int y); - //!Gets the maximum y offset of the element - //!\return Maximum Y offset - int GetMaxY(); - //!Sets the minimum x offset of the element - //!\param x X offset - void SetMinX(int x); - //!Gets the minimum x offset of the element - //!\return Minimum X offset - int GetMinX(); - //!Sets the maximum x offset of the element - //!\param x X offset - void SetMaxX(int x); - //!Gets the maximum x offset of the element - //!\return Maximum X offset - int GetMaxX(); - //!Gets the current width of the element. Does not currently consider the scale - //!\return width - int GetWidth(); - //!Gets the height of the element. Does not currently consider the scale - //!\return height - int GetHeight(); - //!Sets the size (width/height) of the element - //!\param w Width of element - //!\param h Height of element - void SetSize(int w, int h); - //!Checks whether or not the element is visible - //!\return true if visible, false otherwise - bool IsVisible(); - //!Checks whether or not the element is selectable - //!\return true if selectable, false otherwise - bool IsSelectable(); - //!Checks whether or not the element is clickable - //!\return true if clickable, false otherwise - bool IsClickable(); - //!Checks whether or not the element is holdable - //!\return true if holdable, false otherwise - bool IsHoldable(); - //!Sets whether or not the element is selectable - //!\param s Selectable - void SetSelectable(bool s); - //!Sets whether or not the element is clickable - //!\param c Clickable - void SetClickable(bool c); - //!Sets whether or not the element is holdable - //!\param c Holdable - void SetHoldable(bool d); - //!Gets the element's current state - //!\return state - int GetState(); - //!Gets the controller channel that last changed the element's state - //!\return Channel number (0-3, -1 = no channel) - int GetStateChan(); - //!Sets the element's alpha value - //!\param a alpha value - void SetAlpha(int a); - //!Gets the element's alpha value - //!Considers alpha, alphaDyn, and the parent element's GetAlpha() value - //!\return alpha - int GetAlpha(); - //!Gets the element's AngleDyn value - //!\return alpha - float GetAngleDyn(); - //!Sets the element's scale - //!\param s scale (1 is 100%) - void SetScale(float s); - //!Gets the element's current scale - //!Considers scale, scaleDyn, and the parent element's GetScale() value - virtual float GetScale(); - //!Set a new GuiTrigger for the element - //!\param t Pointer to GuiTrigger - void SetTrigger(GuiTrigger * t); - //!\overload - //!\param i Index of trigger array to set - //!\param t Pointer to GuiTrigger - void SetTrigger(u8 i, GuiTrigger * t); - //!Remove GuiTrigger for the element - //!\param i Index of trigger array to set - void RemoveTrigger(u8 i); - //!Checks whether rumble was requested by the element - //!\return true is rumble was requested, false otherwise - bool Rumble(); - //!Sets whether or not the element is requesting a rumble event - //!\param r true if requesting rumble, false if not - void SetRumble(bool r); - //!Set an effect for the element - //!\param e Effect to enable - //!\param a Amount of the effect (usage varies on effect) - //!\param t Target amount of the effect (usage varies on effect) - void SetEffect(int e, int a, int t=0); - //!This SetEffect is for EFFECT_GOROUND only - //!\param e Effect to enable - //!\param speed is for Circlespeed - //!\param circles Circleamount in degree ike 180 for 1/2 circle or 720 for 2 circles - //!\param r Circle Radius in pixel - //!\param startdegree Degree where to start circling - //!\param anglespeedset Set the speed of Angle rotating make 1 for same speed as Circlespeed - //! or 0.5 for half the speed of the circlingspeed. Turn Anglecircling off by 0 to this param. - //!\param center_x x co-ordinate of the center of circle. - //!\param center_y y co-ordinate of the center of circle. - void SetEffect(int e, int speed, f32 circles, int r, f32 startdegree, f32 anglespeedset, int center_x, int center_y); - //!Gets the frequency from the above effect - //!\return element frequency - float GetFrequency(); - //!Sets an effect to be enabled on wiimote cursor over - //!\param e Effect to enable - //!\param a Amount of the effect (usage varies on effect) - //!\param t Target amount of the effect (usage varies on effect) - void SetEffectOnOver(int e, int a, int t=0); - //!Shortcut to SetEffectOnOver(EFFECT_SCALE, 4, 110) - void SetEffectGrow(); - //!Stops the current element effect - void StopEffect(); - //!Gets the current element effects - //!\return element effects - int GetEffect(); - //!Gets the current element on over effects - //!\return element on over effects - int GetEffectOnOver(); - //!Checks whether the specified coordinates are within the element's boundaries - //!\param x X coordinate - //!\param y Y coordinate - //!\return true if contained within, false otherwise - bool IsInside(int x, int y); - //!Sets the element's position - //!\param x X coordinate - //!\param y Y coordinate - void SetPosition(int x, int y); - //!Updates the element's effects (dynamic values) - //!Called by Draw(), used for animation purposes - void UpdateEffects(); - //!Sets a function to called after after Update() - //!Callback function can be used to response to changes in the state of the element, and/or update the element's attributes - void SetUpdateCallback(UpdateCallback u); - //!Checks whether the element is in focus - //!\return true if element is in focus, false otherwise - int IsFocused(); - //!Sets the element's visibility - //!\param v Visibility (true = visible) - virtual void SetVisible(bool v); - //!Sets the element's focus - //!\param f Focus (true = in focus) - virtual void SetFocus(int f); - //!Sets the element's state - //!\param s State (STATE_DEFAULT, STATE_SELECTED, STATE_CLICKED, STATE_DISABLED) - //!\param c Controller channel (0-3, -1 = none) - virtual void SetState(int s, int c = -1); - //!Resets the element's state to STATE_DEFAULT - virtual void ResetState(); - //!Gets whether or not the element is in STATE_SELECTED - //!\return true if selected, false otherwise - virtual int GetSelected(); - //!Sets the element's alignment respective to its parent element - //!\param hor Horizontal alignment (ALIGN_LEFT, ALIGN_RIGHT, ALIGN_CENTRE) - //!\param vert Vertical alignment (ALIGN_TOP, ALIGN_BOTTOM, ALIGN_MIDDLE) - virtual void SetAlignment(int hor, int vert); - //!Called constantly to allow the element to respond to the current input data - //!\param t Pointer to a GuiTrigger, containing the current input data from PAD/WPAD - virtual void Update(GuiTrigger * t); - //!Called constantly to redraw the element - virtual void Draw(); - virtual void DrawTooltip(); - protected: - void Lock(); - void Unlock(); - static mutex_t mutex; - friend class SimpleLock; - - //int position2; //! B Scrollbariable - bool visible; //!< Visibility of the element. If false, Draw() is skipped - int focus; //!< Element focus (-1 = focus disabled, 0 = not focused, 1 = focused) - int dontsetfocus; //! _elements; //!< Contains all elements within the GuiWindow -}; - -//!Converts image data into GX-useable RGBA8. Currently designed for use only with PNG files -class GuiImageData -{ - public: - //!Constructor - //!Converts the image data to RGBA8 - expects PNG format - //!\param i Image data - GuiImageData(const u8 * i); - GuiImageData(const char * imgPath, const u8 * buffer); - //!Destructor - ~GuiImageData(); - //!Gets a pointer to the image data - //!\return pointer to image data - u8 * GetImage(); - //!Gets the image width - //!\return image width - int GetWidth(); - //!Gets the image height - //!\return image height - int GetHeight(); - protected: - u8 * data; //!< Image data - int height; //!< Height of image - int width; //!< Width of image -}; - -//!Display, manage, and manipulate images in the GUI -class GuiImage : public GuiElement -{ - public: - //!Constructor - GuiImage(); - //!\overload - //!\param img Pointer to GuiImageData element - GuiImage(GuiImageData * img); - //!\overload - //!Sets up a new image from the image data specified - //!\param img - //!\param w Image width - //!\param h Image height - GuiImage(u8 * img, int w, int h); - //!\overload - //!Creates an image filled with the specified color - //!\param w Image width - //!\param h Image height - //!\param c Image color - GuiImage(int w, int h, GXColor c); - //!Destructor - ~GuiImage(); - //!Sets the image rotation angle for drawing - //!\param a Angle (in degrees) - void SetAngle(float a); - //!Gets the image rotation angle for drawing - float GetAngle(); - //!Sets the number of times to draw the image horizontally - //!\param t Number of times to draw the image - void SetTile(int t); - // true set horizontal scale to 0.8 //added - void SetWidescreen(bool w); - //!Constantly called to draw the image - void Draw(); - //!Gets the image data - //!\return pointer to image data - u8 * GetImage(); - //!Sets up a new image using the GuiImageData object specified - //!\param img Pointer to GuiImageData object - void SetImage(GuiImageData * img); - //!\overload - //!\param img Pointer to image data - //!\param w Width - //!\param h Height - void SetImage(u8 * img, int w, int h); - //!Gets the pixel color at the specified coordinates of the image - //!\param x X coordinate - //!\param y Y coordinate - GXColor GetPixel(int x, int y); - //!Sets the pixel color at the specified coordinates of the image - //!\param x X coordinate - //!\param y Y coordinate - //!\param color Pixel color - void SetPixel(int x, int y, GXColor color); - //!Directly modifies the image data to create a color-striped effect - //!Alters the RGB values by the specified amount - //!\param s Amount to increment/decrement the RGB values in the image - void ColorStripe(int s); - //!Sets a stripe effect on the image, overlaying alpha blended rectangles - //!Does not alter the image data - //!\param s Alpha amount to draw over the image - void SetStripe(int s); - s32 z; - protected: - int imgType; //!< Type of image data (IMAGE_TEXTURE, IMAGE_COLOR, IMAGE_DATA) - u8 * image; //!< Poiner to image data. May be shared with GuiImageData data - f32 imageangle; //!< Angle to draw the image - int tile; //!< Number of times to draw (tile) the image horizontally - int stripe; //!< Alpha value (0-255) to apply a stripe effect to the texture - short widescreen; //added -}; - -//!Display, manage, and manipulate text in the GUI -class GuiText : public GuiElement -{ - public: - //!Constructor - //!\param t Text - //!\param s Font size - //!\param c Font color - GuiText(const char * t, int s, GXColor c); - //!\overload - //!\Assumes SetPresets() has been called to setup preferred text attributes - //!\param t Text - GuiText(const char * t); - //!Destructor - ~GuiText(); - //!Sets the text of the GuiText element - //!\param t Text - void SetText(const char * t); - void SetTextf(const char *format, ...) __attribute__((format(printf,2,3))); - //!Sets up preset values to be used by GuiText(t) - //!Useful when printing multiple text elements, all with the same attributes set - //!\param sz Font size - //!\param c Font color - //!\param w Maximum width of texture image (for text wrapping) - //!\param wrap Wrapmode when w>0 - //!\param s Font style - //!\param h Text alignment (horizontal) - //!\param v Text alignment (vertical) - static void SetPresets(int sz, GXColor c, int w, int wrap, u16 s, int h, int v); - //!Sets the font size - //!\param s Font size - void SetFontSize(int s); - //!Sets the maximum width of the drawn texture image - //!If the text exceeds this, it is wrapped to the next line - //!\param w Maximum width - //!\param m WrapMode - enum { - WRAP, - DOTTED, - SCROLL, - MARQUEE - }; - void SetMaxWidth(int w, short m=GuiText::WRAP); - //!Sets the font color - //!\param c Font color - void SetColor(GXColor c); - //!Sets the FreeTypeGX style attributes - //!\param s Style attributes - //!\param m Style-Mask attributes - void SetStyle(u16 s, u16 m=0xffff); - //!Sets the text alignment - //!\param hor Horizontal alignment (ALIGN_LEFT, ALIGN_RIGHT, ALIGN_CENTRE) - //!\param vert Vertical alignment (ALIGN_TOP, ALIGN_BOTTOM, ALIGN_MIDDLE) - void SetAlignment(int hor, int vert); - //!Sets the font - //!\param f Font - void SetFont(FreeTypeGX *f); - //!Get the Horizontal Size of Text - int GetTextWidth(); - // not NULL set horizontal scale to 0.75 //added - void SetWidescreen(bool w); - //!Constantly called to draw the text - void Draw(); - protected: - wchar_t* text; //!< Unicode text value - int size; //!< Font size - int maxWidth; //!< Maximum width of the generated text object (for text wrapping) - short wrapMode; - short scrollPos1; - short scrollPos2; - short scrollOffset; - u32 scrollDelay; - u16 style; //!< FreeTypeGX style attributes - GXColor color; //!< Font color - FreeTypeGX *font; - short widescreen; //added -}; - -//!Display, manage, and manipulate tooltips in the GUI. -class GuiTooltip : public GuiElement -{ - public: - //!Constructor - //!\param t Text - GuiTooltip(const char *t); - - //!Destructor - ~ GuiTooltip(); - - //!Gets the element's current scale - //!Considers scale, scaleDyn, and the parent element's GetScale() value - float GetScale(); - //!Sets the text of the GuiTooltip element - //!\param t Text - void SetText(const char * t); - void SetWidescreen(bool w); // timely a dummy - //!Constantly called to draw the GuiButton - void Draw(); - - protected: - GuiImage leftImage; //!< Tooltip left-image - GuiImage tileImage; //!< Tooltip tile-image - GuiImage rightImage; //!< Tooltip right-image - GuiText *text; -}; - - -//!Display, manage, and manipulate buttons in the GUI. Buttons can have images, icons, text, and sound set (all of which are optional) -class GuiButton : public GuiElement -{ - public: - //!Constructor - //!\param w Width - //!\param h Height - GuiButton(int w, int h); - //!\param img is the button GuiImage. it uses the height & width of this image for the button - //!\param imgOver is the button's over GuiImage - //!\param hor is horizontal alingment of the button - //!\param vert is verticle alignment of the button - //!\param x is xposition of the button - //!\param y is yposition of the button - //!\param trig is a GuiTrigger to assign to this button - //!\param sndOver is a GuiSound used for soundOnOver for this button - //!\param sndClick is a GuiSound used for clickSound of this button - //!\param grow sets effect grow for this button. 1 for yes ;0 for no - GuiButton(GuiImage* img, GuiImage* imgOver, int hor, int vert, int x, int y, GuiTrigger* trig, GuiSound* sndOver, GuiSound* sndClick, u8 grow); - //!\param same as all the parameters for the above button plus the following - //!\param tt is a GuiTooltip assigned to this button - //!\param ttx and tty are the xPOS and yPOS for this tooltip in relationship to the button - //!\param h_align and v_align are horizontal and verticle alignment for the tooltip in relationship to the button - GuiButton(GuiImage* img, GuiImage* imgOver, int hor, int vert, int x, int y, GuiTrigger* trig, GuiSound* sndOver, GuiSound* sndClick, u8 grow, GuiTooltip* tt, int ttx, int tty, int h_align, int v_align); - //!Destructor - ~GuiButton(); - //!Sets the button's image - //!\param i Pointer to GuiImage object - void SetImage(GuiImage* i); - //!Sets the button's image on over - //!\param i Pointer to GuiImage object - void SetImageOver(GuiImage* i); - //!Sets the button's image on hold - //!\param i Pointer to GuiImage object - void SetAngle(float a); - void SetImageHold(GuiImage* i); - //!Sets the button's image on click - //!\param i Pointer to GuiImage object - void SetImageClick(GuiImage* i); - //!Sets the button's icon - //!\param i Pointer to GuiImage object - void SetIcon(GuiImage* i); - //!Sets the button's icon on over - //!\param i Pointer to GuiImage object - void SetIconOver(GuiImage* i); - //!Sets the button's icon on hold - //!\param i Pointer to GuiImage object - void SetIconHold(GuiImage* i); - //!Sets the button's icon on click - //!\param i Pointer to GuiImage object - void SetIconClick(GuiImage* i); - //!Sets the button's label - //!\param t Pointer to GuiText object - //!\param n Index of label to set (optional, default is 0) - void SetLabel(GuiText* t, int n = 0); - //!Sets the button's label on over (eg: different colored text) - //!\param t Pointer to GuiText object - //!\param n Index of label to set (optional, default is 0) - void SetLabelOver(GuiText* t, int n = 0); - //!Sets the button's label on hold - //!\param t Pointer to GuiText object - //!\param n Index of label to set (optional, default is 0) - void SetLabelHold(GuiText* t, int n = 0); - //!Sets the button's label on click - //!\param t Pointer to GuiText object - //!\param n Index of label to set (optional, default is 0) - void SetLabelClick(GuiText* t, int n = 0); - //!Sets the sound to play on over - //!\param s Pointer to GuiSound object - void SetSoundOver(GuiSound * s); - //!Sets the sound to play on hold - //!\param s Pointer to GuiSound object - void SetSoundHold(GuiSound * s); - //!Sets the sound to play on click - //!\param s Pointer to GuiSound object - void SetSoundClick(GuiSound * s); - //!\param reset the soundover to NULL - void RemoveSoundOver(); - //!Constantly called to draw the GuiButtons ToolTip - //!Sets the button's Tooltip on over - //!\param tt Pointer to GuiElement object, x & y Positioning, h & v Align - void SetToolTip(GuiElement* tt, int x, int y, int h=ALIGN_RIGHT, int v=ALIGN_TOP); - //!Constantly called to draw the GuiButton - void Draw(); - void DrawTooltip(); - //!Constantly called to allow the GuiButton to respond to updated input data - //!\param t Pointer to a GuiTrigger, containing the current input data from PAD/WPAD - void Update(GuiTrigger * t); - //!Deactivate/Activate pointing on Games while B scrolling - void ScrollIsOn(int f); - protected: - GuiImage * image; //!< Button image (default) - GuiImage * imageOver; //!< Button image for STATE_SELECTED - GuiImage * imageHold; //!< Button image for STATE_HELD - GuiImage * imageClick; //!< Button image for STATE_CLICKED - GuiImage * icon; //!< Button icon (drawn after button image) - GuiImage * iconOver; //!< Button icon for STATE_SELECTED - GuiImage * iconHold; //!< Button icon for STATE_HELD - GuiImage * iconClick; //!< Button icon for STATE_CLICKED - GuiElement *toolTip; - time_t time1, time2;//!< Tooltip timeconstants - GuiText * label[3]; //!< Label(s) to display (default) - GuiText * labelOver[3]; //!< Label(s) to display for STATE_SELECTED - GuiText * labelHold[3]; //!< Label(s) to display for STATE_HELD - GuiText * labelClick[3]; //!< Label(s) to display for STATE_CLICKED - GuiSound * soundOver; //!< Sound to play for STATE_SELECTED - GuiSound * soundHold; //!< Sound to play for STATE_HELD - GuiSound * soundClick; //!< Sound to play for STATE_CLICKED -}; - -typedef struct _keytype { - char ch, chShift, chalt, chalt2; -} Key; - -//!On-screen keyboard -class GuiKeyboard : public GuiWindow -{ - public: - GuiKeyboard(char * t, u32 m, int min, int lang); - ~GuiKeyboard(); - void Update(GuiTrigger * t); - char kbtextstr[256]; - protected: - u32 kbtextmaxlen; - Key keys[4][11]; - int shift; - int caps; - int alt; - int alt2; - GuiText * kbText; - GuiImage * keyTextboxImg; - GuiText * keyCapsText; - GuiImage * keyCapsImg; - GuiImage * keyCapsOverImg; - GuiButton * keyCaps; - GuiText * keyAltText; - GuiImage * keyAltImg; - GuiImage * keyAltOverImg; - GuiButton * keyAlt; - GuiText * keyAlt2Text; - GuiImage * keyAlt2Img; - GuiImage * keyAlt2OverImg; - GuiButton * keyAlt2; - GuiText * keyShiftText; - GuiImage * keyShiftImg; - GuiImage * keyShiftOverImg; - GuiButton * keyShift; - GuiText * keyBackText; - GuiImage * keyBackImg; - GuiImage * keyBackOverImg; - GuiButton * keyBack; - GuiText * keyClearText; - GuiImage * keyClearImg; - GuiImage * keyClearOverImg; - GuiButton * keyClear; - GuiImage * keySpaceImg; - GuiImage * keySpaceOverImg; - GuiButton * keySpace; - GuiButton * keyBtn[4][11]; - GuiImage * keyImg[4][11]; - GuiImage * keyImgOver[4][11]; - GuiText * keyTxt[4][11]; - GuiImageData * keyTextbox; - GuiImageData * key; - GuiImageData * keyOver; - GuiImageData * keyMedium; - GuiImageData * keyMediumOver; - GuiImageData * keyLarge; - GuiImageData * keyLargeOver; - GuiSound * keySoundOver; - GuiSound * keySoundClick; - GuiTrigger * trigA; - GuiTrigger * trigB; -}; - -typedef struct _optionlist { - int length; - char name[MAX_OPTIONS][60]; - char value[MAX_OPTIONS][30]; -} OptionList; - -//!Display a list of menu options -class GuiOptionBrowser : public GuiElement -{ - public: - GuiOptionBrowser(int w, int h, OptionList * l, const u8 *imagebg, int scrollbar); - GuiOptionBrowser(int w, int h, OptionList * l, const char * themePath, const u8 *imagebg, int scrollbar, int start); - ~GuiOptionBrowser(); - void SetCol2Position(int x); - int FindMenuItem(int c, int d); - int GetClickedOption(); - int GetSelectedOption(); - void ResetState(); - void SetFocus(int f); - void Draw(); - void Update(GuiTrigger * t); - GuiText * optionVal[PAGESIZE]; - protected: - int selectedItem; - int listOffset; - - OptionList * options; - int optionIndex[PAGESIZE]; - GuiButton * optionBtn[PAGESIZE]; - GuiText * optionTxt[PAGESIZE]; - GuiImage * optionBg[PAGESIZE]; - - GuiButton * arrowUpBtn; - GuiButton * arrowDownBtn; - GuiButton * scrollbarBoxBtn; - - GuiImage * bgOptionsImg; - GuiImage * bgOptionsOverImg; - GuiImage * scrollbarImg; - GuiImage * arrowDownImg; - GuiImage * arrowDownOverImg; - GuiImage * arrowUpImg; - GuiImage * arrowUpOverImg; - GuiImage * scrollbarBoxImg; - GuiImage * scrollbarBoxOverImg; - - GuiImageData * bgOptions; - GuiImageData * bgOptionsOver; - GuiImageData * bgOptionsEntry; - GuiImageData * scrollbar; - GuiImageData * arrowDown; - GuiImageData * arrowDownOver; - GuiImageData * arrowUp; - GuiImageData * arrowUpOver; - GuiImageData * scrollbarBox; - GuiImageData * scrollbarBoxOver; - - GuiSound * btnSoundOver; - GuiSound * btnSoundClick; - GuiTrigger * trigA; - GuiTrigger * trigB; - GuiTrigger * trigHeldA; -}; -#endif diff --git a/source/libwiigui/gui_button.cpp b/source/libwiigui/gui_button.cpp deleted file mode 100644 index c2520de6..00000000 --- a/source/libwiigui/gui_button.cpp +++ /dev/null @@ -1,485 +0,0 @@ -/**************************************************************************** - * libwiigui - * - * Tantric 2009 - * - * gui_button.cpp - * - * GUI class definitions - ***************************************************************************/ - -#include "gui.h" - -static int scrollison; - -/** - * Constructor for the GuiButton class. - */ - -GuiButton::GuiButton(int w, int h) -{ - width = w; - height = h; - image = NULL; - imageOver = NULL; - imageHold = NULL; - imageClick = NULL; - icon = NULL; - iconOver = NULL; - iconHold = NULL; - iconClick = NULL; - toolTip = NULL; - - for(int i=0; i < 3; i++) - { - label[i] = NULL; - labelOver[i] = NULL; - labelHold[i] = NULL; - labelClick[i] = NULL; - } - - soundOver = NULL; - soundHold = NULL; - soundClick = NULL; - selectable = true; - holdable = false; - clickable = true; -} - -GuiButton::GuiButton(GuiImage* img, GuiImage* imgOver, int hor, int vert, int x, int y, GuiTrigger* trig, GuiSound* sndOver, GuiSound* sndClick, u8 grow) -{ - width = img->GetWidth(); - height = img->GetHeight(); - image = img; - image->SetParent(this); - imageOver = imgOver; - imageOver->SetParent(this); - imageHold = NULL; - imageClick = NULL; - icon = NULL; - iconOver = NULL; - iconHold = NULL; - iconClick = NULL; - toolTip = NULL; - alignmentHor = hor; - alignmentVert = vert; - xoffset = x; - yoffset = y; - trigger[0] = trig; - - //SetAlignment(h_align, v_align); - //SetPosition(x,y); - - - - for(int i=0; i < 3; i++) - { - label[i] = NULL; - labelOver[i] = NULL; - labelHold[i] = NULL; - labelClick[i] = NULL; - } - - soundOver = sndOver; - soundHold = NULL; - soundClick = sndClick; - selectable = true; - holdable = false; - clickable = true; - - if (grow==1){ - effectsOver |= EFFECT_SCALE; - effectAmountOver = 4; - effectTargetOver = 110; - } -} - -GuiButton::GuiButton(GuiImage* img, GuiImage* imgOver, int hor, int vert, int x, int y, GuiTrigger* trig, GuiSound* sndOver, GuiSound* sndClick, u8 grow, GuiTooltip* tt, int ttx, int tty, int h_align, int v_align) -{ - width = img->GetWidth(); - height = img->GetHeight(); - image = img; - image->SetParent(this); - imageOver = imgOver; - imageOver->SetParent(this); - imageHold = NULL; - imageClick = NULL; - icon = NULL; - iconOver = NULL; - iconHold = NULL; - iconClick = NULL; - toolTip = NULL; - alignmentHor = hor; - alignmentVert = vert; - xoffset = x; - yoffset = y; - trigger[0] = trig; - - //SetAlignment(h_align, v_align); - //SetPosition(x,y); - - - - for(int i=0; i < 3; i++) - { - label[i] = NULL; - labelOver[i] = NULL; - labelHold[i] = NULL; - labelClick[i] = NULL; - } - - soundOver = sndOver; - soundHold = NULL; - soundClick = sndClick; - selectable = true; - holdable = false; - clickable = true; - - if (grow==1){ - effectsOver |= EFFECT_SCALE; - effectAmountOver = 4; - effectTargetOver = 110; - } - - toolTip = tt; - toolTip->SetParent(this); - toolTip->SetAlignment(h_align, v_align); - toolTip->SetPosition(ttx,tty); -} - -/** - * Destructor for the GuiButton class. - */ -GuiButton::~GuiButton() -{ -} - -void GuiButton::SetImage(GuiImage* img) -{ - LOCK(this); - image = img; - if(img) img->SetParent(this); -} -void GuiButton::SetImageOver(GuiImage* img) -{ - LOCK(this); - imageOver = img; - if(img) img->SetParent(this); -} -void GuiButton::SetImageHold(GuiImage* img) -{ - LOCK(this); - imageHold = img; - if(img) img->SetParent(this); -} -void GuiButton::SetImageClick(GuiImage* img) -{ - LOCK(this); - imageClick = img; - if(img) img->SetParent(this); -} -void GuiButton::SetIcon(GuiImage* img) -{ - LOCK(this); - icon = img; - if(img) img->SetParent(this); -} -void GuiButton::SetIconOver(GuiImage* img) -{ - LOCK(this); - iconOver = img; - if(img) img->SetParent(this); -} -void GuiButton::SetIconHold(GuiImage* img) -{ - LOCK(this); - iconHold = img; - if(img) img->SetParent(this); -} -void GuiButton::SetIconClick(GuiImage* img) -{ - LOCK(this); - iconClick = img; - if(img) img->SetParent(this); -} -void GuiButton::SetLabel(GuiText* txt, int n) -{ - LOCK(this); - label[n] = txt; - if(txt) txt->SetParent(this); -} -void GuiButton::SetLabelOver(GuiText* txt, int n) -{ - LOCK(this); - labelOver[n] = txt; - if(txt) txt->SetParent(this); -} -void GuiButton::SetLabelHold(GuiText* txt, int n) -{ - LOCK(this); - labelHold[n] = txt; - if(txt) txt->SetParent(this); -} -void GuiButton::SetLabelClick(GuiText* txt, int n) -{ - LOCK(this); - labelClick[n] = txt; - if(txt) txt->SetParent(this); -} -void GuiButton::SetSoundOver(GuiSound * snd) -{ - LOCK(this); - soundOver = snd; -} -void GuiButton::SetSoundHold(GuiSound * snd) -{ - LOCK(this); - soundHold = snd; -} -void GuiButton::SetSoundClick(GuiSound * snd) -{ - LOCK(this); - soundClick = snd; -} - -void GuiButton::SetToolTip(GuiElement* tt, int x, int y, int h_align, int v_align) -{ - LOCK(this); - if(tt) - { - toolTip = tt; - toolTip->SetParent(this); - toolTip->SetAlignment(h_align, v_align); - toolTip->SetPosition(x,y); - - } -} - -void GuiButton::RemoveSoundOver() -{ - LOCK(this); - soundOver = NULL; -} -/** - * Draw the button on screen - */ -void GuiButton::Draw() -{ - LOCK(this); - if(!this->IsVisible()) - return; - - // draw image - if((state == STATE_SELECTED || state == STATE_HELD) && imageOver) - imageOver->Draw(); - else if(image) - image->Draw(); - // draw icon - if((state == STATE_SELECTED || state == STATE_HELD) && iconOver) - iconOver->Draw(); - else if(icon) - icon->Draw(); - // draw text - for(int i=0; i<3; i++) - { - if((state == STATE_SELECTED || state == STATE_HELD) && labelOver[i]) - labelOver[i]->Draw(); - else if(label[i]) - label[i]->Draw(); - } - - this->UpdateEffects(); -} -void GuiButton::DrawTooltip() -{ - LOCK(this); - if(state == STATE_SELECTED && toolTip) - { - if (time2 == 0) - { - time(&time1); - time2 = time1; - } - if(time1 != 0) // timer luft - time(&time1); - - if(time1 == 0 || difftime(time1, time2) >= 2) - { - if(time1 != 0) // timer gerade abgelaufen - toolTip->SetEffect(EFFECT_FADE, 20); - time1 = 0; - toolTip->Draw(); - return; - } - } - else - { - if(time2 != 0 && time1 == 0) // timer abgelaufen, gerade DESELECT - if(toolTip) toolTip->SetEffect(EFFECT_FADE, -20); - time2 = 0; - } - if(toolTip && toolTip->GetEffect()) - toolTip->Draw(); -} -void GuiButton::ScrollIsOn(int f) -{ - LOCK(this); - scrollison = f; -} - -void GuiButton::Update(GuiTrigger * t) -{ - LOCK(this); - if(state == STATE_CLICKED || state == STATE_DISABLED || !t) - return; - else if(parentElement && parentElement->GetState() == STATE_DISABLED) - return; - - #ifdef HW_RVL - // cursor - if(t->wpad.ir.valid) - { - if(this->IsInside(t->wpad.ir.x, t->wpad.ir.y)) - { - if(state == STATE_DEFAULT) // we weren't on the button before! - { - if(scrollison == 0) { - this->SetState(STATE_SELECTED, t->chan); - } - - if(this->Rumble() && scrollison == 0) - rumbleRequest[t->chan] = 1; - - if(soundOver && scrollison == 0) - soundOver->Play(); - - if(effectsOver && !effects && scrollison == 0) - { - // initiate effects - effects = effectsOver; - effectAmount = effectAmountOver; - effectTarget = effectTargetOver; - } - } - } - else - { - if(state == STATE_SELECTED && (stateChan == t->chan || stateChan == -1)) - this->ResetState(); - - if(effectTarget == effectTargetOver && effectAmount == effectAmountOver) - { - // initiate effects (in reverse) - effects = effectsOver; - effectAmount = -effectAmountOver; - effectTarget = 100; - } - } - } - #endif - - // button triggers - if(this->IsClickable() && scrollison == 0) - { - s32 wm_btns, wm_btns_trig, cc_btns, cc_btns_trig; - for(int i=0; i<6; i++) - { - if(trigger[i] && (trigger[i]->chan == -1 || trigger[i]->chan == t->chan)) - { - // higher 16 bits only (wiimote) - wm_btns = t->wpad.btns_d << 16; - wm_btns_trig = trigger[i]->wpad.btns_d << 16; - - // lower 16 bits only (classic controller) - cc_btns = t->wpad.btns_d >> 16; - cc_btns_trig = trigger[i]->wpad.btns_d >> 16; - - if( - (t->wpad.btns_d > 0 && - wm_btns == wm_btns_trig || - (cc_btns == cc_btns_trig && t->wpad.exp.type == EXP_CLASSIC)) || - (t->pad.btns_d == trigger[i]->pad.btns_d && t->pad.btns_d > 0)) - { - if(t->chan == stateChan || stateChan == -1) - { - if(state == STATE_SELECTED) - { - this->SetState(STATE_CLICKED, t->chan); - - if(soundClick) - soundClick->Play(); - } - else if(trigger[i]->type == TRIGGER_BUTTON_ONLY) - { - this->SetState(STATE_CLICKED, t->chan); - if(soundClick) - soundClick->Play(); - } - else if(trigger[i]->type == TRIGGER_BUTTON_ONLY_IN_FOCUS && - parentElement->IsFocused()) - { - this->SetState(STATE_CLICKED, t->chan); - if(soundClick) - soundClick->Play(); - } - } - } - } - } - } - - if(this->IsHoldable()) - { - bool held = false; - s32 wm_btns, wm_btns_h, wm_btns_trig, cc_btns, cc_btns_h, cc_btns_trig; - - for(int i=0; i<6; i++) - { - if(trigger[i] && (trigger[i]->chan == -1 || trigger[i]->chan == t->chan)) - { - // higher 16 bits only (wiimote) - wm_btns = t->wpad.btns_d << 16; - wm_btns_h = t->wpad.btns_h << 16; - wm_btns_trig = trigger[i]->wpad.btns_h << 16; - - // lower 16 bits only (classic controller) - cc_btns = t->wpad.btns_d >> 16; - cc_btns_h = t->wpad.btns_h >> 16; - cc_btns_trig = trigger[i]->wpad.btns_h >> 16; - - if( - (t->wpad.btns_d > 0 && - wm_btns == wm_btns_trig || - (cc_btns == cc_btns_trig && t->wpad.exp.type == EXP_CLASSIC)) || - (t->pad.btns_d == trigger[i]->pad.btns_h && t->pad.btns_d > 0)) - { - if(trigger[i]->type == TRIGGER_HELD && state == STATE_SELECTED && - (t->chan == stateChan || stateChan == -1)) - this->SetState(STATE_CLICKED, t->chan); - } - - if( - (t->wpad.btns_h > 0 && - wm_btns_h == wm_btns_trig || - (cc_btns_h == cc_btns_trig && t->wpad.exp.type == EXP_CLASSIC)) || - (t->pad.btns_h == trigger[i]->pad.btns_h && t->pad.btns_h > 0)) - { - if(trigger[i]->type == TRIGGER_HELD) - held = true; - } - - if(!held && state == STATE_HELD && stateChan == t->chan) - { - this->ResetState(); - } - else if(held && state == STATE_CLICKED && stateChan == t->chan) - { - this->SetState(STATE_HELD, t->chan); - } - } - } - } - - if(updateCB) - updateCB(this); -} diff --git a/source/libwiigui/gui_customoptionbrowser.cpp b/source/libwiigui/gui_customoptionbrowser.cpp deleted file mode 100644 index 41ab56ca..00000000 --- a/source/libwiigui/gui_customoptionbrowser.cpp +++ /dev/null @@ -1,636 +0,0 @@ -/**************************************************************************** - * libwiigui - * - * gui_customoptionbrowser.cpp - * - * GUI class definitions - ***************************************************************************/ - -#include "gui.h" -#include "../wpad.h" -#include "gui_customoptionbrowser.h" - -#include - - -#define GAMESELECTSIZE 30 - - -customOptionList::customOptionList(int size) -{ - name = new char * [size]; - value = new char * [size]; - for (int i = 0; i < size; i++) - { - name[i] = 0; - value[i] = 0; - } - length = size; - changed = false; -} -customOptionList::~customOptionList() -{ - for (int i = 0; i < length; i++) - { - free(name[i]); - free(value[i]); - } - delete [] name; - delete [] value; -} -void customOptionList::SetName(int i, const char *format, ...) -{ - if(i >= 0 && i < length) - { - if(name[i]) free(name[i]); - name[i] = 0; - va_list va; - va_start(va, format); - vasprintf(&name[i], format, va); - va_end(va); - changed = true; - } -} -void customOptionList::SetValue(int i, const char *format, ...) -{ - if(i >= 0 && i < length) - { - char *tmp=0; - va_list va; - va_start(va, format); - vasprintf(&tmp, format, va); - va_end(va); - - if(tmp) - { - if(value[i] && !strcmp(tmp, value[i])) - free(tmp); - else - { - free(value[i]); - value[i] = tmp; - changed = true; - } - } - } -} - - - -//int vol; -extern const int vol; -/** - * Constructor for the GuiCustomOptionBrowser class. - */ -GuiCustomOptionBrowser::GuiCustomOptionBrowser(int w, int h, customOptionList * l, const char *themePath, const char *custombg, const u8 *imagebg, int scrollon,int col2) -{ - width = w; - height = h; - options = l; - size = ((l->GetLength() > PAGESIZE)? PAGESIZE: l->GetLength()); - scrollbaron = scrollon; - selectable = true; - listOffset = this->FindMenuItem(-1, 1); - selectedItem = 0; - focus = 1; // allow focus - coL2 = col2; - char imgPath[100]; - - trigA = new GuiTrigger; - trigA->SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A); - trigHeldA = new GuiTrigger; - trigHeldA->SetHeldTrigger(-1, WPAD_BUTTON_A, PAD_BUTTON_A); - btnSoundClick = new GuiSound(button_click_pcm, button_click_pcm_size, SOUND_PCM, vol); - - snprintf(imgPath, sizeof(imgPath), "%s%s", themePath, custombg); - bgOptions = new GuiImageData(imgPath, imagebg); - - bgOptionsImg = new GuiImage(bgOptions); - bgOptionsImg->SetParent(this); - bgOptionsImg->SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE); - - snprintf(imgPath, sizeof(imgPath), "%sbg_options_entry.png", themePath); - bgOptionsEntry = new GuiImageData(imgPath, bg_options_entry_png); - if (scrollbaron == 1) { - snprintf(imgPath, sizeof(imgPath), "%sscrollbar.png", themePath); - scrollbar = new GuiImageData(imgPath, scrollbar_png); - scrollbarImg = new GuiImage(scrollbar); - scrollbarImg->SetParent(this); - scrollbarImg->SetAlignment(ALIGN_RIGHT, ALIGN_TOP); - scrollbarImg->SetPosition(0, 4); - - snprintf(imgPath, sizeof(imgPath), "%sscrollbar_arrowdown.png", themePath); - arrowDown = new GuiImageData(imgPath, scrollbar_arrowdown_png); - arrowDownImg = new GuiImage(arrowDown); - arrowDownOver = new GuiImageData(imgPath, scrollbar_arrowdown_png); - arrowDownOverImg = new GuiImage(arrowDownOver); - snprintf(imgPath, sizeof(imgPath), "%sscrollbar_arrowup.png", themePath); - arrowUp = new GuiImageData(imgPath, scrollbar_arrowup_png); - arrowUpImg = new GuiImage(arrowUp); - arrowUpOver = new GuiImageData(imgPath, scrollbar_arrowup_png); - arrowUpOverImg = new GuiImage(arrowUpOver); - snprintf(imgPath, sizeof(imgPath), "%sscrollbar_box.png", themePath); - scrollbarBox = new GuiImageData(imgPath, scrollbar_box_png); - scrollbarBoxImg = new GuiImage(scrollbarBox); - scrollbarBoxOver = new GuiImageData(imgPath, scrollbar_box_png); - scrollbarBoxOverImg = new GuiImage(scrollbarBoxOver); - - arrowUpBtn = new GuiButton(arrowUpImg->GetWidth(), arrowUpImg->GetHeight()); - arrowUpBtn->SetParent(this); - arrowUpBtn->SetImage(arrowUpImg); - arrowUpBtn->SetImageOver(arrowUpOverImg); - arrowUpBtn->SetImageHold(arrowUpOverImg); - arrowUpBtn->SetAlignment(ALIGN_CENTRE, ALIGN_TOP); - arrowUpBtn->SetPosition(width/2-18+7,-18); - arrowUpBtn->SetSelectable(false); - arrowUpBtn->SetTrigger(trigA); - arrowUpBtn->SetEffectOnOver(EFFECT_SCALE, 50, 130); - arrowUpBtn->SetSoundClick(btnSoundClick); - - arrowDownBtn = new GuiButton(arrowDownImg->GetWidth(), arrowDownImg->GetHeight()); - arrowDownBtn->SetParent(this); - arrowDownBtn->SetImage(arrowDownImg); - arrowDownBtn->SetImageOver(arrowDownOverImg); - arrowDownBtn->SetImageHold(arrowDownOverImg); - arrowDownBtn->SetAlignment(ALIGN_CENTRE, ALIGN_BOTTOM); - arrowDownBtn->SetPosition(width/2-18+7,18); - arrowDownBtn->SetSelectable(false); - arrowDownBtn->SetTrigger(trigA); - arrowDownBtn->SetEffectOnOver(EFFECT_SCALE, 50, 130); - arrowDownBtn->SetSoundClick(btnSoundClick); - - scrollbarBoxBtn = new GuiButton(scrollbarBoxImg->GetWidth(), scrollbarBoxImg->GetHeight()); - scrollbarBoxBtn->SetParent(this); - scrollbarBoxBtn->SetImage(scrollbarBoxImg); - scrollbarBoxBtn->SetImageOver(scrollbarBoxOverImg); - scrollbarBoxBtn->SetImageHold(scrollbarBoxOverImg); - scrollbarBoxBtn->SetAlignment(ALIGN_CENTRE, ALIGN_TOP); - scrollbarBoxBtn->SetSelectable(false); - scrollbarBoxBtn->SetEffectOnOver(EFFECT_SCALE, 50, 120); - scrollbarBoxBtn->SetMinY(0); - scrollbarBoxBtn->SetMaxY(height-30); - scrollbarBoxBtn->SetHoldable(true); - scrollbarBoxBtn->SetTrigger(trigHeldA); - } - - optionIndex = new int[size]; - optionVal = new GuiText * [size]; - optionValOver = new GuiText * [size]; - optionBtn = new GuiButton * [size]; - optionTxt = new GuiText * [size]; - optionBg = new GuiImage * [size]; - - for(int i=0; i < size; i++) - { - optionTxt[i] = new GuiText(options->GetName(i), 20, (GXColor){0, 0, 0, 0xff}); - optionTxt[i]->SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE); - optionTxt[i]->SetPosition(24,0); - - optionBg[i] = new GuiImage(bgOptionsEntry); - - optionVal[i] = new GuiText(NULL, 20, (GXColor){0, 0, 0, 0xff}); - optionVal[i]->SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE); - - optionValOver[i] = new GuiText(NULL, 20, (GXColor){0, 0, 0, 0xff}); - optionValOver[i]->SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE); - - optionBtn[i] = new GuiButton(width,GAMESELECTSIZE);//(width-28,GAMESELECTSIZE); - optionBtn[i]->SetParent(this); - optionBtn[i]->SetLabel(optionTxt[i], 0); - optionBtn[i]->SetLabel(optionVal[i], 1); - optionBtn[i]->SetLabelOver(optionValOver[i], 1); - optionBtn[i]->SetImageOver(optionBg[i]); - optionBtn[i]->SetPosition(10,GAMESELECTSIZE*i+4); - optionBtn[i]->SetRumble(false); - optionBtn[i]->SetTrigger(trigA); - optionBtn[i]->SetSoundClick(btnSoundClick); - - } - UpdateListEntries(); -} - -/** - * Destructor for the GuiCustomOptionBrowser class. - */ -GuiCustomOptionBrowser::~GuiCustomOptionBrowser() -{ - if (scrollbaron == 1) { - delete arrowUpBtn; - delete arrowDownBtn; - delete scrollbarBoxBtn; - delete scrollbarImg; - delete arrowDownImg; - delete arrowDownOverImg; - delete arrowUpImg; - delete arrowUpOverImg; - delete scrollbarBoxImg; - delete scrollbarBoxOverImg; - delete scrollbar; - delete arrowDown; - delete arrowDownOver; - delete arrowUp; - delete arrowUpOver; - delete scrollbarBox; - delete scrollbarBoxOver; - } - delete bgOptionsImg; - delete bgOptions; - delete bgOptionsEntry; - - delete trigA; - delete btnSoundClick; - -// delete optionBg; - for(int i = 0; i < size; i++) - { - delete optionTxt[i]; - delete optionVal[i]; - delete optionValOver[i]; - delete optionBg[i]; - delete optionBtn[i]; - } - delete [] optionIndex; - delete [] optionVal; - delete [] optionValOver; - delete [] optionBtn; - delete [] optionTxt; - delete [] optionBg; -} - -void GuiCustomOptionBrowser::SetFocus(int f) -{ - LOCK(this); - focus = f; - - for(int i = 0; i < size; i++) - optionBtn[i]->ResetState(); - - if(f == 1) - optionBtn[selectedItem]->SetState(STATE_SELECTED); -} - -void GuiCustomOptionBrowser::ResetState() -{ - LOCK(this); - if(state != STATE_DISABLED) - { - state = STATE_DEFAULT; - stateChan = -1; - } - - for(int i = 0; i < size; i++) - { - optionBtn[i]->ResetState(); - } -} - -int GuiCustomOptionBrowser::GetClickedOption() -{ - int found = -1; - for(int i = 0; i < size; i++) - { - if(optionBtn[i]->GetState() == STATE_CLICKED) - { - optionBtn[i]->SetState(STATE_SELECTED); - found = optionIndex[i]; - break; - } - } - return found; -} - -int GuiCustomOptionBrowser::GetSelectedOption() -{ - int found = -1; - for(int i = 0; i < size; i++) - { - if(optionBtn[i]->GetState() == STATE_SELECTED) - { - found = optionIndex[i]; - break; - } - } - return found; -} - -/**************************************************************************** - * FindMenuItem - * - * Help function to find the next visible menu item on the list - ***************************************************************************/ - -int GuiCustomOptionBrowser::FindMenuItem(int currentItem, int direction) -{ - int nextItem = currentItem + direction; - - if(nextItem < 0 || nextItem >= options->GetLength()) - return -1; - - if(strlen(options->GetName(nextItem)) > 0) - return nextItem; - else - return FindMenuItem(nextItem, direction); -} - -/** - * Draw the button on screen - */ -void GuiCustomOptionBrowser::Draw() -{ - LOCK(this); - if(!this->IsVisible()) - return; - - bgOptionsImg->Draw(); - - int next = listOffset; - - for(int i=0; i < size; i++) - { - if(next >= 0) - { - optionBtn[i]->Draw(); - next = this->FindMenuItem(next, 1); - } - else - break; - } - - if(scrollbaron == 1) { - scrollbarImg->Draw(); - arrowUpBtn->Draw(); - arrowDownBtn->Draw(); - scrollbarBoxBtn->Draw(); - } - this->UpdateEffects(); -} -void GuiCustomOptionBrowser::UpdateListEntries() -{ - if(listOffset<0) listOffset = this->FindMenuItem(-1, 1); - int next = listOffset; - - int maxNameWidth = 0; - for(int i=0; i < size; i++) - { - if(next >= 0) - { - if(optionBtn[i]->GetState() == STATE_DISABLED) - { - optionBtn[i]->SetVisible(true); - optionBtn[i]->SetState(STATE_DEFAULT); - } - - optionTxt[i]->SetText(options->GetName(next)); - if(maxNameWidth < optionTxt[i]->GetTextWidth()) - maxNameWidth = optionTxt[i]->GetTextWidth(); - optionVal[i]->SetText(options->GetValue(next)); - optionValOver[i]->SetText(options->GetValue(next)); - - optionIndex[i] = next; - next = this->FindMenuItem(next, 1); - } - else - { - optionBtn[i]->SetVisible(false); - optionBtn[i]->SetState(STATE_DISABLED); - } - } - if(coL2 < (24+maxNameWidth+16)) - coL2 = 24+maxNameWidth+16; - for(int i=0; i < size; i++) - { - if(optionBtn[i]->GetState() != STATE_DISABLED) - { - optionVal[i]->SetPosition(coL2,0); - optionVal[i]->SetMaxWidth(bgOptionsImg->GetWidth() - (coL2+24), GuiText::DOTTED); - - optionValOver[i]->SetPosition(coL2,0); - optionValOver[i]->SetMaxWidth(bgOptionsImg->GetWidth() - (coL2+24), GuiText::SCROLL); - } - } -} -void GuiCustomOptionBrowser::Update(GuiTrigger * t) -{ - LOCK(this); - int next, prev, lang = options->GetLength(); - - if(state == STATE_DISABLED || !t) - return; - - if(options->IsChanged()) - UpdateListEntries(); - int old_listOffset = listOffset; - - // scrolldelay affects how fast the list scrolls - // when the arrows are clicked - float scrolldelay = 3.5; - - - if (scrollbaron == 1) - { - // update the location of the scroll box based on the position in the option list - arrowUpBtn->Update(t); - arrowDownBtn->Update(t); - scrollbarBoxBtn->Update(t); - } - - next = listOffset; - - for(int i=0; i < size; i++) - { - if(next >= 0) - next = this->FindMenuItem(next, 1); - - if(focus) - { - if(i != selectedItem && optionBtn[i]->GetState() == STATE_SELECTED) { - optionBtn[i]->ResetState(); - } else if(i == selectedItem && optionBtn[i]->GetState() == STATE_DEFAULT) { - optionBtn[selectedItem]->SetState(STATE_SELECTED); - } - } - - optionBtn[i]->Update(t); - - if(optionBtn[i]->GetState() == STATE_SELECTED) - { - selectedItem = i; - } - - } - - // pad/joystick navigation - if(!focus) - return; // skip navigation - - if (scrollbaron == 1) - { - - if (t->Down() || - arrowDownBtn->GetState() == STATE_CLICKED || ////////////////////////////////////////////down - arrowDownBtn->GetState() == STATE_HELD) - { - - next = this->FindMenuItem(optionIndex[selectedItem], 1); - - if(next >= 0) - { - if(selectedItem == size-1) - { - // move list down by 1 - listOffset = this->FindMenuItem(listOffset, 1); - } - else if(optionBtn[selectedItem+1]->IsVisible()) - { - optionBtn[selectedItem]->ResetState(); - optionBtn[selectedItem+1]->SetState(STATE_SELECTED, t->chan); - selectedItem++; - } - scrollbarBoxBtn->Draw(); - usleep(10000 * scrolldelay); - } - WPAD_ScanPads(); - u8 cnt, buttons = NULL; - /* Get pressed buttons */ - for (cnt = 0; cnt < 4; cnt++) - buttons |= WPAD_ButtonsHeld(cnt); - if (buttons == WPAD_BUTTON_A) - { - } - else - { - arrowDownBtn->ResetState(); - } - } - else if(t->Up() || - arrowUpBtn->GetState() == STATE_CLICKED || ////////////////////////////////////////////up - arrowUpBtn->GetState() == STATE_HELD) - { - prev = this->FindMenuItem(optionIndex[selectedItem], -1); - - if(prev >= 0) - { - if(selectedItem == 0) - { - // move list up by 1 - listOffset = prev; - } - else - { - optionBtn[selectedItem]->ResetState(); - optionBtn[selectedItem-1]->SetState(STATE_SELECTED, t->chan); - selectedItem--; - } - scrollbarBoxBtn->Draw(); - usleep(10000 * scrolldelay); - - - } - WPAD_ScanPads(); - u8 cnt, buttons = NULL; - /* Get pressed buttons */ - for (cnt = 0; cnt < 4; cnt++) - buttons |= WPAD_ButtonsHeld(cnt); - if (buttons == WPAD_BUTTON_A) - { - } - else - { - arrowUpBtn->ResetState(); - } - } - - if(scrollbarBoxBtn->GetState() == STATE_HELD && - scrollbarBoxBtn->GetStateChan() == t->chan && - t->wpad.ir.valid && options->GetLength() > size) - { - scrollbarBoxBtn->SetPosition(width/2-18+7,0); - int position = t->wpad.ir.y - 50 - scrollbarBoxBtn->GetTop(); - - listOffset = (position * lang)/180 - selectedItem; - - if(listOffset <= 0) - { - listOffset = 0; - selectedItem = 0; - } - else if(listOffset+size >= lang) - { - listOffset = lang-size; - selectedItem = size-1; - } - - } - int positionbar = 237*(listOffset + selectedItem) / lang; - - if(positionbar > 216) - positionbar = 216; - scrollbarBoxBtn->SetPosition(width/2-18+7, positionbar+8); - - - if(t->Right()) - { - if(listOffset < lang && lang > size) - { - listOffset =listOffset+ size; - if(listOffset+size >= lang) - listOffset = lang-size; - } - } - else if(t->Left()) - { - if(listOffset > 0) - { - listOffset =listOffset- size; - if(listOffset < 0) - listOffset = 0; - } - } - } - else - { - if(t->Down()) - { - next = this->FindMenuItem(optionIndex[selectedItem], 1); - - if(next >= 0) - { - if(selectedItem == size-1) - { - // move list down by 1 - listOffset = this->FindMenuItem(listOffset, 1); - } - else if(optionBtn[selectedItem+1]->IsVisible()) - { - optionBtn[selectedItem]->ResetState(); - optionBtn[selectedItem+1]->SetState(STATE_SELECTED, t->chan); - selectedItem++; - } - } - } - else if(t->Up()) - { - prev = this->FindMenuItem(optionIndex[selectedItem], -1); - - if(prev >= 0) - { - if(selectedItem == 0) - { - // move list up by 1 - listOffset = prev; - } - else - { - optionBtn[selectedItem]->ResetState(); - optionBtn[selectedItem-1]->SetState(STATE_SELECTED, t->chan); - selectedItem--; - } - } - } - } - if(old_listOffset != listOffset) - UpdateListEntries(); - - if(updateCB) - updateCB(this); -} diff --git a/source/libwiigui/gui_customoptionbrowser.h b/source/libwiigui/gui_customoptionbrowser.h deleted file mode 100644 index 0455a495..00000000 --- a/source/libwiigui/gui_customoptionbrowser.h +++ /dev/null @@ -1,90 +0,0 @@ -#include "gui.h" -extern int SetValue(int i, const char *format, ...) __attribute__((format(printf,2,3))); - -class customOptionList { - public: - customOptionList(int size); - ~customOptionList(); - void SetName(int i, const char *format, ...) __attribute__((format (printf, 3, 4))); - const char *GetName(int i) - { - if(i >= 0 && i < length && name[i]) - return name[i]; - else - return ""; - } - void SetValue(int i, const char *format, ...) __attribute__((format (printf, 3, 4))); - const char *GetValue(int i) - { - if(i >= 0 && i < length && value[i]) - return value[i]; - else - return ""; - } - int GetLength() { return length; } - bool IsChanged() { bool ret = changed; changed = false; return ret;} - private: - int length; - char ** name; - char ** value; - bool changed; -}; - -//!Display a list of menu options -class GuiCustomOptionBrowser : public GuiElement -{ - public: - GuiCustomOptionBrowser(int w, int h, customOptionList * l, const char * themePath, const char *custombg, const u8 *imagebg, int scrollbar, int col2); - ~GuiCustomOptionBrowser(); - int FindMenuItem(int c, int d); - int GetClickedOption(); - int GetSelectedOption(); - void ResetState(); - void SetFocus(int f); - void Draw(); - void Update(GuiTrigger * t); - protected: - void UpdateListEntries(); - int selectedItem; - int listOffset; - int size; - int coL2; - int scrollbaron; - - customOptionList * options; - int * optionIndex; - GuiButton ** optionBtn; - GuiText ** optionTxt; - GuiText ** optionVal; - GuiText ** optionValOver; - GuiImage ** optionBg; - - GuiButton * arrowUpBtn; - GuiButton * arrowDownBtn; - GuiButton * scrollbarBoxBtn; - - GuiImage * bgOptionsImg; - GuiImage * scrollbarImg; - GuiImage * arrowDownImg; - GuiImage * arrowDownOverImg; - GuiImage * arrowUpImg; - GuiImage * arrowUpOverImg; - GuiImage * scrollbarBoxImg; - GuiImage * scrollbarBoxOverImg; - - GuiImageData * bgOptions; - GuiImageData * bgOptionsEntry; - GuiImageData * scrollbar; - GuiImageData * arrowDown; - GuiImageData * arrowDownOver; - GuiImageData * arrowUp; - GuiImageData * arrowUpOver; - GuiImageData * scrollbarBox; - GuiImageData * scrollbarBoxOver; - - GuiSound * btnSoundOver; - GuiSound * btnSoundClick; - GuiTrigger * trigA; - GuiTrigger * trigB; - GuiTrigger * trigHeldA; -}; diff --git a/source/libwiigui/gui_diskcover.cpp b/source/libwiigui/gui_diskcover.cpp deleted file mode 100644 index 07dc5189..00000000 --- a/source/libwiigui/gui_diskcover.cpp +++ /dev/null @@ -1,78 +0,0 @@ -#include "gui_diskcover.h" - - -GuiDiskCover::GuiDiskCover() -{ - deg_beta=0.0; - eff_step=0; -// spin_angle = 0; - spin_speedup = 1.0; - spin_up = false; -} -GuiDiskCover::GuiDiskCover(GuiImageData *Disk) : GuiImage(Disk) -{ - deg_beta=0.0; - eff_step=0; -// spin_angle = 0; - spin_speedup = 1.0; - spin_up = false; -} -GuiDiskCover::~GuiDiskCover() -{ -} - -void GuiDiskCover::SetBeta(f32 beta) -{ - deg_beta=beta; -} -void GuiDiskCover::SetBetaRotateEffect(f32 beta, u16 step) -{ - eff_beta = beta/(f32)step; - eff_step = step; -} -bool GuiDiskCover::GetBetaRotateEffect() -{ - return eff_step != 0; -} - -void GuiDiskCover::SetSpin(bool Up) -{ - spin_up = Up; -} - -void Menu_DrawDiskCover(f32 xpos, f32 ypos, f32 zpos, u16 width, u16 height, u16 distance,u8 data[], - f32 deg_alpha, f32 deg_beta, f32 scaleX, f32 scaleY, u8 alpha, bool shadow); -void Menu_DrawDiskCoverShadow(f32 xpos, f32 ypos, f32 zpos, u16 width, u16 height, u16 distance,u8 data[], - f32 deg_alpha, f32 deg_beta, f32 scaleX, f32 scaleY, u8 alpha, bool shadow); - -void GuiDiskCover::Draw() -{ - LOCK(this); - if(!image || !this->IsVisible()) - return; - float currScale = this->GetScale(); -// Menu_DrawDiskCoverShadow(this->GetLeft(), this->GetTop(), 190, width, height, 40, image, imageangle, deg_beta, widescreen ? currScale*0.8 : currScale, currScale, this->GetAlpha(), true); - Menu_DrawDiskCover(this->GetLeft(), this->GetTop(), 50, width, height, 55, image, imageangle, deg_beta, widescreen ? currScale*0.8 : currScale, currScale, 64, true); - Menu_DrawDiskCover(this->GetLeft(), this->GetTop(), 50, width, height, 55, image, imageangle, deg_beta, widescreen ? currScale*0.8 : currScale, currScale, this->GetAlpha(), false); - - if(eff_step) - { - deg_beta += eff_beta; - eff_step--; - } - GuiImage::imageangle += spin_speedup; - while(GuiImage::imageangle >= 360.0) GuiImage::imageangle -= 360.0; - - if(spin_up) - { - if (spin_speedup < 11) // speed up - spin_speedup += 0.20; - } - else - { - if (spin_speedup > 1) - spin_speedup -=0.05; //slow down - } - - this->UpdateEffects(); -} diff --git a/source/libwiigui/gui_diskcover.h b/source/libwiigui/gui_diskcover.h deleted file mode 100644 index 74d5a788..00000000 --- a/source/libwiigui/gui_diskcover.h +++ /dev/null @@ -1,42 +0,0 @@ -#ifndef _GUIDISCCOVER_H_ -#define _GUIDISCCOVER_H_ - -#include "gui.h" - - -class GuiDiskCover : public GuiImage -{ -public: - GuiDiskCover(); - GuiDiskCover(GuiImageData * img); - ~GuiDiskCover(); - void SetBeta(f32 beta); - void SetBetaRotateEffect(f32 beta, u16 Step); - bool GetBetaRotateEffect(); - - void SetSpin(bool Up); - void Draw(); -private: - f32 deg_beta; - f32 eff_beta; - u16 eff_step; - -// f32 spin_angle; - f32 spin_speedup; - bool spin_up; -}; - - - - - - - - - - - - - - -#endif /* _GUIDISCCOVER_H_ */ diff --git a/source/libwiigui/gui_element.cpp b/source/libwiigui/gui_element.cpp deleted file mode 100644 index 6b53f277..00000000 --- a/source/libwiigui/gui_element.cpp +++ /dev/null @@ -1,765 +0,0 @@ -/**************************************************************************** - * libwiigui - * - * Tantric 2009 - * - * gui_element.cpp - * - * GUI class definitions - ***************************************************************************/ - -#include "gui.h" - -/** - * Constructor for the Object class. - */ -mutex_t GuiElement::mutex = 0; -GuiElement::GuiElement() -{ - xoffset = 0; - yoffset = 0; - xmin = 0; - xmax = 0; - ymin = 0; - ymax = 0; - width = 0; - height = 0; - alpha = 255; - scale = 1; - state = STATE_DEFAULT; - stateChan = -1; - trigger[0] = NULL; - trigger[1] = NULL; - trigger[2] = NULL; - trigger[3] = NULL; - trigger[4] = NULL; - trigger[6] = NULL; - parentElement = NULL; - rumble = true; - selectable = false; - clickable = false; - holdable = false; - visible = true; - focus = -1; // cannot be focused - updateCB = NULL; - yoffsetDyn = 0; - xoffsetDyn = 0; - yoffsetDynFloat = 0; - alphaDyn = -1; - scaleDyn = 1; - effects = 0; - effectAmount = 0; - effectTarget = 0; - effectsOver = 0; - effectAmountOver = 0; - effectTargetOver = 0; - frequency = 0.0f; - changervar = 0; - degree = -90.0f; - circleamount = 360.0f; - Radius = 150; - angleDyn = 0.0f; - anglespeed = 0.0f; - - // default alignment - align to top left - alignmentVert = ALIGN_TOP; - alignmentHor = ALIGN_LEFT; - if(mutex == 0) LWP_MutexInit(&mutex, true); -} - -/** - * Destructor for the GuiElement class. - */ -GuiElement::~GuiElement() -{ -// LWP_MutexDestroy(mutex); -} - -void GuiElement::SetParent(GuiElement * e) -{ - LOCK(this); - parentElement = e; -} -/** - * Get the left position of the GuiElement. - * @see SetLeft() - * @return Left position in pixel. - */ -int GuiElement::GetLeft() -{ - int x = 0; - int pWidth = 0; - int pLeft = 0; - - if(parentElement) - { - pWidth = parentElement->GetWidth(); - pLeft = parentElement->GetLeft(); - } - - if(effects & (EFFECT_SLIDE_IN | EFFECT_SLIDE_OUT | EFFECT_GOROUND | EFFECT_ROCK_VERTICLE)) - pLeft += xoffsetDyn; - - switch(alignmentHor) - { - case ALIGN_LEFT: - x = pLeft; - break; - case ALIGN_CENTRE: - x = pLeft + (pWidth/2) - (width/2); - break; - case ALIGN_RIGHT: - x = pLeft + pWidth - width; - break; - } - return x + xoffset; -} - -/** - * Get the top position of the GuiElement. - * @see SetTop() - * @return Top position in pixel. - */ -int GuiElement::GetTop() -{ - int y = 0; - int pHeight = 0; - int pTop = 0; - - if(parentElement) - { - pHeight = parentElement->GetHeight(); - pTop = parentElement->GetTop(); - } - - if(effects & (EFFECT_SLIDE_IN | EFFECT_SLIDE_OUT | EFFECT_GOROUND | EFFECT_ROCK_VERTICLE)) - pTop += yoffsetDyn; - - - switch(alignmentVert) - { - case ALIGN_TOP: - y = pTop; - break; - case ALIGN_MIDDLE: - y = pTop + (pHeight/2) - (height/2); - break; - case ALIGN_BOTTOM: - y = pTop + pHeight - height; - break; - } - return y + yoffset; -} - -void GuiElement::SetMinX(int x) -{ - LOCK(this); - xmin = x; -} - -int GuiElement::GetMinX() -{ - return xmin; -} - -void GuiElement::SetMaxX(int x) -{ - LOCK(this); - xmax = x; -} - -int GuiElement::GetMaxX() -{ - return xmax; -} - -void GuiElement::SetMinY(int y) -{ - LOCK(this); - ymin = y; -} - -int GuiElement::GetMinY() -{ - return ymin; -} - -void GuiElement::SetMaxY(int y) -{ - LOCK(this); - ymax = y; -} - -int GuiElement::GetMaxY() -{ - return ymax; -} - -/** - * Get the width of the GuiElement. - * @see SetWidth() - * @return Width of the GuiElement. - */ -int GuiElement::GetWidth() -{ - return width; -} - -/** - * Get the height of the GuiElement. - * @see SetHeight() - * @return Height of the GuiElement. - */ -int GuiElement::GetHeight() -{ - return height; -} - -/** - * Set the width and height of the GuiElement. - * @param[in] Width Width in pixel. - * @param[in] Height Height in pixel. - * @see SetWidth() - * @see SetHeight() - */ -void GuiElement::SetSize(int w, int h) -{ - LOCK(this); - - width = w; - height = h; -} - -/** - * Get visible. - * @see SetVisible() - * @return true if visible, false otherwise. - */ -bool GuiElement::IsVisible() -{ - return visible; -} - -/** - * Set visible. - * @param[in] Visible Set to true to show GuiElement. - * @see IsVisible() - */ -void GuiElement::SetVisible(bool v) -{ - LOCK(this); - visible = v; -} - -void GuiElement::SetAlpha(int a) -{ - LOCK(this); - alpha = a; -} - -int GuiElement::GetAlpha() -{ - int a; - - if(alphaDyn >= 0) - a = alphaDyn; - else - a = alpha; - - if(parentElement) - a *= parentElement->GetAlpha()/255.0; - - return a; -} - -float GuiElement::GetAngleDyn() -{ - float a = 0.0; - - if(angleDyn) - a = angleDyn; - - if(parentElement && !angleDyn) - a = parentElement->GetAngleDyn(); - - return a; -} - -void GuiElement::SetScale(float s) -{ - LOCK(this); - scale = s; -} - -float GuiElement::GetScale() -{ - float s = scale * scaleDyn; - - if(parentElement) - s *= parentElement->GetScale(); - - return s; -} - -int GuiElement::GetState() -{ - return state; -} - -int GuiElement::GetStateChan() -{ - return stateChan; -} - -void GuiElement::SetState(int s, int c) -{ - LOCK(this); - state = s; - stateChan = c; -} - -void GuiElement::ResetState() -{ - LOCK(this); - if(state != STATE_DISABLED) - { - state = STATE_DEFAULT; - stateChan = -1; - } -} - -void GuiElement::SetClickable(bool c) -{ - LOCK(this); - clickable = c; -} - -void GuiElement::SetSelectable(bool s) -{ - LOCK(this); - selectable = s; -} - -void GuiElement::SetHoldable(bool d) -{ - LOCK(this); - holdable = d; -} - -bool GuiElement::IsSelectable() -{ - if(state == STATE_DISABLED || state == STATE_CLICKED) - return false; - else - return selectable; -} - -bool GuiElement::IsClickable() -{ - if(state == STATE_DISABLED || - state == STATE_CLICKED || - state == STATE_HELD) - return false; - else - return clickable; -} - -bool GuiElement::IsHoldable() -{ - if(state == STATE_DISABLED) - return false; - else - return holdable; -} - -void GuiElement::SetFocus(int f) -{ - LOCK(this); - focus = f; -} - -int GuiElement::IsFocused() -{ - return focus; -} - -void GuiElement::SetTrigger(GuiTrigger * t) -{ - LOCK(this); - if(!trigger[0]) - trigger[0] = t; - else if(!trigger[1]) - trigger[1] = t; - else if(!trigger[2]) - trigger[2] = t; - else if(!trigger[3]) - trigger[3] = t; - else if(!trigger[4]) - trigger[4] = t; - else if(!trigger[5]) - trigger[5] = t; - else // both were assigned, so we'll just overwrite the first one - trigger[0] = t; -} - -void GuiElement::SetTrigger(u8 i, GuiTrigger * t) -{ - LOCK(this); - trigger[i] = t; -} - -void GuiElement::RemoveTrigger(u8 i) -{ - LOCK(this); - trigger[i] = NULL; -} - -bool GuiElement::Rumble() -{ - return rumble; -} - -void GuiElement::SetRumble(bool r) -{ - LOCK(this); - rumble = r; -} - -int GuiElement::GetEffect() -{ - LOCK(this); - return effects; -} - -int GuiElement::GetEffectOnOver() -{ - LOCK(this); - return effectsOver; -} - -float GuiElement::GetFrequency() -{ - LOCK(this); - return frequency; -} - -void GuiElement::SetEffect(int eff, int speed, f32 circles, int r, f32 startdegree, f32 anglespeedset, int center_x, int center_y) { - - if(eff & EFFECT_GOROUND) { - xoffsetDyn = 0; //!position of circle in x - yoffsetDyn = 0; //!position of circle in y - Radius = r; //!radius of the circle - degree = startdegree; //!for example -90 () to start at top of circle - circleamount = circles; //!circleamoutn in degrees for example 360 for 1 circle - angleDyn = 0.0f; //!this is used by the code to calc the angle - anglespeed = anglespeedset; //!This is anglespeed depending on circle speed 1 is same speed and 0.5 half speed - temp_xoffset = center_x; //!position of center in x - temp_yoffset = center_y; //!position of center in y - } - effects |= eff; - effectAmount = speed; //!Circlespeed -} - -void GuiElement::SetEffect(int eff, int amount, int target) -{ - LOCK(this); - if(eff & EFFECT_SLIDE_IN) - { - // these calculations overcompensate a little - if(eff & EFFECT_SLIDE_TOP) - yoffsetDyn = -screenheight; - else if(eff & EFFECT_SLIDE_LEFT) - xoffsetDyn = -screenwidth; - else if(eff & EFFECT_SLIDE_BOTTOM) - yoffsetDyn = screenheight; - else if(eff & EFFECT_SLIDE_RIGHT) - xoffsetDyn = screenwidth; - } - - if(eff & EFFECT_FADE && amount > 0) - { - alphaDyn = 0; - } - else if(eff & EFFECT_FADE && amount < 0) - { - alphaDyn = alpha; - - } else if(eff & EFFECT_ROCK_VERTICLE) { - changervar = 0; - yoffsetDyn = 0; - yoffsetDynFloat = 0.0; - } - - effects |= eff; - effectAmount = amount; - effectTarget = target; -} - -void GuiElement::SetEffectOnOver(int eff, int amount, int target) -{ - LOCK(this); - effectsOver |= eff; - effectAmountOver = amount; - effectTargetOver = target; -} - -void GuiElement::SetEffectGrow() -{ - SetEffectOnOver(EFFECT_SCALE, 4, 110); -} - -void GuiElement::StopEffect() -{ - xoffsetDyn = 0; - yoffsetDyn = 0; - effects = 0; - effectsOver = 0; - effectAmount = 0; - effectAmountOver = 0; - effectTarget = 0; - effectTargetOver = 0; - scaleDyn = 1; - frequency = 0.0f; - changervar = 0; - //angleDyn = 0.0f; - anglespeed = 0.0f; -} - -void GuiElement::UpdateEffects() -{ - LOCK(this); - - if(effects & (EFFECT_SLIDE_IN | EFFECT_SLIDE_OUT | EFFECT_GOROUND)) - { - if(effects & EFFECT_SLIDE_IN) - { - if(effects & EFFECT_SLIDE_LEFT) - { - xoffsetDyn += effectAmount; - - if(xoffsetDyn >= 0) - { - xoffsetDyn = 0; - effects = 0; - } - } - else if(effects & EFFECT_SLIDE_RIGHT) - { - xoffsetDyn -= effectAmount; - - if(xoffsetDyn <= 0) - { - xoffsetDyn = 0; - effects = 0; - } - } - else if(effects & EFFECT_SLIDE_TOP) - { - yoffsetDyn += effectAmount; - - if(yoffsetDyn >= 0) - { - yoffsetDyn = 0; - effects = 0; - } - } - else if(effects & EFFECT_SLIDE_BOTTOM) - { - yoffsetDyn -= effectAmount; - - if(yoffsetDyn <= 0) - { - yoffsetDyn = 0; - effects = 0; - } - } - } - else - { - if(effects & EFFECT_SLIDE_LEFT) - { - xoffsetDyn -= effectAmount; - - if(xoffsetDyn <= -screenwidth) - effects = 0; // shut off effect - } - else if(effects & EFFECT_SLIDE_RIGHT) - { - xoffsetDyn += effectAmount; - - if(xoffsetDyn >= screenwidth) - effects = 0; // shut off effect - } - else if(effects & EFFECT_SLIDE_TOP) - { - yoffsetDyn -= effectAmount; - - if(yoffsetDyn <= -screenheight) - effects = 0; // shut off effect - } - else if(effects & EFFECT_SLIDE_BOTTOM) - { - yoffsetDyn += effectAmount; - - if(yoffsetDyn >= screenheight) - effects = 0; // shut off effect - } - } - } - - if(effects & EFFECT_GOROUND) { - //!< check out gui.h for info - xoffset = temp_xoffset; - yoffset = temp_yoffset; - if(fabs(frequency) < circleamount) { - angleDyn = (frequency+degree+90.0f) * anglespeed; - xoffsetDyn = (int) lround(((f32) Radius)*cos((frequency+degree)*PI/180.0f)); - yoffsetDyn = (int) lround(((f32) Radius)*sin((frequency+degree)*PI/180.0f)); - frequency += ((f32) effectAmount)*0.01f; - } else { - f32 temp_frequency = ((effectAmount<0)?-1.0f:1.0f)*circleamount; - angleDyn = (temp_frequency+degree+90.0f) * anglespeed; - xoffsetDyn = (int) lround(((f32) Radius)*cos((temp_frequency+degree)*PI/180.0f)); - yoffsetDyn = (int) lround(((f32) Radius)*sin((temp_frequency+degree)*PI/180.0f)); - xoffset += xoffsetDyn; - yoffset += yoffsetDyn; - effects ^= EFFECT_GOROUND; - frequency = 0.0f; - } - } - - if(effects & EFFECT_ROCK_VERTICLE) { - //move up to 10pixel above 0 - if(changervar == 0 && yoffsetDynFloat < 11.0) { - yoffsetDynFloat += (effectAmount*0.01); - } else if(yoffsetDynFloat > 10.0) { - changervar = 1; - } - //move down till 10pixel under 0 - if(changervar == 1 && yoffsetDynFloat > -11.0) { - yoffsetDynFloat -= (effectAmount*0.01); - } else if(yoffsetDynFloat < -10.0) { - changervar = 0; - } - yoffsetDyn = (int)(yoffsetDynFloat); - } - - if(effects & EFFECT_FADE) - { - alphaDyn += effectAmount; - - if(effectAmount < 0 && alphaDyn <= 0) - { - alphaDyn = 0; - effects = 0; // shut off effect - } - else if(effectAmount > 0 && alphaDyn >= alpha) - { - alphaDyn = alpha; - effects = 0; // shut off effect - } - } - if(effects & EFFECT_SCALE) - { - scaleDyn += effectAmount/100.0; - - if((effectAmount < 0 && scaleDyn <= effectTarget/100.0) - || (effectAmount > 0 && scaleDyn >= effectTarget/100.0)) - { - scaleDyn = effectTarget/100.0; - effects = 0; // shut off effect - } - } - if(effects & EFFECT_PULSE) - { - int percent = 10; //go down from target by this - - if((scaleDyn <= (effectTarget*0.01)) && (!changervar)) { - scaleDyn += (effectAmount*0.001); - } else if(scaleDyn > (effectTarget*0.01)) { - changervar = 1; - } - if((scaleDyn >= ((effectTarget-percent)*0.01)) && (changervar)) { - scaleDyn -= (effectAmount*0.001); - } else if(scaleDyn < ((effectTarget-percent)*0.01)) { - changervar = 0; - } - } -} - -void GuiElement::Update(GuiTrigger * t) -{ - LOCK(this); - if(updateCB) - updateCB(this); -} - -void GuiElement::SetUpdateCallback(UpdateCallback u) -{ - LOCK(this); - updateCB = u; -} - -void GuiElement::SetPosition(int xoff, int yoff) -{ - LOCK(this); - xoffset = xoff; - yoffset = yoff; -} - -void GuiElement::SetAlignment(int hor, int vert) -{ - LOCK(this); - alignmentHor = hor; - alignmentVert = vert; -} - -int GuiElement::GetSelected() -{ - return -1; -} - -/** - * Draw an element on screen. - */ -void GuiElement::Draw() -{ -} - -/** - * Draw Tooltips on screen. - */ -void GuiElement::DrawTooltip() -{ -} - -/** - * Check if a position is inside the GuiElement. - * @param[in] x X position in pixel. - * @param[in] y Y position in pixel. - */ -bool GuiElement::IsInside(int x, int y) -{ - if(x > this->GetLeft() && x < (this->GetLeft()+width) - && y > this->GetTop() && y < (this->GetTop()+height)) - return true; - return false; -} -void GuiElement::Lock() -{ - LWP_MutexLock(mutex); -} -void GuiElement::Unlock() -{ - LWP_MutexUnlock(mutex); -} - - -SimpleLock::SimpleLock(GuiElement *e) : element(e) -{ - element->Lock(); -} -SimpleLock::~SimpleLock() -{ - element->Unlock(); -} diff --git a/source/libwiigui/gui_gamebrowser.cpp b/source/libwiigui/gui_gamebrowser.cpp deleted file mode 100644 index d6984592..00000000 --- a/source/libwiigui/gui_gamebrowser.cpp +++ /dev/null @@ -1,650 +0,0 @@ -/**************************************************************************** - * libwiigui - * - * gui_gamebrowser.cpp - * - * GUI class definitions - ***************************************************************************/ - -#include "gui.h" -#include "../wpad.h" - -#include -#include "gui_gamebrowser.h" -#include "../cfg.h" - -#include -#include - -#define GAMESELECTSIZE 30 -extern const int vol; -int txtscroll = 0; -/** - * Constructor for the GuiGameBrowser class. - */ -GuiGameBrowser::GuiGameBrowser(int w, int h, struct discHdr * l, int gameCnt, const char *themePath, const u8 *imagebg, int selected, int offset) -{ - width = w; - height = h; - this->gameCnt = gameCnt; - gameList = l; - pagesize = THEME.pagesize; - scrollbaron = (gameCnt > pagesize) ? 1 : 0; - selectable = true; - listOffset = (offset == 0) ? this->FindMenuItem(-1, 1) : offset; - selectedItem = selected - offset; - focus = 1; // allow focus - char imgPath[100]; - - trigA = new GuiTrigger; - trigA->SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A); - trigHeldA = new GuiTrigger; - trigHeldA->SetHeldTrigger(-1, WPAD_BUTTON_A, PAD_BUTTON_A); - btnSoundClick = new GuiSound(button_click_pcm, button_click_pcm_size, SOUND_PCM, vol); - - snprintf(imgPath, sizeof(imgPath), "%sbg_options.png", themePath); - bgGames = new GuiImageData(imgPath, imagebg); - - bgGameImg = new GuiImage(bgGames); - bgGameImg->SetParent(this); - bgGameImg->SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE); - - maxTextWidth = bgGameImg->GetWidth() - 24 - 4; - - snprintf(imgPath, sizeof(imgPath), "%sbg_options_entry.png", themePath); - bgGamesEntry = new GuiImageData(imgPath, bg_options_entry_png); - - snprintf(imgPath, sizeof(imgPath), "%sscrollbar.png", themePath); - scrollbar = new GuiImageData(imgPath, scrollbar_png); - scrollbarImg = new GuiImage(scrollbar); - scrollbarImg->SetParent(this); - scrollbarImg->SetAlignment(ALIGN_RIGHT, ALIGN_TOP); - scrollbarImg->SetPosition(0, 4); - - maxTextWidth -= scrollbarImg->GetWidth() + 4; - - snprintf(imgPath, sizeof(imgPath), "%sscrollbar_arrowdown.png", themePath); - arrowDown = new GuiImageData(imgPath, scrollbar_arrowdown_png); - arrowDownImg = new GuiImage(arrowDown); - arrowDownOver = new GuiImageData(imgPath, scrollbar_arrowdown_png); - arrowDownOverImg = new GuiImage(arrowDownOver); - snprintf(imgPath, sizeof(imgPath), "%sscrollbar_arrowup.png", themePath); - arrowUp = new GuiImageData(imgPath, scrollbar_arrowup_png); - arrowUpImg = new GuiImage(arrowUp); - arrowUpOver = new GuiImageData(imgPath, scrollbar_arrowup_png); - arrowUpOverImg = new GuiImage(arrowUpOver); - snprintf(imgPath, sizeof(imgPath), "%sscrollbar_box.png", themePath); - scrollbarBox = new GuiImageData(imgPath, scrollbar_box_png); - scrollbarBoxImg = new GuiImage(scrollbarBox); - scrollbarBoxOver = new GuiImageData(imgPath, scrollbar_box_png); - scrollbarBoxOverImg = new GuiImage(scrollbarBoxOver); - - arrowUpBtn = new GuiButton(arrowUpImg->GetWidth(), arrowUpImg->GetHeight()); - arrowUpBtn->SetParent(this); - arrowUpBtn->SetImage(arrowUpImg); - arrowUpBtn->SetImageOver(arrowUpOverImg); - arrowUpBtn->SetImageHold(arrowUpOverImg); - arrowUpBtn->SetAlignment(ALIGN_CENTRE, ALIGN_TOP); - arrowUpBtn->SetPosition(width/2-18+7,-18); - arrowUpBtn->SetSelectable(false); - arrowUpBtn->SetTrigger(trigA); - arrowUpBtn->SetEffectOnOver(EFFECT_SCALE, 50, 130); - arrowUpBtn->SetSoundClick(btnSoundClick); - - arrowDownBtn = new GuiButton(arrowDownImg->GetWidth(), arrowDownImg->GetHeight()); - arrowDownBtn->SetParent(this); - arrowDownBtn->SetImage(arrowDownImg); - arrowDownBtn->SetImageOver(arrowDownOverImg); - arrowDownBtn->SetImageHold(arrowDownOverImg); - arrowDownBtn->SetAlignment(ALIGN_CENTRE, ALIGN_BOTTOM); - arrowDownBtn->SetPosition(width/2-18+7,18); - arrowDownBtn->SetSelectable(false); - arrowDownBtn->SetTrigger(trigA); - arrowDownBtn->SetEffectOnOver(EFFECT_SCALE, 50, 130); - arrowDownBtn->SetSoundClick(btnSoundClick); - - scrollbarBoxBtn = new GuiButton(scrollbarBoxImg->GetWidth(), scrollbarBoxImg->GetHeight()); - scrollbarBoxBtn->SetParent(this); - scrollbarBoxBtn->SetImage(scrollbarBoxImg); - scrollbarBoxBtn->SetImageOver(scrollbarBoxOverImg); - scrollbarBoxBtn->SetImageHold(scrollbarBoxOverImg); - scrollbarBoxBtn->SetAlignment(ALIGN_CENTRE, ALIGN_TOP); - scrollbarBoxBtn->SetSelectable(false); - scrollbarBoxBtn->SetEffectOnOver(EFFECT_SCALE, 50, 120); - scrollbarBoxBtn->SetMinY(0); - scrollbarBoxBtn->SetMaxY(height-30); - scrollbarBoxBtn->SetHoldable(true); - scrollbarBoxBtn->SetTrigger(trigHeldA); - - gameIndex = new int[pagesize]; - game = new GuiButton * [pagesize]; - gameTxt = new GuiText * [pagesize]; - gameTxtOver = new GuiText * [pagesize]; - gameBg = new GuiImage * [pagesize]; - - for(int i=0; i < pagesize; i++) - { - gameTxt[i] = new GuiText(get_title(&gameList[i]), 20, (GXColor){THEME.gameText_r, THEME.gameText_g, THEME.gameText_b, 0xff}); - gameTxt[i]->SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE); - gameTxt[i]->SetPosition(24,0); - gameTxt[i]->SetMaxWidth(maxTextWidth, GuiText::DOTTED); - - - gameTxtOver[i] = new GuiText(get_title(&gameList[i]), 20, (GXColor){THEME.gameText_r, THEME.gameText_g, THEME.gameText_b, 0xff}); - gameTxtOver[i]->SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE); - gameTxtOver[i]->SetPosition(24,0); - gameTxtOver[i]->SetMaxWidth(maxTextWidth, GuiText::SCROLL); - - gameBg[i] = new GuiImage(bgGamesEntry); - - game[i] = new GuiButton(width-28,GAMESELECTSIZE); - game[i]->SetParent(this); - game[i]->SetLabel(gameTxt[i]); - game[i]->SetLabelOver(gameTxtOver[i]); - game[i]->SetImageOver(gameBg[i]); - game[i]->SetPosition(5,GAMESELECTSIZE*i+4); - game[i]->SetRumble(false); - game[i]->SetTrigger(trigA); - game[i]->SetSoundClick(btnSoundClick); - - gameIndex[i] = i; - } - UpdateListEntries(); -} - -/** - * Destructor for the GuiGameBrowser class. - */ -GuiGameBrowser::~GuiGameBrowser() -{ - delete arrowUpBtn; - delete arrowDownBtn; - delete scrollbarBoxBtn; - delete scrollbarImg; - delete arrowDownImg; - delete arrowDownOverImg; - delete arrowUpImg; - delete arrowUpOverImg; - delete scrollbarBoxImg; - delete scrollbarBoxOverImg; - delete scrollbar; - delete arrowDown; - delete arrowDownOver; - delete arrowUp; - delete arrowUpOver; - delete scrollbarBox; - delete scrollbarBoxOver; - delete bgGameImg; - delete bgGames; - delete bgGamesEntry; - - delete trigA; - delete btnSoundClick; - -// delete optionBg; - for(int i=0; iResetState(); - - if(f == 1) - game[selectedItem]->SetState(STATE_SELECTED); -} - -void GuiGameBrowser::ResetState() -{ - LOCK(this); - if(state != STATE_DISABLED) - { - state = STATE_DEFAULT; - stateChan = -1; - } - - for(int i=0; iResetState(); - } -} - -int GuiGameBrowser::GetOffset() -{ - return listOffset; -} -int GuiGameBrowser::GetClickedOption() -{ - int found = -1; - for(int i=0; iGetState() == STATE_CLICKED) - { - game[i]->SetState(STATE_SELECTED); - found = gameIndex[i]; - break; - } - } - return found; -} - -int GuiGameBrowser::GetSelectedOption() -{ - int found = -1; - for(int i=0; iGetState() == STATE_SELECTED) - { - game[i]->SetState(STATE_SELECTED); - found = gameIndex[i]; - break; - } - } - return found; -} - -/**************************************************************************** - * FindMenuItem - * - * Help function to find the next visible menu item on the list - ***************************************************************************/ - -int GuiGameBrowser::FindMenuItem(int currentItem, int direction) -{ - int nextItem = currentItem + direction; - - if(nextItem < 0 || nextItem >= gameCnt) - return -1; - - if(strlen(get_title(&gameList[nextItem])) > 0) - return nextItem; - else - return FindMenuItem(nextItem, direction); -} - -/** - * Draw the button on screen - */ -void GuiGameBrowser::Draw() -{ - LOCK(this); - if(!this->IsVisible()) - return; - - bgGameImg->Draw(); - - int next = listOffset; - - for(int i=0; i= 0) - { - game[i]->Draw(); - next = this->FindMenuItem(next, 1); - } - else - break; - } - - if(scrollbaron == 1) { - scrollbarImg->Draw(); - arrowUpBtn->Draw(); - arrowDownBtn->Draw(); - scrollbarBoxBtn->Draw(); - } - this->UpdateEffects(); -} -void GuiGameBrowser::UpdateListEntries() -{ - int next = listOffset; - for(int i=0; i= 0) - { - if(game[i]->GetState() == STATE_DISABLED) - { - game[i]->SetVisible(true); - game[i]->SetState(STATE_DEFAULT); - } - gameTxt[i]->SetText(get_title(&gameList[next])); - gameTxt[i]->SetPosition(24, 0); - gameTxtOver[i]->SetText(get_title(&gameList[next])); - gameTxtOver[i]->SetPosition(24, 0); - - gameIndex[i] = next; - next = this->FindMenuItem(next, 1); - } - else - { - game[i]->SetVisible(false); - game[i]->SetState(STATE_DISABLED); - } - } -} - -void GuiGameBrowser::Update(GuiTrigger * t) -{ - LOCK(this); - if(state == STATE_DISABLED || !t) - return; - - int next, prev; - int old_listOffset = listOffset; - static int position2; - // scrolldelay affects how fast the list scrolls - // when the arrows are clicked - float scrolldelay = 3.5; - - if (scrollbaron == 1) { - // update the location of the scroll box based on the position in the option list - arrowUpBtn->Update(t); - arrowDownBtn->Update(t); - scrollbarBoxBtn->Update(t); - } - - next = listOffset; - - for(int i=0; i= 0) - next = this->FindMenuItem(next, 1); - - if(focus) - { - if(i != selectedItem && game[i]->GetState() == STATE_SELECTED) - game[i]->ResetState(); - else if(i == selectedItem && game[i]->GetState() == STATE_DEFAULT) - game[selectedItem]->SetState(STATE_SELECTED, t->chan); - } - - game[i]->Update(t); - - if(game[i]->GetState() == STATE_SELECTED) - { - selectedItem = i; - } - } - - // pad/joystick navigation - if(!focus) - return; // skip navigation - - if (scrollbaron == 1) - { - - if (t->Down() || - arrowDownBtn->GetState() == STATE_CLICKED || ////////////////////////////////////////////down - arrowDownBtn->GetState() == STATE_HELD) - { - - - next = this->FindMenuItem(gameIndex[selectedItem], 1); - - if(next >= 0) - { - if(selectedItem == pagesize-1) - { - // move list down by 1 - listOffset = this->FindMenuItem(listOffset, 1); -// UpdateEntries(); - } - else if(game[selectedItem+1]->IsVisible()) - { - game[selectedItem]->ResetState(); - game[selectedItem+1]->SetState(STATE_SELECTED, t->chan); - selectedItem++; - } - scrollbarBoxBtn->Draw(); - usleep(10000 * scrolldelay); - } - WPAD_ScanPads(); - u8 cnt, buttons = NULL; - /* Get pressed buttons */ - for (cnt = 0; cnt < 4; cnt++) - buttons |= WPAD_ButtonsHeld(cnt); - if (buttons == WPAD_BUTTON_A) - { - } - else - { - arrowDownBtn->ResetState(); - } - } - else if(t->Up() || - arrowUpBtn->GetState() == STATE_CLICKED || ////////////////////////////////////////////up - arrowUpBtn->GetState() == STATE_HELD) - { - prev = this->FindMenuItem(gameIndex[selectedItem], -1); - - if(prev >= 0) - { - if(selectedItem == 0) - { - // move list up by 1 - listOffset = prev; - } - else - { - game[selectedItem]->ResetState(); - game[selectedItem-1]->SetState(STATE_SELECTED, t->chan); - selectedItem--; - } - scrollbarBoxBtn->Draw(); - usleep(10000 * scrolldelay); - } - WPAD_ScanPads(); - u8 cnt, buttons = NULL; - /* Get pressed buttons */ - for (cnt = 0; cnt < 4; cnt++) - buttons |= WPAD_ButtonsHeld(cnt); - if (buttons == WPAD_BUTTON_A) - { - } - else - { - arrowUpBtn->ResetState(); - } - } - WPAD_ScanPads(); - u8 cnt, buttons = NULL;/////////////////////////////////////////////////////scroll by holding B and tilt wiimote - int position1 = 0; - - - position1 = t->wpad.ir.y; - - if (position2 == 0 && position1 > 0) - { - position2 = position1; - } - - for (cnt = 0; cnt < 4; cnt++) - buttons |= WPAD_ButtonsHeld(cnt); - - if (buttons == WPAD_BUTTON_B && position1 > 0) - { - scrollbarBoxBtn->ScrollIsOn(1); - if (position2 > position1) - { - - prev = this->FindMenuItem(gameIndex[selectedItem], -1); - - if(prev >= 0) - { - if(selectedItem == 0) - { - // move list up by 1 - listOffset = prev; -// UpdateEntries(); - } - else - { - game[selectedItem]->ResetState(); - game[selectedItem-1]->SetState(STATE_SELECTED, t->chan); - selectedItem--; - } - scrollbarBoxBtn->Draw(); - usleep(10000 * scrolldelay); - } - } - else if (position2 < position1) - { - next = this->FindMenuItem(gameIndex[selectedItem], 1); - - if(next >= 0) - { - if(selectedItem == pagesize-1) - { - // move list down by 1 - listOffset = this->FindMenuItem(listOffset, 1); -// UpdateEntries(); - } - else if(game[selectedItem+1]->IsVisible()) - { - game[selectedItem]->ResetState(); - game[selectedItem+1]->SetState(STATE_SELECTED, t->chan); - selectedItem++; - } - scrollbarBoxBtn->Draw(); - usleep(10000 * scrolldelay); - } - } - - } - else if (!buttons) - { - scrollbarBoxBtn->ScrollIsOn(0); - position2 = 0; - } - - if(scrollbarBoxBtn->GetState() == STATE_HELD &&/////////////////////allow dragging of scrollbar box - scrollbarBoxBtn->GetStateChan() == t->chan && - t->wpad.ir.valid && gameCnt > pagesize) - { - scrollbarBoxBtn->SetPosition(width/2-18+7,0); - //int position = t->wpad.ir.y - 50 - scrollbarBoxBtn->GetTop(); - int position = t->wpad.ir.y - 32 - scrollbarBoxBtn->GetTop(); - - //listOffset = (position * gameCnt)/237 - selectedItem; - listOffset = (position * gameCnt)/(25.2 * pagesize) - selectedItem; -// UpdateEntries(); - - if(listOffset <= 0) - { - listOffset = 0; -// UpdateEntries(); - selectedItem = 0; - } - else if(listOffset+pagesize >= gameCnt) - { - listOffset = gameCnt - pagesize; -// UpdateEntries(); - selectedItem = pagesize-1; - } - - } - //int positionbar = 237*(listOffset + selectedItem) / gameCnt; - int positionbar = (25.2 * pagesize)*(listOffset + selectedItem) / gameCnt; - - if(positionbar > (24 * pagesize))//if(positionbar > 216) - positionbar = (24 * pagesize);//positionbar = 216; - scrollbarBoxBtn->SetPosition(width/2-18+7, positionbar+8); - - - if(t->Right())/////////////////////////////////////////////////////skip pagesize # of games if right is pressed - { - if(listOffset < gameCnt && gameCnt > pagesize) - { - listOffset =listOffset+ pagesize; - if(listOffset+pagesize >= gameCnt) - listOffset = gameCnt-pagesize; -// UpdateEntries(); - } - } - else if(t->Left()) - { - if(listOffset > 0) - { - listOffset =listOffset- pagesize; - if(listOffset < 0) - listOffset = 0; -// UpdateEntries(); - } - } - - } - else - { - if(t->Down())/////////////////////////////////////////////////////if there isn't a scrollbar and down is pressed - { - next = this->FindMenuItem(gameIndex[selectedItem], 1); - - if(next >= 0) - { - if(selectedItem == pagesize-1) - { - // move list down by 1 - listOffset = this->FindMenuItem(listOffset, 1); - } - else if(game[selectedItem+1]->IsVisible()) - { - game[selectedItem]->ResetState(); - game[selectedItem+1]->SetState(STATE_SELECTED, t->chan); - selectedItem++; - } - } - } - else if(t->Up())///////////////////////////////////////////////////up - { - prev = this->FindMenuItem(gameIndex[selectedItem], -1); - - if(prev >= 0) - { - if(selectedItem == 0) - { - // move list up by 1 - listOffset = prev; - } - else - { - game[selectedItem]->ResetState(); - game[selectedItem-1]->SetState(STATE_SELECTED, t->chan); - selectedItem--; - } - } - } - } - if(old_listOffset != listOffset) - UpdateListEntries(); - - if(updateCB) - updateCB(this); -} - -void GuiGameBrowser::Reload(struct discHdr * l, int count) -{ - LOCK(this); - gameList = l; - gameCnt = count; - scrollbaron = (gameCnt > pagesize) ? 1 : 0; - selectedItem = 0; - listOffset = 0; - focus = 1; - UpdateListEntries(); - - for(int i=0; iResetState(); -} diff --git a/source/libwiigui/gui_gamebrowser.h b/source/libwiigui/gui_gamebrowser.h deleted file mode 100644 index a5741aaf..00000000 --- a/source/libwiigui/gui_gamebrowser.h +++ /dev/null @@ -1,67 +0,0 @@ -#ifndef _GUIGAMEBROWSER_H_ -#define _GUIGAMEBROWSER_H_ - -#include "gui.h" -#include "../disc.h" - -class GuiGameBrowser : public GuiElement -{ - public: - GuiGameBrowser(int w, int h, struct discHdr * l, int gameCnt, const char *themePath, const u8 *imagebg, int selected = 0, int offset = 0); - ~GuiGameBrowser(); - int FindMenuItem(int c, int d); - int GetClickedOption(); - int GetSelectedOption(); - void ResetState(); - void SetFocus(int f); - void Draw(); - void Update(GuiTrigger * t); - int GetOffset(); - void Reload(struct discHdr * l, int count); - //GuiText * optionVal[PAGESIZE]; - protected: - void UpdateListEntries(); - int selectedItem; - int listOffset; - int scrollbaron; - int pagesize; - int maxTextWidth; - - struct discHdr * gameList; - int gameCnt; - - int * gameIndex; - GuiButton ** game; - GuiText ** gameTxt; - GuiText ** gameTxtOver; - GuiImage ** gameBg; - - GuiButton * arrowUpBtn; - GuiButton * arrowDownBtn; - GuiButton * scrollbarBoxBtn; - - GuiImage * bgGameImg; - GuiImage * scrollbarImg; - GuiImage * arrowDownImg; - GuiImage * arrowDownOverImg; - GuiImage * arrowUpImg; - GuiImage * arrowUpOverImg; - GuiImage * scrollbarBoxImg; - GuiImage * scrollbarBoxOverImg; - - GuiImageData * bgGames; - GuiImageData * bgGamesEntry; - GuiImageData * scrollbar; - GuiImageData * arrowDown; - GuiImageData * arrowDownOver; - GuiImageData * arrowUp; - GuiImageData * arrowUpOver; - GuiImageData * scrollbarBox; - GuiImageData * scrollbarBoxOver; - - GuiSound * btnSoundOver; - GuiSound * btnSoundClick; - GuiTrigger * trigA; - GuiTrigger * trigHeldA; -}; -#endif diff --git a/source/libwiigui/gui_gamecarousel.cpp b/source/libwiigui/gui_gamecarousel.cpp deleted file mode 100644 index 9bf82c2f..00000000 --- a/source/libwiigui/gui_gamecarousel.cpp +++ /dev/null @@ -1,488 +0,0 @@ -/**************************************************************************** - * libwiigui - * - * gui_gamecarousel.cpp - * - * GUI class definitions - ***************************************************************************/ - -#include "gui.h" -#include "../wpad.h" - -#include -#include "gui_gamecarousel.h" -#include "../cfg.h" - -#include -#include -#include - -#define SCALE 0.8f -#define DEG_OFFSET 7 -#define RADIUS 780 -#define IN_SPEED 175 -#define SHIFT_SPEED 100 -#define SPEED_STEP 4 -#define PAGESIZE 9 -#define SAFETY 320 - -extern const int vol; - -/** - * Constructor for the GuiGameCarousel class. - */ -GuiGameCarousel::GuiGameCarousel(int w, int h, struct discHdr * l, int gameCnt, const char *themePath, const u8 *imagebg, int selected, int offset) -{ - width = w; - height = h; - this->gameCnt = (gameCnt < SAFETY) ? gameCnt : SAFETY; - gameList = l; - pagesize = (gameCnt < PAGESIZE) ? gameCnt : PAGESIZE; - listOffset = (offset == 0) ? this->FindMenuItem(-1, 1) : offset; - selectable = true; - selectedItem = selected - offset; - focus = 1; // allow focus - firstPic = 0; - clickedItem = -1; - speed = SHIFT_SPEED; - char imgPath[100]; - - trigA = new GuiTrigger; - trigA->SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A); - trigHeldA = new GuiTrigger; - trigL = new GuiTrigger; - trigL->SetButtonOnlyTrigger(-1, WPAD_BUTTON_LEFT | WPAD_CLASSIC_BUTTON_LEFT, PAD_BUTTON_LEFT); - trigR = new GuiTrigger; - trigR->SetButtonOnlyTrigger(-1, WPAD_BUTTON_RIGHT | WPAD_CLASSIC_BUTTON_RIGHT, PAD_BUTTON_RIGHT); - trigPlus = new GuiTrigger; - trigPlus->SetButtonOnlyTrigger(-1, WPAD_BUTTON_PLUS | WPAD_CLASSIC_BUTTON_PLUS, 0); - trigMinus = new GuiTrigger; - trigMinus->SetButtonOnlyTrigger(-1, WPAD_BUTTON_MINUS | WPAD_CLASSIC_BUTTON_MINUS, 0); - - btnSoundClick = new GuiSound(button_click2_pcm, button_click2_pcm_size, SOUND_PCM, vol); - btnSoundOver = new GuiSound(button_over_pcm, button_over_pcm_size, SOUND_PCM, vol); - - snprintf(imgPath, sizeof(imgPath), "%sstartgame_arrow_left.png", CFG.theme_path); - imgLeft = new GuiImageData(imgPath, startgame_arrow_left_png); - snprintf(imgPath, sizeof(imgPath), "%sstartgame_arrow_right.png", CFG.theme_path); - imgRight = new GuiImageData(imgPath, startgame_arrow_right_png); - - int btnHeight = (int) lround(sqrt(RADIUS*RADIUS - 90000)-RADIUS-50); - - btnLeftImg = new GuiImage(imgLeft); - btnLeft = new GuiButton(imgLeft->GetWidth(), imgLeft->GetHeight()); - btnLeft->SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE); - btnLeft->SetPosition(20, btnHeight); - btnLeft->SetParent(this); - btnLeft->SetImage(btnLeftImg); - btnLeft->SetSoundOver(btnSoundOver); - btnLeft->SetTrigger(trigA); - btnLeft->SetTrigger(trigL); - btnLeft->SetTrigger(trigMinus); - btnLeft->SetEffectGrow(); - - btnRightImg = new GuiImage(imgRight); - btnRight = new GuiButton(imgRight->GetWidth(), imgRight->GetHeight()); - btnRight->SetParent(this); - btnRight->SetAlignment(ALIGN_RIGHT, ALIGN_MIDDLE); - btnRight->SetPosition(-20, btnHeight); - btnRight->SetImage(btnRightImg); - btnRight->SetSoundOver(btnSoundOver); - btnRight->SetTrigger(trigA); - btnRight->SetTrigger(trigR); - btnRight->SetTrigger(trigPlus); - btnRight->SetEffectGrow(); - - gameIndex = new int[pagesize]; - game = new GuiButton * [pagesize]; - bob = new int[pagesize]; - coverImg = new GuiImage * [gameCnt]; - cover = new GuiImageData * [gameCnt]; - - for(int i=0; iid[0], header->id[1], header->id[2]); - snprintf (IDfull,sizeof(IDfull),"%c%c%c%c%c%c", header->id[0], header->id[1], header->id[2],header->id[3], header->id[4], header->id[5]); - - snprintf(imgPath, sizeof(imgPath), "%s%s.png", CFG.covers_path, IDfull); //Load full id image - cover[i] = new GuiImageData(imgPath,0); - if (!cover[i]->GetImage()) { - delete cover[i]; - snprintf(imgPath, sizeof(imgPath), "%s%s.png", CFG.covers_path, ID); //Load short id image - cover[i] = new GuiImageData(imgPath, 0); - if (!cover[i]->GetImage()) { - delete cover[i]; - snprintf(imgPath, sizeof(imgPath), "%snoimage.png", CFG.covers_path); //Load no image - cover[i] = new GuiImageData(imgPath, nocover_png); - } - } - - coverImg[i] = new GuiImage(cover[i]); - coverImg[i]->SetScale(SCALE); - coverImg[i]->SetWidescreen(CFG.widescreen); - } - - for(int i=0; i < pagesize; i++) { - game[i] = new GuiButton(122,244); - game[i]->SetParent(this); - game[i]->SetAlignment(ALIGN_CENTRE,ALIGN_MIDDLE); - game[i]->SetPosition(0,740); - game[i]->SetImage(coverImg[(listOffset+i) % gameCnt]); - game[i]->SetRumble(false); - game[i]->SetTrigger(trigA); - game[i]->SetSoundClick(btnSoundClick); - game[i]->SetClickable(true); - game[i]->SetEffect(EFFECT_GOROUND, IN_SPEED, 90-(pagesize-2*i-1)*DEG_OFFSET/2, RADIUS, 180, 1, 0, RADIUS); - } -} - - -/** - * Destructor for the GuiGameCarousel class. - */ -GuiGameCarousel::~GuiGameCarousel() -{ - - delete imgRight; - delete imgLeft; - delete btnLeftImg; - delete btnRightImg; - delete btnRight; - delete btnLeft; - - delete trigA; - delete btnSoundClick; - - for(int i=0; iResetState(); - - if(f == 1) - game[bob[selectedItem]]->SetState(STATE_SELECTED); -} - - -void GuiGameCarousel::ResetState() -{ - LOCK(this); - if(state != STATE_DISABLED) { - state = STATE_DEFAULT; - stateChan = -1; - } - - for(int i=0; iResetState(); - } -} - - -int GuiGameCarousel::GetOffset() -{ - return listOffset; -} - - -int GuiGameCarousel::GetClickedOption() -{ - int found = -1; - if (clickedItem>-1){ - game[bob[clickedItem]]->SetState(STATE_SELECTED); - found= (clickedItem+listOffset) % gameCnt; - clickedItem=-1; - } - return found; -} - - -int GuiGameCarousel::GetSelectedOption() -{ - int found = -1; - for(int i=0; iGetState() == STATE_SELECTED) { - game[bob[i]]->SetState(STATE_SELECTED); - found = (listOffset+i) % gameCnt; - break; - } - } - return found; -} - - -/**************************************************************************** - * FindMenuItem - * - * Help function to find the next visible menu item on the list - ***************************************************************************/ - -int GuiGameCarousel::FindMenuItem(int currentItem, int direction) -{ - int nextItem = currentItem + direction; - - if(nextItem < 0 || nextItem >= gameCnt) - if(gameCnt <= pagesize) - return -1; - else - nextItem = (nextItem < 0) ? nextItem + gameCnt : nextItem - gameCnt; - - if(strlen(get_title(&gameList[nextItem])) > 0) - return nextItem; - else - return FindMenuItem(nextItem, direction); -} - - -/** - * Draw the button on screen - */ -void GuiGameCarousel::Draw() -{ - LOCK(this); - if(!this->IsVisible()) - return; - - int next = listOffset; - - for(int i=0; i= 0) { - game[bob[i]]->Draw(); - next = this->FindMenuItem(next, 1); - } else break; - } - - if(gameCnt > pagesize) { - btnRight->Draw(); - btnLeft->Draw(); - } - - this->UpdateEffects(); -} - - -void GuiGameCarousel::Update(GuiTrigger * t) -{ - LOCK(this); - if(state == STATE_DISABLED || !t) - return; - - if(!(game[0]->GetEffect() || game[0]->GetEffectOnOver())) { - for(int i=0; iSetEffectGrow(); - } - } - - btnRight->Update(t); - btnLeft->Update(t); - - int next = listOffset; - - for(int i=0; i= 0) { - if(game[bob[i]]->GetState() == STATE_DISABLED) { - game[bob[i]]->SetVisible(true); - game[bob[i]]->SetState(STATE_DEFAULT); - } - gameIndex[i] = next; - next = this->FindMenuItem(next, 1); - } else { - game[bob[i]]->SetVisible(false); - game[bob[i]]->SetState(STATE_DISABLED); - } - - if(focus) { - if(i != selectedItem && game[bob[i]]->GetState() == STATE_SELECTED) - game[bob[i]]->ResetState(); - else if(i == selectedItem && game[bob[i]]->GetState() == STATE_DEFAULT); - game[bob[selectedItem]]->SetState(STATE_SELECTED, t->chan); - } - game[bob[i]]->Update(t); - - if(game[bob[i]]->GetState() == STATE_SELECTED) { - selectedItem = i; - } - if(game[bob[i]]->GetState() == STATE_CLICKED) { - clickedItem = i; - } - - } - - // navigation - if(!focus || gameCnt <= pagesize || (game[bob[0]]->GetEffect() && game[bob[pagesize-1]]->GetEffect())) - return; // skip navigation - - if (t->Left() || btnLeft->GetState() == STATE_CLICKED) { - WPAD_ScanPads(); - u16 buttons = 0; - for(int i=0; i<4; i++) - buttons |= WPAD_ButtonsHeld(i); - if(!((buttons & WPAD_BUTTON_A) || (buttons & WPAD_BUTTON_MINUS) || t->Left())) { - btnLeft->ResetState(); - speed = SHIFT_SPEED; - return; - } - - for(int i=0; iStopEffect(); - } - - listOffset = (listOffset+1 < gameCnt) ? listOffset+1 : 0; - firstPic = (firstPic+1 < pagesize) ? firstPic+1 : 0; - - for (int i=0; iSetImage(coverImg[(listOffset + pagesize-1) % gameCnt]); - game[bob[pagesize-1]]->SetPosition(0, RADIUS); - - - for (int i=0; iSetEffect(EFFECT_GOROUND, -speed, DEG_OFFSET, RADIUS, 270-(pagesize-2*i-3)*DEG_OFFSET/2, 1, 0, RADIUS); - - - } - speed+=SPEED_STEP; - } - - else if(t->Right() || btnRight->GetState() == STATE_CLICKED) { - WPAD_ScanPads(); - u16 buttons = 0; - for(int i=0; i<4; i++) - buttons |= WPAD_ButtonsHeld(i); - if(!((buttons & WPAD_BUTTON_A) || (buttons & WPAD_BUTTON_PLUS) || t->Right())) { - btnRight->ResetState(); - speed=SHIFT_SPEED; - return; - } - - for(int i=0; iStopEffect(); - } - listOffset = (listOffset-1 < 0) ? gameCnt-1 : listOffset-1; - firstPic = (firstPic-1 < 0) ? pagesize-1 : firstPic-1; - - for(int i=0; iSetImage(coverImg[listOffset]); - game[bob[0]]->SetPosition(0, RADIUS); - - for(int i=0; iSetEffect(EFFECT_GOROUND, speed, DEG_OFFSET, RADIUS, 270-(pagesize-2*i+1)*DEG_OFFSET/2, 1, 0, RADIUS); - } - speed+=SPEED_STEP; - } - - if(updateCB) - updateCB(this); -} - - -void GuiGameCarousel::Reload(struct discHdr * l, int count) -{ - for(int i=0; iFindMenuItem(-1, 1); - selectedItem = listOffset; - focus = 1; - firstPic = 0; - clickedItem = -1; - speed = SHIFT_SPEED; - - gameIndex = new int[pagesize]; - game = new GuiButton * [pagesize]; - bob = new int[pagesize]; - coverImg = new GuiImage * [gameCnt]; - cover = new GuiImageData * [gameCnt]; - - for(int i=0; iid[0], header->id[1], header->id[2]); - snprintf (IDfull,sizeof(IDfull),"%c%c%c%c%c%c", header->id[0], header->id[1], header->id[2],header->id[3], header->id[4], header->id[5]); - - snprintf(imgPath, sizeof(imgPath), "%s%s.png", CFG.covers_path, IDfull); //Load full id image - cover[i] = new GuiImageData(imgPath,0); - if (!cover[i]->GetImage()) { - delete cover[i]; - snprintf(imgPath, sizeof(imgPath), "%s%s.png", CFG.covers_path, ID); //Load short id image - cover[i] = new GuiImageData(imgPath, 0); - if (!cover[i]->GetImage()) { - delete cover[i]; - snprintf(imgPath, sizeof(imgPath), "%snoimage.png", CFG.covers_path); //Load no image - cover[i] = new GuiImageData(imgPath, nocover_png); - } - } - - coverImg[i] = new GuiImage(cover[i]); - coverImg[i]->SetScale(SCALE); - coverImg[i]->SetWidescreen(CFG.widescreen); - } - - for(int i=0; i < pagesize; i++) { - game[i] = new GuiButton(122,244); - game[i]->SetParent(this); - game[i]->SetAlignment(ALIGN_CENTRE,ALIGN_MIDDLE); - game[i]->SetPosition(0,740); - game[i]->SetImage(coverImg[i]); - game[i]->SetRumble(false); - game[i]->SetTrigger(trigA); - game[i]->SetSoundClick(btnSoundClick); - game[i]->SetClickable(true); - game[i]->SetEffect(EFFECT_GOROUND, IN_SPEED, 90-(pagesize-2*i-1)*DEG_OFFSET/2, RADIUS, 180, 1, 0, RADIUS); - } -} - diff --git a/source/libwiigui/gui_gamecarousel.h b/source/libwiigui/gui_gamecarousel.h deleted file mode 100644 index 0a6df18c..00000000 --- a/source/libwiigui/gui_gamecarousel.h +++ /dev/null @@ -1,61 +0,0 @@ -#ifndef _GUIGAMECAROUSEL_H_ -#define _GUIGAMECAROUSEL_H_ - -#include "gui.h" -#include "../disc.h" - -class GuiGameCarousel : public GuiElement -{ - public: - GuiGameCarousel(int w, int h, struct discHdr * l, int gameCnt, const char *themePath, const u8 *imagebg, int selected = 0, int offset = 0); - ~GuiGameCarousel(); - int FindMenuItem(int c, int d); - int GetClickedOption(); - int GetSelectedOption(); - void ResetState(); - void SetFocus(int f); - void Draw(); - void Update(GuiTrigger * t); - int GetOffset(); - void Reload(struct discHdr * l, int count); - //GuiText * optionVal[PAGESIZE]; - protected: - int selectedItem; - int listOffset; - int scrollbaron; - int pagesize; - int firstPic; - int speed; - int clickedItem; - - struct discHdr * gameList; - int gameCnt; - - int * gameIndex; - int * bob; - - GuiButton ** game; - GuiText ** gameTxt; - - GuiImage ** coverImg; - GuiImageData ** cover; - - GuiButton * btnRight; - GuiButton * btnLeft; - - GuiImage * btnLeftImg; - GuiImage * btnRightImg; - - GuiImageData * imgLeft; - GuiImageData * imgRight; - - GuiSound * btnSoundOver; - GuiSound * btnSoundClick; - GuiTrigger * trigA; - GuiTrigger * trigL; - GuiTrigger * trigR; - GuiTrigger * trigPlus; - GuiTrigger * trigMinus; - GuiTrigger * trigHeldA; -}; -#endif diff --git a/source/libwiigui/gui_gamegrid.cpp b/source/libwiigui/gui_gamegrid.cpp deleted file mode 100644 index 55c22125..00000000 --- a/source/libwiigui/gui_gamegrid.cpp +++ /dev/null @@ -1,512 +0,0 @@ -/**************************************************************************** - * libwiigui - * - * gui_gamebrowser.cpp - * - * GUI class definitions - ***************************************************************************/ - -#include "gui.h" -#include "../wpad.h" - -#include -#include "gui_gamegrid.h" -#include "../cfg.h" - -#include -#include - -#define GAMESELECTSIZE 30 -extern const int vol; - -/** - * Constructor for the GuiGameGrid class. - */ -GuiGameGrid::GuiGameGrid(int w, int h, struct discHdr * l, int gameCnt, const char *themePath, const u8 *imagebg, int selected, int offset) -{ - width = 640; - height = h; - this->gameCnt = gameCnt; - gameList = l; - pagesize = 8; - changed = 0; - scrollbaron = (gameCnt > pagesize) ? 1 : 0; - selectable = true; - listOffset = (offset == 0) ? this->FindMenuItem(-1, 1) : offset; - selectedItem = selected - offset; - focus = 1; // allow focus - char imgPath[100]; - - trigA = new GuiTrigger; - trigA->SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A); - trigHeldA = new GuiTrigger; - trigL = new GuiTrigger; - trigL->SetButtonOnlyTrigger(-1, WPAD_BUTTON_LEFT | WPAD_CLASSIC_BUTTON_LEFT, PAD_BUTTON_LEFT); - trigR = new GuiTrigger; - trigR->SetButtonOnlyTrigger(-1, WPAD_BUTTON_RIGHT | WPAD_CLASSIC_BUTTON_RIGHT, PAD_BUTTON_RIGHT); - trigPlus = new GuiTrigger; - trigPlus->SetButtonOnlyTrigger(-1, WPAD_BUTTON_PLUS | WPAD_CLASSIC_BUTTON_PLUS, 0); - trigMinus = new GuiTrigger; - trigMinus->SetButtonOnlyTrigger(-1, WPAD_BUTTON_MINUS | WPAD_CLASSIC_BUTTON_MINUS, 0); - - btnSoundClick = new GuiSound(button_click2_pcm, button_click2_pcm_size, SOUND_PCM, vol); - btnSoundOver = new GuiSound(button_over_pcm, button_over_pcm_size, SOUND_PCM, vol); - - snprintf(imgPath, sizeof(imgPath), "%sstartgame_arrow_left.png", CFG.theme_path); - imgLeft = new GuiImageData(imgPath, startgame_arrow_left_png); - snprintf(imgPath, sizeof(imgPath), "%sstartgame_arrow_right.png", CFG.theme_path); - imgRight = new GuiImageData(imgPath, startgame_arrow_right_png); - - btnLeftImg = new GuiImage(imgLeft); - btnLeft = new GuiButton(imgLeft->GetWidth(), imgLeft->GetHeight()); - btnLeft->SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE); - btnLeft->SetPosition(20, -30); - btnLeft->SetParent(this); - btnLeft->SetImage(btnLeftImg); - btnLeft->SetSoundOver(btnSoundOver); - btnLeft->SetSoundClick(btnSoundClick); - btnLeft->SetTrigger(trigA); - btnLeft->SetTrigger(trigL); - btnLeft->SetTrigger(trigMinus); - btnLeft->SetEffectGrow(); - - btnRightImg = new GuiImage(imgRight); - btnRight = new GuiButton(imgRight->GetWidth(), imgRight->GetHeight()); - btnRight->SetParent(this); - btnRight->SetAlignment(ALIGN_RIGHT, ALIGN_MIDDLE); - btnRight->SetPosition(-20, -30); - btnRight->SetImage(btnRightImg); - btnRight->SetSoundOver(btnSoundOver); - btnRight->SetSoundClick(btnSoundClick); - btnRight->SetTrigger(trigA); - btnRight->SetTrigger(trigR); - btnRight->SetTrigger(trigPlus); - btnRight->SetEffectGrow(); - - gameIndex = new int[pagesize]; - game = new GuiButton * [pagesize]; - coverImg = new GuiImage * [pagesize]; - cover = new GuiImageData * [pagesize]; - - char ID[4]; - char IDfull[7]; - - for(int i=0; i < pagesize; i++) - { - - struct discHdr *header = &gameList[i]; - snprintf (ID,sizeof(ID),"%c%c%c", header->id[0], header->id[1], header->id[2]); - snprintf (IDfull,sizeof(IDfull),"%c%c%c%c%c%c", header->id[0], header->id[1], header->id[2],header->id[3], header->id[4], header->id[5]); - - snprintf(imgPath, sizeof(imgPath), "%s%s.png", CFG.covers_path, IDfull); - cover[i] = new GuiImageData(imgPath,0); //load short id - if (!cover[i]->GetImage()) //if could not load the short id image - { - delete cover[i]; - cover[i] = NULL; - snprintf(imgPath, sizeof(imgPath), "%s%s.png", CFG.covers_path, ID); - cover[i] = new GuiImageData(imgPath, 0); //load full id image - if (!cover[i]->GetImage()) - { - delete cover[i]; - cover[i] = NULL; - snprintf(imgPath, sizeof(imgPath), "%snoimage.png", CFG.covers_path); - cover[i] = new GuiImageData(imgPath, nocover_png); //load no image - } - } - - coverImg[i] = new GuiImage(cover[i]); - coverImg[i]->SetWidescreen(CFG.widescreen); - coverImg[i]->SetScale(0.6); - - game[i] = new GuiButton(coverImg[i]->GetWidth()*.45,coverImg[i]->GetHeight()*.7); - game[i]->SetParent(this); - game[i]->SetAlignment(ALIGN_TOP,ALIGN_LEFT); - game[i]->SetImage(coverImg[i]); - coverImg[i]->SetParent(game[i]); - coverImg[i]->SetPosition(-10,-35); - if (i<4)game[i]->SetPosition(117+i*110,25); - if (i>3)game[i]->SetPosition(117+(i-4)*110,185); - game[i]->SetRumble(false); - game[i]->SetTrigger(trigA); - game[i]->SetSoundOver(btnSoundOver); - game[i]->SetSoundClick(btnSoundClick); - game[i]->SetEffectGrow(); - game[i]->SetVisible(true); - game[i]->SetClickable(true); - coverImg[i]->SetEffect(EFFECT_SLIDE_TOP | EFFECT_SLIDE_IN, 50); - if (((changed+pagesize)>gameCnt)&&(i>((gameCnt-changed)-1))) { - game[i]->SetVisible(false); - game[i]->SetClickable(false); - game[i]->RemoveSoundOver(); - } - } -} - -/** - * Destructor for the GuiGameGrid class. - */ -GuiGameGrid::~GuiGameGrid() -{ - - delete imgRight; - delete imgLeft; - delete btnLeftImg; - delete btnRightImg; - delete btnRight; - delete btnLeft; - - delete trigA; - delete btnSoundClick; - - for(int i=0; iResetState(); - - if(f == 1) - game[selectedItem]->SetState(STATE_SELECTED); -} - -void GuiGameGrid::ResetState() -{ - LOCK(this); - if(state != STATE_DISABLED) - { - state = STATE_DEFAULT; - stateChan = -1; - } - - for(int i=0; iResetState(); - } -} - -int GuiGameGrid::GetOffset() -{ - return changed; -} -int GuiGameGrid::GetClickedOption() -{ - int found = -1; - for(int i=0; iGetState() == STATE_CLICKED) - { - game[i]->SetState(STATE_SELECTED); - found = changed+i; - break; - } - } - return found; -} - -int GuiGameGrid::GetSelectedOption() -{ - int found = -1; - for(int i=0; iGetState() == STATE_SELECTED) - { - game[i]->SetState(STATE_SELECTED); - found = changed+i; - break; - } - } - return found; -} - -/**************************************************************************** - * FindMenuItem - * - * Help function to find the next visible menu item on the list - ***************************************************************************/ - -int GuiGameGrid::FindMenuItem(int currentItem, int direction) -{ - int nextItem = currentItem + direction; - - if(nextItem < 0 || nextItem >= gameCnt) - return -1; - - if(strlen(get_title(&gameList[nextItem])) > 0) - return nextItem; - else - return FindMenuItem(nextItem, direction); -} - -/** - * Draw the button on screen - */ -void GuiGameGrid::Draw() -{ - LOCK(this); - if(!this->IsVisible()) - return; - - int next = listOffset; - - for(int i=0; i= 0) - { - game[i]->Draw(); - next = this->FindMenuItem(next, 1); - } - else - break; - } - - btnRight->Draw(); - btnLeft->Draw(); - this->UpdateEffects(); -} - -void GuiGameGrid::Update(GuiTrigger * t) -{ - LOCK(this); - if(state == STATE_DISABLED || !t) - return; - - int next; //prev; - - btnRight->Update(t); - btnLeft->Update(t); - - next = listOffset; - - char ID[4]; - char IDfull[7]; - char imgPath[100]; - - for(int i=0; i= 0) - { - if(game[i]->GetState() == STATE_DISABLED) - { - game[i]->SetVisible(true); - game[i]->SetState(STATE_DEFAULT); - } - gameIndex[i] = next; - next = this->FindMenuItem(next, 1); - } - else - { - game[i]->SetVisible(false); - game[i]->SetState(STATE_DISABLED); - } - - if(focus) - { - if(i != selectedItem && game[i]->GetState() == STATE_SELECTED) - game[i]->ResetState(); - else if(i == selectedItem && game[i]->GetState() == STATE_DEFAULT) - game[selectedItem]->SetState(STATE_SELECTED, t->chan); - } - game[i]->Update(t); - - if(game[i]->GetState() == STATE_SELECTED) - { - selectedItem = i; - } - } - - // pad/joystick navigation - if(!focus) - return; // skip navigation - - if ((t->Right() || btnRight->GetState() == STATE_CLICKED)) { - - changed += pagesize; - if (changed>gameCnt-1) - changed=0; - - for(int i=0; iid[0], header->id[1], header->id[2]); - snprintf (IDfull,sizeof(IDfull),"%c%c%c%c%c%c", header->id[0], header->id[1], header->id[2],header->id[3], header->id[4], header->id[5]); - - snprintf(imgPath, sizeof(imgPath), "%s%s.png", CFG.covers_path, IDfull); - cover[i] = new GuiImageData(imgPath,0); //load short id - if (!cover[i]->GetImage()) //if could not load the short id image - { - delete cover[i]; - cover[i] = NULL; - snprintf(imgPath, sizeof(imgPath), "%s%s.png", CFG.covers_path, ID); - cover[i] = new GuiImageData(imgPath, 0); //load full id image - if (!cover[i]->GetImage()) - { - delete cover[i]; - cover[i] = NULL; - snprintf(imgPath, sizeof(imgPath), "%snoimage.png", CFG.covers_path); - cover[i] = new GuiImageData(imgPath, nocover_png); //load no image - } - } - - coverImg[i] = new GuiImage(cover[i]); - coverImg[i]->SetWidescreen(CFG.widescreen); - coverImg[i]->SetScale(0.6); - coverImg[i]->SetParent(game[i]); - coverImg[i]->SetPosition(-10,-35); - game[i]->SetImage(coverImg[i]); - game[i]->SetVisible(true); - game[i]->SetClickable(true); - game[i]->SetSoundOver(btnSoundOver); - coverImg[i]->SetEffect(EFFECT_SLIDE_RIGHT | EFFECT_SLIDE_IN, 65); - if (((changed+pagesize)>gameCnt)&&(i>((gameCnt-changed)-1))) { - game[i]->SetVisible(false); - game[i]->SetClickable(false); - game[i]->RemoveSoundOver(); - } - } - btnRight->ResetState(); - - } else if((t->Left() || btnLeft->GetState() == STATE_CLICKED)){ - - changed -= pagesize; - if (changed < 0) - changed=gameCnt-(gameCnt%8); - - for(int i=0; iSetEffect(EFFECT_SLIDE_LEFT | EFFECT_SLIDE_OUT, 65); - - if(coverImg[i]) { - delete coverImg[i]; - coverImg[i] = NULL; - } - if(cover[i]) { - delete cover[i]; - cover[i] = NULL; - } - - struct discHdr *header = &gameList[i+changed]; - snprintf (ID,sizeof(ID),"%c%c%c", header->id[0], header->id[1], header->id[2]); - snprintf (IDfull,sizeof(IDfull),"%c%c%c%c%c%c", header->id[0], header->id[1], header->id[2],header->id[3], header->id[4], header->id[5]); - - snprintf(imgPath, sizeof(imgPath), "%s%s.png", CFG.covers_path, IDfull); - cover[i] = new GuiImageData(imgPath,0); //load short id - if (!cover[i]->GetImage()) //if could not load the short id image - { - delete cover[i]; - cover[i] = NULL; - snprintf(imgPath, sizeof(imgPath), "%s%s.png", CFG.covers_path, ID); - cover[i] = new GuiImageData(imgPath, 0); //load full id image - if (!cover[i]->GetImage()) - { - delete cover[i]; - cover[i] = NULL; - snprintf(imgPath, sizeof(imgPath), "%snoimage.png", CFG.covers_path); - cover[i] = new GuiImageData(imgPath, nocover_png); //load no image - } - } - - coverImg[i] = new GuiImage(cover[i]); - coverImg[i]->SetWidescreen(CFG.widescreen); - coverImg[i]->SetScale(0.6); - coverImg[i]->SetParent(game[i]); - coverImg[i]->SetPosition(-10,-35); - game[i]->ResetState(); - game[i]->SetVisible(true); - game[i]->SetImage(coverImg[i]); - game[i]->SetSoundOver(btnSoundOver); - game[i]->SetClickable(true); - coverImg[i]->SetEffect(EFFECT_SLIDE_LEFT | EFFECT_SLIDE_IN, 65); - if (((changed+pagesize)>gameCnt)&&(i>((gameCnt-changed)-1))) { - game[i]->SetVisible(false); - game[i]->SetClickable(false); - game[i]->RemoveSoundOver(); - } - } - btnLeft->ResetState(); - } - - if(updateCB) - updateCB(this); -} - -void GuiGameGrid::Reload(struct discHdr * l, int count) -{ - LOCK(this); - gameList = l; - gameCnt = count; - changed=0; - scrollbaron = (gameCnt > pagesize) ? 1 : 0; - selectedItem = 0; - listOffset = 0; - char ID[4]; - char IDfull[7]; - char imgPath[100]; - - for(int i=0; iid[0], header->id[1], header->id[2]); - snprintf (IDfull,sizeof(IDfull),"%c%c%c%c%c%c", header->id[0], header->id[1], header->id[2],header->id[3], header->id[4], header->id[5]); - - snprintf(imgPath, sizeof(imgPath), "%s%s.png", CFG.covers_path, IDfull); - cover[i] = new GuiImageData(imgPath,0); //load short id - if (!cover[i]->GetImage()) //if could not load the short id image - { - delete cover[i]; - cover[i] = NULL; - snprintf(imgPath, sizeof(imgPath), "%s%s.png", CFG.covers_path, ID); - cover[i] = new GuiImageData(imgPath, 0); //load full id image - if (!cover[i]->GetImage()) - { - delete cover[i]; - cover[i] = NULL; - snprintf(imgPath, sizeof(imgPath), "%snoimage.png", CFG.covers_path); - cover[i] = new GuiImageData(imgPath, nocover_png); //load no image - } - } - - coverImg[i] = new GuiImage(cover[i]); - coverImg[i]->SetWidescreen(CFG.widescreen); - coverImg[i]->SetScale(0.6); - coverImg[i]->SetParent(game[i]); - coverImg[i]->SetPosition(-10,-35); - game[i]->ResetState(); - game[i]->SetVisible(true); - game[i]->SetImage(coverImg[i]); - game[i]->SetClickable(true); - coverImg[i]->SetEffect(EFFECT_SLIDE_TOP | EFFECT_SLIDE_IN, 50); - if (((changed+pagesize)>gameCnt)&&(i>((gameCnt-changed)-1))) { - game[i]->SetVisible(false); - game[i]->SetClickable(false); - } - } -} diff --git a/source/libwiigui/gui_gamegrid.h b/source/libwiigui/gui_gamegrid.h deleted file mode 100644 index 7f0c337a..00000000 --- a/source/libwiigui/gui_gamegrid.h +++ /dev/null @@ -1,57 +0,0 @@ -#ifndef _GUIGAMEGRID_H_ -#define _GUIGAMEGRID_H_ - -#include "gui.h" -#include "../disc.h" - -class GuiGameGrid : public GuiElement -{ - public: - GuiGameGrid(int w, int h, struct discHdr * l, int gameCnt, const char *themePath, const u8 *imagebg, int selected = 0, int offset = 0); - ~GuiGameGrid(); - int FindMenuItem(int c, int d); - int GetClickedOption(); - int GetSelectedOption(); - void ResetState(); - void SetFocus(int f); - void Draw(); - void Update(GuiTrigger * t); - int GetOffset(); - void Reload(struct discHdr * l, int count); - //GuiText * optionVal[PAGESIZE]; - protected: - int selectedItem; - int listOffset; - int scrollbaron; - int pagesize; - int changed; - - struct discHdr * gameList; - int gameCnt; - - int * gameIndex; - GuiButton ** game; - GuiText ** gameTxt; - - GuiImage ** coverImg; - GuiImageData ** cover; - - GuiButton * btnRight; - GuiButton * btnLeft; - - GuiImage * btnLeftImg; - GuiImage * btnRightImg; - - GuiImageData * imgLeft; - GuiImageData * imgRight; - - GuiSound * btnSoundOver; - GuiSound * btnSoundClick; - GuiTrigger * trigA; - GuiTrigger * trigL; - GuiTrigger * trigR; - GuiTrigger * trigPlus; - GuiTrigger * trigMinus; - GuiTrigger * trigHeldA; -}; -#endif diff --git a/source/libwiigui/gui_image.cpp b/source/libwiigui/gui_image.cpp deleted file mode 100644 index 1faf7a45..00000000 --- a/source/libwiigui/gui_image.cpp +++ /dev/null @@ -1,261 +0,0 @@ -/**************************************************************************** - * libwiigui - * - * Tantric 2009 - * - * gui_image.cpp - * - * GUI class definitions - ***************************************************************************/ - -#include "gui.h" -/** - * Constructor for the GuiImage class. - */ -GuiImage::GuiImage() -{ - image = NULL; - width = 0; - height = 0; - imageangle = 0; - tile = -1; - stripe = 0; - widescreen = 0; - imgType = IMAGE_DATA; -} - -GuiImage::GuiImage(GuiImageData * img) -{ - image = img->GetImage(); - width = img->GetWidth(); - height = img->GetHeight(); - imageangle = 0; - tile = -1; - stripe = 0; - widescreen = 0; - imgType = IMAGE_DATA; -} - -GuiImage::GuiImage(u8 * img, int w, int h) -{ - image = img; - width = w; - height = h; - imageangle = 0; - tile = -1; - stripe = 0; - widescreen = 0; - imgType = IMAGE_TEXTURE; -} - -GuiImage::GuiImage(int w, int h, GXColor c) -{ - image = (u8 *)memalign (32, w * h * 4); - width = w; - height = h; - imageangle = 0; - tile = -1; - stripe = 0; - widescreen = 0; - imgType = IMAGE_COLOR; - - if(!image) - return; - - int x, y; - - for(y=0; y < h; y++) - { - for(x=0; x < w; x++) - { - this->SetPixel(x, y, c); - } - } - int len = w*h*4; - if(len%32) len += (32-len%32); - DCFlushRange(image, len); -} - -/** - * Destructor for the GuiImage class. - */ -GuiImage::~GuiImage() -{ - if(imgType == IMAGE_COLOR && image) - free(image); -} - -u8 * GuiImage::GetImage() -{ - return image; -} - -void GuiImage::SetImage(GuiImageData * img) -{ - LOCK(this); - if(imgType == IMAGE_COLOR && image) - free(image); - image = img->GetImage(); - width = img->GetWidth(); - height = img->GetHeight(); - imgType = IMAGE_DATA; -} - -void GuiImage::SetImage(u8 * img, int w, int h) -{ - LOCK(this); - if(imgType == IMAGE_COLOR && image) - free(image); - image = img; - width = w; - height = h; - imgType = IMAGE_TEXTURE; -} - -void GuiImage::SetAngle(float a) -{ - LOCK(this); - imageangle = a; -} -float GuiImage::GetAngle() -{ - return imageangle; -} - -void GuiImage::SetTile(int t) -{ - LOCK(this); - tile = t; -} - -void GuiImage::SetWidescreen(bool w) -{ - LOCK(this); - widescreen = w; -} - -GXColor GuiImage::GetPixel(int x, int y) -{ - if(!image || this->GetWidth() <= 0 || x < 0 || y < 0) - return (GXColor){0, 0, 0, 0}; - - u32 offset = (((y >> 2)<<4)*this->GetWidth()) + ((x >> 2)<<6) + (((y%4 << 2) + x%4 ) << 1); - GXColor color; - color.a = *(image+offset); - color.r = *(image+offset+1); - color.g = *(image+offset+32); - color.b = *(image+offset+33); - return color; -} - -void GuiImage::SetPixel(int x, int y, GXColor color) -{ - LOCK(this); - if(!image || this->GetWidth() <= 0 || x < 0 || y < 0) - return; - - u32 offset = (((y >> 2)<<4)*this->GetWidth()) + ((x >> 2)<<6) + (((y%4 << 2) + x%4 ) << 1); - *(image+offset) = color.a; - *(image+offset+1) = color.r; - *(image+offset+32) = color.g; - *(image+offset+33) = color.b; -} - -void GuiImage::SetStripe(int s) -{ - LOCK(this); - stripe = s; -} - -void GuiImage::ColorStripe(int shift) -{ - LOCK(this); - int x, y; - GXColor color; - int alt = 0; - - for(y=0; y < this->GetHeight(); y++) - { - if(y % 3 == 0) - alt ^= 1; - - for(x=0; x < this->GetWidth(); x++) - { - color = GetPixel(x, y); - - if(alt) - { - if(color.r < 255-shift) - color.r += shift; - else - color.r = 255; - if(color.g < 255-shift) - color.g += shift; - else - color.g = 255; - if(color.b < 255-shift) - color.b += shift; - else - color.b = 255; - - color.a = 255; - } - else - { - if(color.r > shift) - color.r -= shift; - else - color.r = 0; - if(color.g > shift) - color.g -= shift; - else - color.g = 0; - if(color.b > shift) - color.b -= shift; - else - color.b = 0; - - color.a = 255; - } - SetPixel(x, y, color); - } - } -} - -/** - * Draw the button on screen - */ -void GuiImage::Draw() -{ - LOCK(this); - if(!image || !this->IsVisible() || tile == 0) - return; - - float currScale = this->GetScale(); - int currLeft = this->GetLeft(); - - float currAngleDyn = this->GetAngleDyn(); - - if(currAngleDyn) - imageangle = currAngleDyn; - - if(tile > 0) - { - for(int i=0; iGetTop(), 0, width, height, image, imageangle, widescreen ? currScale*0.80 : currScale, currScale, this->GetAlpha()); - } - else - { - // temporary (maybe), used to correct offset for scaled images - if(scale != 1) - currLeft = currLeft - width/2 + (width*scale)/2; - - Menu_DrawImg(currLeft, this->GetTop(), 0, width, height, image, imageangle, widescreen ? currScale*0.80 : currScale, currScale, this->GetAlpha()); - } - - if(stripe > 0) - for(int y=0; y < this->GetHeight(); y+=6) - Menu_DrawRectangle(currLeft,this->GetTop()+y,this->GetWidth(),3,(GXColor){0, 0, 0, stripe},1); - - this->UpdateEffects(); -} diff --git a/source/libwiigui/gui_imagedata.cpp b/source/libwiigui/gui_imagedata.cpp deleted file mode 100644 index 21b5f2e3..00000000 --- a/source/libwiigui/gui_imagedata.cpp +++ /dev/null @@ -1,171 +0,0 @@ -/**************************************************************************** - * libwiigui - * - * Tantric 2009 - * - * gui_imagedata.cpp - * - * GUI class definitions - ***************************************************************************/ - -#include "gui.h" - -/** - * Constructor for the GuiImageData class. - */ -GuiImageData::GuiImageData(const u8 * img) -{ - data = NULL; - width = 0; - height = 0; - - if(img) - { - PNGUPROP imgProp; - IMGCTX ctx = PNGU_SelectImageFromBuffer(img); - - if(!ctx) - return; - - int res = PNGU_GetImageProperties(ctx, &imgProp); - - if(res == PNGU_OK) - { - int len = imgProp.imgWidth * imgProp.imgHeight * 4; - if(len%32) len += (32-len%32); - data = (u8 *)memalign (32, len); - - if(data) - { - res = PNGU_DecodeTo4x4RGBA8 (ctx, imgProp.imgWidth, imgProp.imgHeight, data, 255); - - if(res == PNGU_OK) - { - width = imgProp.imgWidth; - height = imgProp.imgHeight; - DCFlushRange(data, len); - } - else - { - free(data); - data = NULL; - } - } - } - PNGU_ReleaseImageContext (ctx); - } -} - -/** - * Constructor for the GuiImageData class. - */ -GuiImageData::GuiImageData(const char * imgPath, const u8 * buffer) -{ - data = NULL; - width = 0; - height = 0; - - if(imgPath) - { - PNGUPROP imgProp; - IMGCTX ctx = PNGU_SelectImageFromDevice(imgPath); - - if(ctx) - { - int res = PNGU_GetImageProperties(ctx, &imgProp); - - if(res == PNGU_OK) - { - int len = imgProp.imgWidth * imgProp.imgHeight * 4; - if(len%32) len += (32-len%32); - data = (u8 *)memalign (32, len); - - if(data) - { - res = PNGU_DecodeTo4x4RGBA8 (ctx, imgProp.imgWidth, imgProp.imgHeight, data, 255); - - if(res == PNGU_OK) - { - width = imgProp.imgWidth; - height = imgProp.imgHeight; - DCFlushRange(data, len); - } - else - { - free(data); - data = NULL; - } - } - } - PNGU_ReleaseImageContext (ctx); - } - } - - if (!data) //use buffer data instead - { - width = 0; - height = 0; - if(buffer) - { - PNGUPROP imgProp; - IMGCTX ctx = PNGU_SelectImageFromBuffer(buffer); - - if(!ctx) - return; - - int res = PNGU_GetImageProperties(ctx, &imgProp); - - if(res == PNGU_OK) - { - int len = imgProp.imgWidth * imgProp.imgHeight * 4; - if(len%32) len += (32-len%32); - data = (u8 *)memalign (32, len); - - if(data) - { - res = PNGU_DecodeTo4x4RGBA8 (ctx, imgProp.imgWidth, imgProp.imgHeight, data, 255); - - if(res == PNGU_OK) - { - width = imgProp.imgWidth; - height = imgProp.imgHeight; - DCFlushRange(data, len); - } - else - { - free(data); - data = NULL; - } - } - } - PNGU_ReleaseImageContext (ctx); - } - } -} - -/** - * Destructor for the GuiImageData class. - */ -GuiImageData::~GuiImageData() -{ - if(data) - { - free(data); - data = NULL; - } -} - -u8 * GuiImageData::GetImage() -{ - return data; -} - -int GuiImageData::GetWidth() -{ - return width; -} - -int GuiImageData::GetHeight() -{ - return height; -} diff --git a/source/libwiigui/gui_keyboard.cpp b/source/libwiigui/gui_keyboard.cpp deleted file mode 100644 index effb8810..00000000 --- a/source/libwiigui/gui_keyboard.cpp +++ /dev/null @@ -1,626 +0,0 @@ -/**************************************************************************** - * libwiigui - * - * Tantric 2009 - * - * gui_keyboard.cpp - * - * GUI class definitions - ***************************************************************************/ - -#include "gui.h" -#include -#include -/** - * Constructor for the GuiKeyboard class. - */ -extern const int vol; -unsigned int m; -//const Key thekeys; -GuiKeyboard::GuiKeyboard(char * t, u32 max, int min, int lang) -{ - width = 540; - height = 400; - shift = 0; - caps = 0; - alt = 0; - alt2 = 0; - m = min; - int mode = lang; - selectable = true; - focus = 0; // allow focus - alignmentHor = ALIGN_CENTRE; - alignmentVert = ALIGN_MIDDLE; - strncpy(kbtextstr, t, max); - kbtextstr[max] = 0; - kbtextmaxlen = max; - - //QWERTY// - if (mode == 0){ - Key thekeys[4][11] = { - { - {'1','!'}, - {'2','@'}, - {'3','#'}, - {'4','$'}, - {'5','%'}, - {'6','^'}, - {'7','&'}, - {'8','*'}, - {'9','('}, - {'0',')'}, - {'\0','\0'} - }, - { - {'q','Q'}, - {'w','W'}, - {'e','E'}, - {'r','R'}, - {'t','T'}, - {'y','Y'}, - {'u','U'}, - {'i','I'}, - {'o','O'}, - {'p','P'}, - {'-','_'} - }, - { - {'a','A'}, - {'s','S'}, - {'d','D'}, - {'f','F'}, - {'g','G'}, - {'h','H'}, - {'j','J'}, - {'k','K'}, - {'l','L'}, - {':',';'}, - {'\'','"'} - }, - - { - {'z','Z'}, - {'x','X'}, - {'c','C'}, - {'v','V'}, - {'b','B'}, - {'n','N'}, - {'m','M'}, - {',','<'}, - {'.','>'}, - {'/','?'}, - {'\0','\0'} - } - }; - - memcpy(keys, thekeys, sizeof(thekeys));} - //DVORAK// - if (mode == 1){ - Key thekeys[4][11] = { - { - {'1','!','\0'}, - {'2','@','\0'}, - {'3','#','\0'}, - {'4','$','\0'}, - {'5','%','\0'}, - {'6','^','\0'}, - {'7','&','\0'}, - {'8','*','\0'}, - {'9','(','\0'}, - {'0',')','\0'}, - {'\0','\0','\0'} - }, - { - {'\'','"','\0'}, - {',','<','\0'}, - {'.','>','\0'}, - {'p','P','\0'}, - {'y','Y','\0'}, - {'f','F','\0'}, - {'g','G','\0'}, - {'c','C','\0'}, - {'r','R','\0'}, - {'l','L','\0'}, - {'/','?','\0'} - }, - { - {'a','A','m'}, - {'o','O','m'}, - {'e','E','m'}, - {'u','U','m'}, - {'i','I','m'}, - {'d','D','m'}, - {'h','H','m'}, - {'t','T','m'}, - {'n','N','m'}, - {'s','S','m'}, - {'-','_','m'} - }, - - { - {';',':','\0'}, - {'q','Q','\0'}, - {'j','J','\0'}, - {'k','K','\0'}, - {'x','X','\0'}, - {'b','B','\0'}, - {'m','M','\0'}, - {'w','W','\0'}, - {'v','V','\0'}, - {'z','Z','\0'}, - {'\0','\0','\0'} - } - }; - memcpy(keys, thekeys, sizeof(thekeys));} - //QWETRZ// - if (mode == 2){ - Key thekeys[4][11] = { - { - {'1','!','^',''}, - {'2','"','',''}, - {'3','#','',''}, - {'4','$','',''}, - {'5','%','',''}, - {'6','&','',''}, - {'7','/','',''}, - {'8','(','[',''}, - {'9',')',']',''}, - {'0','=','',''}, - {'','?','\'',''} - }, - { - {'q','Q','@',''}, - {'w','W','\0',''}, - {'e','E','',''}, - {'r','R','\0',''}, - {'t','T','\0',''}, - {'z','Z','\0',''}, - {'u','U','\0',''}, - {'i','I','\0',''}, - {'o','O','\0',''}, - {'p','P','\0',''}, - {'','','\0',''} - }, - { - {'a','A','\0',''}, - {'s','S','\0',''}, - {'d','D','\0',''}, - {'f','F','\0',''}, - {'g','G','\0',''}, - {'h','H','\0',''}, - {'j','J','\0',''}, - {'k','K','\0',''}, - {'l','L','\0',''}, - {'','','\0',''}, - {'','','\0',''} - }, - { - {'<','>','|',''}, - {'y','Y','\0',''}, - {'x','X','\0',''}, - {'c','C','',''}, - {'v','V','',''}, - {'b','B','\0',''}, - {'n','N','\0',''}, - {'m','M','',''}, - {',',';','\0',''}, - {'.',':','\0','\0'}, - {'-','_','\0','\0'} - } - }; - memcpy(keys, thekeys, sizeof(thekeys));} - - //AZERTY// - if (mode == 3){ - Key thekeys[4][11] = { - { - {'1','&','',''}, - {'2','~','',''}, - {'3','"','#',''}, - {'4','`','',''}, - {'5','(','[',''}, - {'6','-','|',''}, - {'7','','',''}, - {'8','_','\'',''}, - {'9','+','^',''}, - {'0','=','@',''}, - {'',')',']',''} - }, - { - {'a','A','',''}, - {'z','Z','',''}, - {'e','E','',''}, - {'r','R','',''}, - {'t','T','',''}, - {'y','Y','',''}, - {'u','U','',''}, - {'i','I','',''}, - {'o','O','',''}, - {'p','P','',''}, - {'$','','',''} - }, - { - {'q','Q','',''}, - {'s','S','',''}, - {'d','D','\0',''}, - {'f','F','',''}, - {'g','G','\0',''}, - {'h','H','\0',''}, - {'j','J','\0',''}, - {'k','K','\0',''}, - {'l','L','\0',''}, - {'m','M','\0',''}, - {'*','%','\0',''} - }, - { - {'<','>','\0',''}, - {'w','W','\0',''}, - {'x','X','\0',''}, - {'c','C','',''}, - {'v','V','',''}, - {'b','B','',''}, - {'n','N','\0',''}, - {',','?','\0',''}, - {';','.','\0',''}, - {':','/','\0',''}, - {'!','','\0',''} - } - }; - memcpy(keys, thekeys, sizeof(thekeys));} - - keyTextbox = new GuiImageData(keyboard_textbox_png); - keyTextboxImg = new GuiImage(keyTextbox); - keyTextboxImg->SetAlignment(ALIGN_CENTRE, ALIGN_TOP); - keyTextboxImg->SetPosition(0, 40);//(0,0); - this->Append(keyTextboxImg); - - kbText = new GuiText(kbtextstr, 20, (GXColor){0, 0, 0, 0xff}); - kbText->SetAlignment(ALIGN_CENTRE, ALIGN_TOP); - kbText->SetPosition(0, 53);//(0, 13); - this->Append(kbText); - - key = new GuiImageData(keyboard_key_png); - keyOver = new GuiImageData(keyboard_key_over_png); - keyMedium = new GuiImageData(keyboard_mediumkey_over_png); - keyMediumOver = new GuiImageData(keyboard_mediumkey_over_png); - keyLarge = new GuiImageData(keyboard_largekey_over_png); - keyLargeOver = new GuiImageData(keyboard_largekey_over_png); - - keySoundOver = new GuiSound(button_over_pcm, button_over_pcm_size, SOUND_PCM, vol); - keySoundClick = new GuiSound(button_click_pcm, button_click_pcm_size, SOUND_PCM, vol); - trigA = new GuiTrigger; - trigA->SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A); - trigB = new GuiTrigger; - trigB->SetButtonOnlyTrigger(-1, WPAD_BUTTON_B | WPAD_CLASSIC_BUTTON_B, PAD_BUTTON_B); - - int eurocheck = 0; - if(mode > 1) { - eurocheck = -20; - } - - keyBackImg = new GuiImage(keyMedium); - keyBackOverImg = new GuiImage(keyMediumOver); - keyBackText = new GuiText("Back", 20, (GXColor){0, 0, 0, 0xff}); - //GuiButton(GuiImage* img, GuiImage* imgOver, int hor, int vert, int x, int y, GuiTrigger* trig, GuiSound* sndOver, GuiSound* sndClick, u8 grow); - - //keyBack = new GuiButton(keyMedium->GetWidth(), keyMedium->GetHeight()); - keyBack = new GuiButton(keyBackImg, keyBackOverImg, 0, 3, 11*42+40+eurocheck, 0*42+120, trigA, keySoundOver, keySoundClick,1); - //keyBack->SetImage(keyBackImg); - //keyBack->SetImageOver(keyBackOverImg); - keyBack->SetLabel(keyBackText); - //keyBack->SetSoundOver(keySoundOver); - //keyBack->SetSoundClick(keySoundClick); - //keyBack->SetTrigger(trigA); - keyBack->SetTrigger(trigB); - if (mode > 1){ - keyBack->SetPosition(11*42+40+eurocheck, 0*42+120);} - else{ - keyBack->SetPosition(10*42+40+eurocheck, 0*42+120);}//(10*42+40, 0*42+80); - //keyBack->SetEffectGrow(); - this->Append(keyBack); - - keyClearImg = new GuiImage(keyMedium); - keyClearOverImg = new GuiImage(keyMediumOver); - keyClearText = new GuiText("clear", 20, (GXColor){0, 0, 0, 0xff}); - keyClear = new GuiButton(keyClearImg, keyClearOverImg, 0, 3, (10*42+40)+eurocheck, 4*42+120, trigA, keySoundOver, keySoundClick,1); - //keyClear = new GuiButton(keyMedium->GetWidth(), keyMedium->GetHeight()); - //keyClear->SetImage(keyClearImg); - //keyClear->SetImageOver(keyClearOverImg); - keyClear->SetLabel(keyClearText); - //keyClear->SetSoundOver(keySoundOver); - //keyClear->SetSoundClick(keySoundClick); - //keyClear->SetTrigger(trigA); - //keyClear->SetPosition((10*42+40)+eurocheck, 4*42+120);//(10*42+40, 0*42+80); - //keyClear->SetEffectGrow(); - this->Append(keyClear); - - keyAltImg = new GuiImage(keyMedium); - keyAltOverImg = new GuiImage(keyMediumOver); - keyAltText = new GuiText("Alt Gr", 20, (GXColor){0, 0, 0, 0xff}); - keyAlt = new GuiButton(keyAltImg, keyAltOverImg, 0, 3, 84+eurocheck, 4*42+120, trigA, keySoundOver, keySoundClick,1); - //keyAlt = new GuiButton(keyMedium->GetWidth(), keyMedium->GetHeight()); - //keyAlt->SetImage(keyAltImg); - //keyAlt->SetImageOver(keyAltOverImg); - keyAlt->SetLabel(keyAltText); - //keyAlt->SetSoundOver(keySoundOver); - //keyAlt->SetSoundClick(keySoundClick); - //keyAlt->SetTrigger(trigA); - //keyAlt->SetPosition(84+eurocheck, 4*42+120);//(10*42+40, 4*42+120); - //keyAlt->SetEffectGrow(); - if (mode > 1){this->Append(keyAlt);} - - keyAlt2Img = new GuiImage(keyMedium); - keyAlt2OverImg = new GuiImage(keyMediumOver); - keyAlt2Text = new GuiText("Accent", 20, (GXColor){0, 0, 0, 0xff}); - keyAlt2 = new GuiButton(keyAlt2Img, keyAlt2OverImg, 0, 3, (8*42+40)+eurocheck, 4*42+120, trigA, keySoundOver, keySoundClick,1); - //keyAlt2 = new GuiButton(keyMedium->GetWidth(), keyMedium->GetHeight()); - //keyAlt2->SetImage(keyAlt2Img); - //keyAlt2->SetImageOver(keyAlt2OverImg); - keyAlt2->SetLabel(keyAlt2Text); - //keyAlt2->SetSoundOver(keySoundOver); - //keyAlt2->SetSoundClick(keySoundClick); - //keyAlt2->SetTrigger(trigA); - //keyAlt2->SetPosition((8*42+40)+eurocheck, 4*42+120);//(10*42+40, 4*42+120); - //keyAlt2->SetEffectGrow(); - if (mode > 1){this->Append(keyAlt2);} - - keyCapsImg = new GuiImage(keyMedium); - keyCapsOverImg = new GuiImage(keyMediumOver); - keyCapsText = new GuiText("Caps", 20, (GXColor){0, 0, 0, 0xff}); - keyCaps = new GuiButton(keyCapsImg, keyCapsOverImg, 0, 3, 0+eurocheck, 2*42+120, trigA, keySoundOver, keySoundClick,1); - //keyCaps = new GuiButton(keyMedium->GetWidth(), keyMedium->GetHeight()); - //keyCaps->SetImage(keyCapsImg); - //keyCaps->SetImageOver(keyCapsOverImg); - keyCaps->SetLabel(keyCapsText); - //keyCaps->SetSoundOver(keySoundOver); - //keyCaps->SetSoundClick(keySoundClick); - //keyCaps->SetTrigger(trigA); - //keyCaps->SetPosition(0+eurocheck, 2*42+120);//(0, 2*42+80); - //keyCaps->SetEffectGrow(); - this->Append(keyCaps); - - keyShiftImg = new GuiImage(keyMedium); - keyShiftOverImg = new GuiImage(keyMediumOver); - keyShiftText = new GuiText("Shift", 20, (GXColor){0, 0, 0, 0xff}); - keyShift = new GuiButton(keyShiftImg, keyShiftOverImg, 0, 3, 21+eurocheck, 3*42+120, trigA, keySoundOver, keySoundClick,1); - //keyShift = new GuiButton(keyMedium->GetWidth(), keyMedium->GetHeight()); - //keyShift->SetImage(keyShiftImg); - //keyShift->SetImageOver(keyShiftOverImg); - keyShift->SetLabel(keyShiftText); - //keyShift->SetSoundOver(keySoundOver); - //keyShift->SetSoundClick(keySoundClick); - //keyShift->SetTrigger(trigA); - //keyShift->SetPosition(21+eurocheck, 3*42+120);//(21, 3*42+80); - //keyShift->SetEffectGrow(); - this->Append(keyShift); - - keySpaceImg = new GuiImage(keyLarge); - keySpaceOverImg = new GuiImage(keyLargeOver); - keySpace = new GuiButton(keySpaceImg, keySpaceOverImg, 2, 3, 0+eurocheck, 4*42+120, trigA, keySoundOver, keySoundClick,1); - //keySpace = new GuiButton(keyLarge->GetWidth(), keyLarge->GetHeight()); - //keySpace->SetImage(keySpaceImg); - //keySpace->SetImageOver(keySpaceOverImg); - //keySpace->SetSoundOver(keySoundOver); - //keySpace->SetSoundClick(keySoundClick); - //keySpace->SetTrigger(trigA); - //keySpace->SetPosition(0+eurocheck, 4*42+120);//(0, 4*42+80); - //keySpace->SetAlignment(ALIGN_CENTRE, ALIGN_TOP); - //keySpace->SetEffectGrow(); - this->Append(keySpace); - - for(int i=0; i<4; i++) - { - for(int j=0; j<11; j++) - { - if(keys[i][j].ch != '\0') - { - keyImg[i][j] = new GuiImage(key); - keyImgOver[i][j] = new GuiImage(keyOver); - keyTxt[i][j] = new GuiText(NULL, 20, (GXColor){0, 0, 0, 0xff}); - keyTxt[i][j]->SetAlignment(ALIGN_CENTRE, ALIGN_BOTTOM); - keyTxt[i][j]->SetPosition(0, -10); - keyBtn[i][j] = new GuiButton(keyImg[i][j], keyImgOver[i][j], 0, 3, (j*42+21*i+40)+eurocheck, i*42+120, trigA, keySoundOver, keySoundClick,1); - //keyBtn[i][j] = new GuiButton(key->GetWidth(), key->GetHeight()); - //keyBtn[i][j]->SetImage(keyImg[i][j]); - //keyBtn[i][j]->SetImageOver(keyImgOver[i][j]); - //keyBtn[i][j]->SetSoundOver(keySoundOver); - //keyBtn[i][j]->SetSoundClick(keySoundClick); - //keyBtn[i][j]->SetTrigger(trigA); - keyBtn[i][j]->SetLabel(keyTxt[i][j]); - //keyBtn[i][j]->SetPosition((j*42+21*i+40)+eurocheck, i*42+120);//SetPosition(j*42+21*i+40, i*42+80); - //keyBtn[i][j]->SetEffectGrow(); - this->Append(keyBtn[i][j]); - } - } - } -} - -/** - * Destructor for the GuiKeyboard class. - */ -GuiKeyboard::~GuiKeyboard() -{ - delete kbText; - delete keyTextbox; - delete keyTextboxImg; - delete keyCapsText; - delete keyCapsImg; - delete keyCapsOverImg; - delete keyCaps; - delete keyShiftText; - delete keyShiftImg; - delete keyShiftOverImg; - delete keyShift; - if (keyAlt) - {delete keyAlt;} - if (keyAlt2) - {delete keyAlt2;} - delete keyBackText; - delete keyBackImg; - delete keyBackOverImg; - delete keyBack; - delete keySpaceImg; - delete keySpaceOverImg; - delete keySpace; - delete key; - delete keyOver; - delete keyMedium; - delete keyMediumOver; - delete keyLarge; - delete keyLargeOver; - delete keySoundOver; - delete keySoundClick; - delete trigA; - delete trigB; - - for(int i=0; i<4; i++) - { - for(int j=0; j<11; j++) - { - if(keys[i][j].ch != '\0') - { - delete keyImg[i][j]; - delete keyImgOver[i][j]; - delete keyTxt[i][j]; - delete keyBtn[i][j]; - } - } - } -} - -void GuiKeyboard::Update(GuiTrigger * t) -{ - LOCK(this); - if(_elements.size() == 0 || (state == STATE_DISABLED && parentElement)) - return; - - for (u8 i = 0; i < _elements.size(); i++) - { - try { _elements.at(i)->Update(t); } - catch (const std::exception& e) { } - } - - if(keySpace->GetState() == STATE_CLICKED) - { - if(strlen(kbtextstr) < kbtextmaxlen) - { - kbtextstr[strlen(kbtextstr)] = ' '; - kbText->SetText(kbtextstr); - } - keySpace->SetState(STATE_SELECTED, t->chan); - } - else if(keyBack->GetState() == STATE_CLICKED) - { - if (strlen(kbtextstr) >(m)){ - kbtextstr[strlen(kbtextstr)-1] = 0; - kbText->SetText(kbtextstr);} - keyBack->SetState(STATE_SELECTED, t->chan); - } - else if(keyClear->GetState() == STATE_CLICKED) - { clearMore: - if (strlen(kbtextstr) >(m)){ - kbtextstr[strlen(kbtextstr)-1] = 0; - kbText->SetText(kbtextstr); - goto clearMore;} - keyClear->SetState(STATE_SELECTED, t->chan); - } - else if(keyShift->GetState() == STATE_CLICKED) - { - shift ^= 1; - if(alt) alt ^= 1; - if(alt2) alt2 ^= 1; - keyShift->SetState(STATE_SELECTED, t->chan); - } - else if(keyAlt->GetState() == STATE_CLICKED) - { - alt ^= 1; - if(shift) shift ^= 1; - if(alt2) alt2 ^= 1; - keyAlt->SetState(STATE_SELECTED, t->chan); - } - else if(keyAlt2->GetState() == STATE_CLICKED) - { - alt2 ^= 1; - if(shift) shift ^= 1; - if(alt) alt ^= 1; - keyAlt2->SetState(STATE_SELECTED, t->chan); - } - else if(keyCaps->GetState() == STATE_CLICKED) - { - caps ^= 1; - keyCaps->SetState(STATE_SELECTED, t->chan); - } - - char txt[2] = { 0, 0 }; - - for(int i=0; i<4; i++) - { - for(int j=0; j<11; j++) - { - if(keys[i][j].ch != '\0') - { - if(shift || caps) - txt[0] = keys[i][j].chShift; - else if(alt) - txt[0] = keys[i][j].chalt; - else if(alt2) - txt[0] = keys[i][j].chalt2; - else - txt[0] = keys[i][j].ch; - - keyTxt[i][j]->SetText(txt); - - if(keyBtn[i][j]->GetState() == STATE_CLICKED) - { - if(strlen(kbtextstr) < kbtextmaxlen) - { - if(shift || caps) - { - kbtextstr[strlen(kbtextstr)] = keys[i][j].chShift; - if(shift) shift ^= 1; - if(alt) alt ^= 1; - if(alt2) alt2 ^= 1; - } - else if(alt) - { - kbtextstr[strlen(kbtextstr)] = keys[i][j].chalt; - if(shift) shift ^= 1; - if(alt) alt ^= 1; - if(alt2) alt2 ^= 1; - } - else if(alt2) - { - kbtextstr[strlen(kbtextstr)] = keys[i][j].chalt2; - if(shift) shift ^= 1; - if(alt) alt ^= 1; - if(alt2) alt2 ^= 1; - } - else - { - kbtextstr[strlen(kbtextstr)] = keys[i][j].ch; - } - } - kbText->SetText(kbtextstr); - keyBtn[i][j]->SetState(STATE_SELECTED, t->chan); - } - } - } - } - - kbText->SetPosition(0, 53); - - this->ToggleFocus(t); - - if(focus) // only send actions to this window if it's in focus - { - // pad/joystick navigation - if(t->Right()) - this->MoveSelectionHor(1); - else if(t->Left()) - this->MoveSelectionHor(-1); - else if(t->Down()) - this->MoveSelectionVert(1); - else if(t->Up()) - this->MoveSelectionVert(-1); - } -} diff --git a/source/libwiigui/gui_optionbrowser.cpp b/source/libwiigui/gui_optionbrowser.cpp deleted file mode 100644 index 9826816c..00000000 --- a/source/libwiigui/gui_optionbrowser.cpp +++ /dev/null @@ -1,659 +0,0 @@ -/**************************************************************************** - * libwiigui - * - * Tantric 2009 - * - * gui_optionbrowser.cpp - * - * GUI class definitions - ***************************************************************************/ - -#include "gui.h" -#include "../wpad.h" - -#include - - -#define GAMESELECTSIZE 30 - -static int scrollbaron, startat, loaded = 0; -/** - * Constructor for the GuiOptionBrowser class. - */ -GuiOptionBrowser::GuiOptionBrowser(int w, int h, OptionList * l, const u8 *imagebg, int scrollon) -{ - width = w; - height = h; - options = l; - scrollbaron = scrollon; - selectable = true; - listOffset = this->FindMenuItem(-1, 1); - selectedItem = 0; - focus = 1; // allow focus - - trigA = new GuiTrigger; - trigA->SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A); - trigHeldA = new GuiTrigger; - trigHeldA->SetHeldTrigger(-1, WPAD_BUTTON_A, PAD_BUTTON_A); - - btnSoundClick = new GuiSound(button_click_pcm, button_click_pcm_size, SOUND_PCM); - - bgOptions = new GuiImageData(imagebg); - bgOptionsImg = new GuiImage(bgOptions); - bgOptionsImg->SetParent(this); - bgOptionsImg->SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE); - - bgOptionsEntry = new GuiImageData(bg_options_entry_png); - if (scrollbaron == 1) { - scrollbar = new GuiImageData(scrollbar_png); - scrollbarImg = new GuiImage(scrollbar); - scrollbarImg->SetParent(this); - scrollbarImg->SetAlignment(ALIGN_RIGHT, ALIGN_TOP); - scrollbarImg->SetPosition(0, 4); - - arrowDown = new GuiImageData(scrollbar_arrowdown_png); - arrowDownImg = new GuiImage(arrowDown); - arrowDownOver = new GuiImageData(scrollbar_arrowdown_png); - arrowDownOverImg = new GuiImage(arrowDownOver); - arrowUp = new GuiImageData(scrollbar_arrowup_png); - arrowUpImg = new GuiImage(arrowUp); - arrowUpOver = new GuiImageData(scrollbar_arrowup_png); - arrowUpOverImg = new GuiImage(arrowUpOver); - scrollbarBox = new GuiImageData(scrollbar_box_png); - scrollbarBoxImg = new GuiImage(scrollbarBox); - scrollbarBoxOver = new GuiImageData(scrollbar_box_png); - scrollbarBoxOverImg = new GuiImage(scrollbarBoxOver); - - arrowUpBtn = new GuiButton(arrowUpImg->GetWidth(), arrowUpImg->GetHeight()); - arrowUpBtn->SetParent(this); - arrowUpBtn->SetImage(arrowUpImg); - arrowUpBtn->SetImageOver(arrowUpOverImg); - arrowUpBtn->SetImageHold(arrowUpOverImg); - arrowUpBtn->SetAlignment(ALIGN_CENTRE, ALIGN_TOP); - arrowUpBtn->SetPosition(width/2-18+7,-18); - arrowUpBtn->SetSelectable(false); - arrowUpBtn->SetTrigger(trigA); - arrowUpBtn->SetEffectOnOver(EFFECT_SCALE, 50, 130); - arrowUpBtn->SetSoundClick(btnSoundClick); - - arrowDownBtn = new GuiButton(arrowDownImg->GetWidth(), arrowDownImg->GetHeight()); - arrowDownBtn->SetParent(this); - arrowDownBtn->SetImage(arrowDownImg); - arrowDownBtn->SetImageOver(arrowDownOverImg); - arrowDownBtn->SetImageHold(arrowDownOverImg); - arrowDownBtn->SetAlignment(ALIGN_CENTRE, ALIGN_BOTTOM); - arrowDownBtn->SetPosition(width/2-18+7,18); - arrowDownBtn->SetSelectable(false); - arrowDownBtn->SetTrigger(trigA); - arrowDownBtn->SetEffectOnOver(EFFECT_SCALE, 50, 130); - arrowDownBtn->SetSoundClick(btnSoundClick); - - scrollbarBoxBtn = new GuiButton(scrollbarBoxImg->GetWidth(), scrollbarBoxImg->GetHeight()); - scrollbarBoxBtn->SetParent(this); - scrollbarBoxBtn->SetImage(scrollbarBoxImg); - scrollbarBoxBtn->SetImageOver(scrollbarBoxOverImg); - scrollbarBoxBtn->SetImageHold(scrollbarBoxOverImg); - scrollbarBoxBtn->SetAlignment(ALIGN_CENTRE, ALIGN_TOP); - scrollbarBoxBtn->SetSelectable(false); - scrollbarBoxBtn->SetEffectOnOver(EFFECT_SCALE, 50, 120); - scrollbarBoxBtn->SetMinY(0); - scrollbarBoxBtn->SetMaxY(height); - scrollbarBoxBtn->SetHoldable(true); - scrollbarBoxBtn->SetTrigger(trigHeldA); - } - -// optionBg = new GuiImage(bgOptionsEntry); - for(int i=0; iname[i], 20, (GXColor){0, 0, 0, 0xff}); - optionTxt[i]->SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE); - optionTxt[i]->SetPosition(24,0); - - optionBg[i] = new GuiImage(bgOptionsEntry); - - optionVal[i] = new GuiText(NULL, 20, (GXColor){0, 0, 0, 0xff}); - optionVal[i]->SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE); - optionVal[i]->SetPosition(250,0); - - optionBtn[i] = new GuiButton(width-28,GAMESELECTSIZE); - optionBtn[i]->SetParent(this); - optionBtn[i]->SetLabel(optionTxt[i], 0); - optionBtn[i]->SetLabel(optionVal[i], 1); - optionBtn[i]->SetImageOver(optionBg[i]); - optionBtn[i]->SetPosition(5,GAMESELECTSIZE*i+4); - optionBtn[i]->SetRumble(false); - optionBtn[i]->SetTrigger(trigA); - optionBtn[i]->SetSoundClick(btnSoundClick); - } -} - -/** - * Constructor for the GuiOptionBrowser class. - */ -GuiOptionBrowser::GuiOptionBrowser(int w, int h, OptionList * l, const char *themePath, const u8 *imagebg, int scrollon, int start) -{ - width = w; - height = h; - options = l; - startat = start; - loaded = 0; - scrollbaron = scrollon; - selectable = true; - listOffset = this->FindMenuItem(-1, 1); - selectedItem = 0; - focus = 1; // allow focus - char imgPath[100]; - - trigA = new GuiTrigger; - trigA->SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A); - trigHeldA = new GuiTrigger; - trigHeldA->SetHeldTrigger(-1, WPAD_BUTTON_A, PAD_BUTTON_A); - btnSoundClick = new GuiSound(button_click_pcm, button_click_pcm_size, SOUND_PCM); - - snprintf(imgPath, sizeof(imgPath), "%sbg_options.png", themePath); - bgOptions = new GuiImageData(imgPath, imagebg); - - bgOptionsImg = new GuiImage(bgOptions); - bgOptionsImg->SetParent(this); - bgOptionsImg->SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE); - - snprintf(imgPath, sizeof(imgPath), "%sbg_options_entry.png", themePath); - bgOptionsEntry = new GuiImageData(imgPath, bg_options_entry_png); - if (scrollbaron == 1) { - snprintf(imgPath, sizeof(imgPath), "%sscrollbar.png", themePath); - scrollbar = new GuiImageData(imgPath, scrollbar_png); - scrollbarImg = new GuiImage(scrollbar); - scrollbarImg->SetParent(this); - scrollbarImg->SetAlignment(ALIGN_RIGHT, ALIGN_TOP); - scrollbarImg->SetPosition(0, 4); - - snprintf(imgPath, sizeof(imgPath), "%sscrollbar_arrowdown.png", themePath); - arrowDown = new GuiImageData(imgPath, scrollbar_arrowdown_png); - arrowDownImg = new GuiImage(arrowDown); - arrowDownOver = new GuiImageData(imgPath, scrollbar_arrowdown_png); - arrowDownOverImg = new GuiImage(arrowDownOver); - snprintf(imgPath, sizeof(imgPath), "%sscrollbar_arrowup.png", themePath); - arrowUp = new GuiImageData(imgPath, scrollbar_arrowup_png); - arrowUpImg = new GuiImage(arrowUp); - arrowUpOver = new GuiImageData(imgPath, scrollbar_arrowup_png); - arrowUpOverImg = new GuiImage(arrowUpOver); - snprintf(imgPath, sizeof(imgPath), "%sscrollbar_box.png", themePath); - scrollbarBox = new GuiImageData(imgPath, scrollbar_box_png); - scrollbarBoxImg = new GuiImage(scrollbarBox); - scrollbarBoxOver = new GuiImageData(imgPath, scrollbar_box_png); - scrollbarBoxOverImg = new GuiImage(scrollbarBoxOver); - - arrowUpBtn = new GuiButton(arrowUpImg->GetWidth(), arrowUpImg->GetHeight()); - arrowUpBtn->SetParent(this); - arrowUpBtn->SetImage(arrowUpImg); - arrowUpBtn->SetImageOver(arrowUpOverImg); - arrowUpBtn->SetImageHold(arrowUpOverImg); - arrowUpBtn->SetAlignment(ALIGN_CENTRE, ALIGN_TOP); - arrowUpBtn->SetPosition(width/2-18+7,-18); - arrowUpBtn->SetSelectable(false); - arrowUpBtn->SetTrigger(trigA); - arrowUpBtn->SetEffectOnOver(EFFECT_SCALE, 50, 130); - arrowUpBtn->SetSoundClick(btnSoundClick); - - arrowDownBtn = new GuiButton(arrowDownImg->GetWidth(), arrowDownImg->GetHeight()); - arrowDownBtn->SetParent(this); - arrowDownBtn->SetImage(arrowDownImg); - arrowDownBtn->SetImageOver(arrowDownOverImg); - arrowDownBtn->SetImageHold(arrowDownOverImg); - arrowDownBtn->SetAlignment(ALIGN_CENTRE, ALIGN_BOTTOM); - arrowDownBtn->SetPosition(width/2-18+7,18); - arrowDownBtn->SetSelectable(false); - arrowDownBtn->SetTrigger(trigA); - arrowDownBtn->SetEffectOnOver(EFFECT_SCALE, 50, 130); - arrowDownBtn->SetSoundClick(btnSoundClick); - - scrollbarBoxBtn = new GuiButton(scrollbarBoxImg->GetWidth(), scrollbarBoxImg->GetHeight()); - scrollbarBoxBtn->SetParent(this); - scrollbarBoxBtn->SetImage(scrollbarBoxImg); - scrollbarBoxBtn->SetImageOver(scrollbarBoxOverImg); - scrollbarBoxBtn->SetImageHold(scrollbarBoxOverImg); - scrollbarBoxBtn->SetAlignment(ALIGN_CENTRE, ALIGN_TOP); - scrollbarBoxBtn->SetSelectable(false); - scrollbarBoxBtn->SetEffectOnOver(EFFECT_SCALE, 50, 120); - scrollbarBoxBtn->SetMinY(0); - scrollbarBoxBtn->SetMaxY(height-30); - scrollbarBoxBtn->SetHoldable(true); - scrollbarBoxBtn->SetTrigger(trigHeldA); - } - -// optionBg = new GuiImage(bgOptionsEntry); - for(int i=0; iname[i], 20, (GXColor){0, 0, 0, 0xff}); - optionTxt[i]->SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE); - optionTxt[i]->SetPosition(24,0); - - optionBg[i] = new GuiImage(bgOptionsEntry); - - optionVal[i] = new GuiText(NULL, 20, (GXColor){0, 0, 0, 0xff}); - optionVal[i]->SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE); - optionVal[i]->SetPosition(250,0); - - optionBtn[i] = new GuiButton(width-28,GAMESELECTSIZE); - optionBtn[i]->SetParent(this); - optionBtn[i]->SetLabel(optionTxt[i], 0); - optionBtn[i]->SetLabel(optionVal[i], 1); - optionBtn[i]->SetImageOver(optionBg[i]); - optionBtn[i]->SetPosition(5,GAMESELECTSIZE*i+4); - optionBtn[i]->SetTrigger(trigA); - optionBtn[i]->SetSoundClick(btnSoundClick); - } -} - -/** - * Destructor for the GuiOptionBrowser class. - */ -GuiOptionBrowser::~GuiOptionBrowser() -{ - if (scrollbaron == 1) { - delete arrowUpBtn; - delete arrowDownBtn; - delete scrollbarBoxBtn; - delete scrollbarImg; - delete arrowDownImg; - delete arrowDownOverImg; - delete arrowUpImg; - delete arrowUpOverImg; - delete scrollbarBoxImg; - delete scrollbarBoxOverImg; - delete scrollbar; - delete arrowDown; - delete arrowDownOver; - delete arrowUp; - delete arrowUpOver; - delete scrollbarBox; - delete scrollbarBoxOver; - } - delete bgOptionsImg; - delete bgOptions; - delete bgOptionsEntry; - loaded = 0; - - delete trigA; - delete btnSoundClick; - -// delete optionBg; - for(int i=0; iSetPosition(x,0); -} - -void GuiOptionBrowser::SetFocus(int f) -{ - LOCK(this); - focus = f; - - for(int i=0; iResetState(); - - if(f == 1) - optionBtn[selectedItem]->SetState(STATE_SELECTED); -} - -void GuiOptionBrowser::ResetState() -{ - LOCK(this); - if(state != STATE_DISABLED) - { - state = STATE_DEFAULT; - stateChan = -1; - } - - for(int i=0; iResetState(); - } -} - -int GuiOptionBrowser::GetClickedOption() -{ - int found = -1; - for(int i=0; iGetState() == STATE_CLICKED) - { - optionBtn[i]->SetState(STATE_SELECTED); - found = optionIndex[i]; - break; - } - } - return found; -} - -int GuiOptionBrowser::GetSelectedOption() -{ - int found = -1; - for(int i=0; iGetState() == STATE_SELECTED) - { - optionBtn[i]->SetState(STATE_SELECTED); - found = optionIndex[i]; - break; - } - } - return found; -} - -/**************************************************************************** - * FindMenuItem - * - * Help function to find the next visible menu item on the list - ***************************************************************************/ - -int GuiOptionBrowser::FindMenuItem(int currentItem, int direction) -{ - int nextItem = currentItem + direction; - - if(nextItem < 0 || nextItem >= options->length) - return -1; - - if(strlen(options->name[nextItem]) > 0) - return nextItem; - else - return FindMenuItem(nextItem, direction); -} - -/** - * Draw the button on screen - */ -void GuiOptionBrowser::Draw() -{ - LOCK(this); - if(!this->IsVisible()) - return; - - bgOptionsImg->Draw(); - - int next = listOffset; - - for(int i=0; i= 0) - { - optionBtn[i]->Draw(); - next = this->FindMenuItem(next, 1); - } - else - break; - } - - if(scrollbaron == 1) { - scrollbarImg->Draw(); - arrowUpBtn->Draw(); - arrowDownBtn->Draw(); - scrollbarBoxBtn->Draw(); - } - this->UpdateEffects(); -} - -void GuiOptionBrowser::Update(GuiTrigger * t) -{ - LOCK(this); - int next, prev, lang = options->length; - - //go to the last game selected - if ((loaded == 0) && (startat>0)) - { - - if (startat > (lang-9)){ - listOffset= (lang-9); - selectedItem=startat; - optionBtn[selectedItem]->SetState(STATE_SELECTED, t->chan); - } - else if (startat < 9){ - selectedItem=startat; - optionBtn[selectedItem]->SetState(STATE_SELECTED, t->chan); - } - else { - listOffset = (startat-4); - selectedItem=startat; - optionBtn[selectedItem]->SetState(STATE_SELECTED, t->chan);} - this->SetFocus(1); - loaded = 1; - } - - if(state == STATE_DISABLED || !t) - return; - - - // scrolldelay affects how fast the list scrolls - // when the arrows are clicked - float scrolldelay = 3.5; - - - if (scrollbaron == 1) { - // update the location of the scroll box based on the position in the option list - - - arrowUpBtn->Update(t); - arrowDownBtn->Update(t); - scrollbarBoxBtn->Update(t); - } - next = listOffset; - - for(int i=0; i= 0) - { - if(optionBtn[i]->GetState() == STATE_DISABLED) - { - optionBtn[i]->SetVisible(true); - optionBtn[i]->SetState(STATE_DEFAULT); - } - - optionTxt[i]->SetText(options->name[next]); - optionVal[i]->SetText(options->value[next]); - optionIndex[i] = next; - next = this->FindMenuItem(next, 1); - } - else - { - optionBtn[i]->SetVisible(false); - optionBtn[i]->SetState(STATE_DISABLED); - } - - if(focus) - { - if(i != selectedItem && optionBtn[i]->GetState() == STATE_SELECTED) - optionBtn[i]->ResetState(); - else if(i == selectedItem && optionBtn[i]->GetState() == STATE_DEFAULT) - optionBtn[selectedItem]->SetState(STATE_SELECTED, t->chan); - } - - optionBtn[i]->Update(t); - - if(optionBtn[i]->GetState() == STATE_SELECTED) - { - selectedItem = i; - } - } - - // pad/joystick navigation - if(!focus) - return; // skip navigation - - if (scrollbaron == 1) { - - if (t->Down() || - arrowDownBtn->GetState() == STATE_CLICKED || ////////////////////////////////////////////down - arrowDownBtn->GetState() == STATE_HELD) - { - - next = this->FindMenuItem(optionIndex[selectedItem], 1); - - if(next >= 0) - { - if(selectedItem == PAGESIZE-1) - { - // move list down by 1 - listOffset = this->FindMenuItem(listOffset, 1); - } - else if(optionBtn[selectedItem+1]->IsVisible()) - { - optionBtn[selectedItem]->ResetState(); - optionBtn[selectedItem+1]->SetState(STATE_SELECTED, t->chan); - selectedItem++; - } - scrollbarBoxBtn->Draw(); - usleep(10000 * scrolldelay); - - - }WPAD_ScanPads(); - u8 cnt, buttons = NULL; - /* Get pressed buttons */ - for (cnt = 0; cnt < 4; cnt++) - buttons |= WPAD_ButtonsHeld(cnt); - if (buttons == WPAD_BUTTON_A) { - - } else { - arrowDownBtn->ResetState(); - - } - - } - else if(t->Up() || - arrowUpBtn->GetState() == STATE_CLICKED || ////////////////////////////////////////////up - arrowUpBtn->GetState() == STATE_HELD) - { - prev = this->FindMenuItem(optionIndex[selectedItem], -1); - - if(prev >= 0) - { - if(selectedItem == 0) - { - // move list up by 1 - listOffset = prev; - } - else - { - optionBtn[selectedItem]->ResetState(); - optionBtn[selectedItem-1]->SetState(STATE_SELECTED, t->chan); - selectedItem--; - } - scrollbarBoxBtn->Draw(); - usleep(10000 * scrolldelay); - - - }WPAD_ScanPads(); - u8 cnt, buttons = NULL; - /* Get pressed buttons */ - for (cnt = 0; cnt < 4; cnt++) - buttons |= WPAD_ButtonsHeld(cnt); - if (buttons == WPAD_BUTTON_A) { - - } else { - arrowUpBtn->ResetState(); - - } - } - - if(scrollbarBoxBtn->GetState() == STATE_HELD && - scrollbarBoxBtn->GetStateChan() == t->chan && - t->wpad.ir.valid && options->length > PAGESIZE) - { - scrollbarBoxBtn->SetPosition(width/2-18+7,0); - int position = t->wpad.ir.y - 50 - scrollbarBoxBtn->GetTop(); - - listOffset = (position * lang)/180 - selectedItem; - - if(listOffset <= 0) - { - listOffset = 0; - selectedItem = 0; - } - else if(listOffset+PAGESIZE >= lang) - { - listOffset = lang-PAGESIZE; - selectedItem = PAGESIZE-1; - } - - } - int positionbar = 237*(listOffset + selectedItem) / lang; - - if(positionbar > 216) - positionbar = 216; - scrollbarBoxBtn->SetPosition(width/2-18+7, positionbar+8); - - - if(t->Right()) - { - if(listOffset < lang && lang > PAGESIZE) - { - listOffset =listOffset+ PAGESIZE; - if(listOffset+PAGESIZE >= lang) - listOffset = lang-PAGESIZE; - } - } - else if(t->Left()) - { - if(listOffset > 0) - { - listOffset =listOffset- PAGESIZE; - if(listOffset < 0) - listOffset = 0; - } - } - - } else { - - - if(t->Down()) - { - next = this->FindMenuItem(optionIndex[selectedItem], 1); - - if(next >= 0) - { - if(selectedItem == PAGESIZE-1) - { - // move list down by 1 - listOffset = this->FindMenuItem(listOffset, 1); - } - else if(optionBtn[selectedItem+1]->IsVisible()) - { - optionBtn[selectedItem]->ResetState(); - optionBtn[selectedItem+1]->SetState(STATE_SELECTED, t->chan); - selectedItem++; - } - } - } - else if(t->Up()) - { - prev = this->FindMenuItem(optionIndex[selectedItem], -1); - - if(prev >= 0) - { - if(selectedItem == 0) - { - // move list up by 1 - listOffset = prev; - } - else - { - optionBtn[selectedItem]->ResetState(); - optionBtn[selectedItem-1]->SetState(STATE_SELECTED, t->chan); - selectedItem--; - } - } - } - } - - if(updateCB) - updateCB(this); -} diff --git a/source/libwiigui/gui_sound.cpp b/source/libwiigui/gui_sound.cpp deleted file mode 100644 index 8c4a4265..00000000 --- a/source/libwiigui/gui_sound.cpp +++ /dev/null @@ -1,195 +0,0 @@ -/**************************************************************************** - * libwiigui - * - * Tantric 2009 - * - * gui_sound.cpp - * - * GUI class definitions - ***************************************************************************/ - -#include "gui.h" - -/** - * Constructor for the GuiSound class. - */ -GuiSound::GuiSound(const u8 * snd, s32 len, int t) -{ - sound = snd; - length = len; - type = t; - voice = -1; - volume = 100; - loop = false; -} - -GuiSound::GuiSound(const u8 * snd, s32 len, int t, int v) -{ - sound = snd; - length = len; - type = t; - voice = -1; - volume = v; - loop = false; -} - -/** - * Destructor for the GuiSound class. - */ -GuiSound::~GuiSound() -{ - if(type == SOUND_OGG) - StopOgg(); -} - -int GuiSound::PlayOggFile(char * path) -{ /* - u32 filesize = 0; - char * bufferogg = NULL; - size_t resultogg; - - FILE * pFile; - pFile = fopen (path, "rb"); - - // get file size: - fseek (pFile , 0 , SEEK_END); - filesize = ftell (pFile); - rewind (pFile); - - // allocate memory to contain the whole file: - bufferogg = (char*) malloc (sizeof(char)*filesize); - if (bufferogg == NULL) {fputs (" Memory error",stderr); exit (2);} - - // copy the file into the buffer: - resultogg = fread (bufferogg,1,filesize,pFile); - if (resultogg != filesize) {fputs (" Reading error",stderr); exit (3);} - - fclose (pFile); - - sound = (const u8 *) bufferogg; - length = filesize; - */ - int ret = PlayOggFromFile(path, loop); - SetVolumeOgg(255*(volume/100.0)); - return ret; -} - -void GuiSound::Play() -{ - int vol; - - switch(type) - { - case SOUND_PCM: - vol = 255*(volume/100.0); - voice = ASND_GetFirstUnusedVoice(); - if(voice >= 0) - ASND_SetVoice(voice, VOICE_STEREO_16BIT, 48000, 0, - (u8 *)sound, length, vol, vol, NULL); - break; - - case SOUND_OGG: - voice = 0; - if(loop) - PlayOgg(mem_open((char *)sound, length), 0, OGG_INFINITE_TIME); - else - PlayOgg(mem_open((char *)sound, length), 0, OGG_ONE_TIME); - SetVolumeOgg(255*(volume/100.0)); - break; - } -} - -void GuiSound::Stop() -{ - if(voice < 0) - return; - - switch(type) - { - case SOUND_PCM: - ASND_StopVoice(voice); - break; - - case SOUND_OGG: - StopOgg(); - break; - } -} - -void GuiSound::Pause() -{ - if(voice < 0) - return; - - switch(type) - { - case SOUND_PCM: - ASND_PauseVoice(voice, 1); - break; - - case SOUND_OGG: - PauseOgg(1); - break; - } -} - -void GuiSound::Resume() -{ - if(voice < 0) - return; - - switch(type) - { - case SOUND_PCM: - ASND_PauseVoice(voice, 0); - break; - - case SOUND_OGG: - PauseOgg(0); - break; - } -} - -bool GuiSound::IsPlaying() -{ - if(ASND_StatusVoice(voice) == SND_WORKING || ASND_StatusVoice(voice) == SND_WAITING) - return true; - else - return false; -} - -void GuiSound::SetVolume(int vol) -{ - volume = vol; - - if(voice < 0) - return; - - int newvol = 255*(volume/100.0); - - switch(type) - { - case SOUND_PCM: - ASND_ChangeVolumeVoice(voice, newvol, newvol); - break; - - case SOUND_OGG: - SetVolumeOgg(255*(volume/100.0)); - break; - } -} - -void GuiSound::SetLoop(bool l) -{ - loop = l; -} - -s32 GuiSound::GetPlayTime() -{ - return GetTimeOgg(); -} - -void GuiSound::SetPlayTime(s32 time_pos) -{ - SetTimeOgg(time_pos); -} diff --git a/source/libwiigui/gui_text.cpp b/source/libwiigui/gui_text.cpp deleted file mode 100644 index 62117012..00000000 --- a/source/libwiigui/gui_text.cpp +++ /dev/null @@ -1,434 +0,0 @@ -/**************************************************************************** - * libwiigui - * - * Tantric 2009 - * - * gui_text.cpp - * - * GUI class definitions - ***************************************************************************/ - -#include "gui.h" - -static int currentSize = 0; -static int currentWidescreen = 0; -static int presetSize = 0; -static GXColor presetColor = (GXColor){255, 255, 255, 255}; -static int presetMaxWidth = 0; -static int presetWrapMode = GuiText::WRAP; -static u16 presetStyle = FTGX_NULL; -static int presetAlignmentHor = 0; -static int presetAlignmentVert = 0; - -/** - * Constructor for the GuiText class. - */ -GuiText::GuiText(const char * t, int s, GXColor c) -{ - text = NULL; - size = s; - color = c; - alpha = c.a; - style = FTGX_JUSTIFY_CENTER | FTGX_ALIGN_MIDDLE; - maxWidth = 0; - wrapMode = GuiText::WRAP; - scrollPos1 = 0; - scrollPos2 = 0; - scrollDelay = 0; - font = NULL; - widescreen = 0; //added - - alignmentHor = ALIGN_CENTRE; - alignmentVert = ALIGN_MIDDLE; - - if(t) - text = FreeTypeGX::charToWideChar((char *)t); -} - -/** - * Constructor for the GuiText class, uses presets - */ -GuiText::GuiText(const char * t) -{ - text = NULL; - size = presetSize; - color = presetColor; - alpha = presetColor.a; - style = presetStyle; - maxWidth = presetMaxWidth; - wrapMode = presetWrapMode; - scrollPos1 = 0; - scrollPos2 = 0; - scrollDelay = 0; - font = NULL; - widescreen = 0; //added - - alignmentHor = presetAlignmentHor; - alignmentVert = presetAlignmentVert; - - if(t) - text = FreeTypeGX::charToWideChar((char *)t); -} - -/** - * Destructor for the GuiText class. - */ -GuiText::~GuiText() -{ - if(text) - { - delete [] text; - text = NULL; - } -} - -void GuiText::SetText(const char * t) -{ - LOCK(this); - if(text) - delete [] text; - text = NULL; - - if(t) - text = FreeTypeGX::charToWideChar((char *)t); - scrollPos2 = 0; - scrollDelay = 0; -} -void GuiText::SetTextf(const char *format, ...) -{ - char *tmp=0; - va_list va; - va_start(va, format); - if((vasprintf(&tmp, format, va)>=0) && tmp) - { - this->SetText(tmp); - free(tmp); - } - va_end(va); -} - -void GuiText::SetPresets(int sz, GXColor c, int w, int wrap, u16 s, int h, int v) -{ - presetSize = sz; - presetColor = c; - presetMaxWidth = w; - presetWrapMode = wrap; - presetStyle = s; - presetAlignmentHor = h; - presetAlignmentVert = v; -} - -void GuiText::SetFontSize(int s) -{ - LOCK(this); - size = s; -} - -void GuiText::SetMaxWidth(int w, short m/*=GuiText::WRAP*/) -{ - LOCK(this); - maxWidth = w; - wrapMode = m; -} - -void GuiText::SetColor(GXColor c) -{ - LOCK(this); - color = c; - alpha = c.a; -} - -void GuiText::SetStyle(u16 s, u16 m/*=0xffff*/) -{ - LOCK(this); - style &= ~m; - style |= s & m; -} - -void GuiText::SetAlignment(int hor, int vert) -{ - LOCK(this); - style = FTGX_NULL; - - switch(hor) - { - case ALIGN_LEFT: - style |= FTGX_JUSTIFY_LEFT; - break; - case ALIGN_RIGHT: - style |= FTGX_JUSTIFY_RIGHT; - break; - default: - style |= FTGX_JUSTIFY_CENTER; - break; - } - switch(vert) - { - case ALIGN_TOP: - style |= FTGX_ALIGN_TOP; - break; - case ALIGN_BOTTOM: - style |= FTGX_ALIGN_BOTTOM; - break; - default: - style |= FTGX_ALIGN_MIDDLE; - break; - } - - alignmentHor = hor; - alignmentVert = vert; -} -/** - * Set the Font - */ -void GuiText::SetFont(FreeTypeGX *f) -{ - LOCK(this); - font = f; -} - -int GuiText::GetTextWidth() -{ - LOCK(this); - if(!text) - return 0; - - int newSize = size*this->GetScale(); - - if(newSize != currentSize || currentWidescreen != widescreen) - { - //fontSystem->changeSize(newSize); - (font ? font : fontSystem)->changeSize(newSize, widescreen ? newSize*0.8 : 0); - currentSize = newSize; - currentWidescreen = widescreen; - } - return (font ? font : fontSystem)->getWidth(text); -} - -void GuiText::SetWidescreen(bool w) -{ - LOCK(this); - widescreen = w; -} -/** - * Draw the text on screen - */ -void GuiText::Draw() -{ - LOCK(this); - if(!text) - return; - - if(!this->IsVisible()) - return; - - GXColor c = color; - c.a = this->GetAlpha(); - - int newSize = size*this->GetScale(); - - if(newSize != currentSize || currentWidescreen != widescreen) - { - //fontSystem->changeSize(newSize); - (font ? font : fontSystem)->changeSize(newSize, widescreen ? newSize*0.8 : 0); - currentSize = newSize; - currentWidescreen = widescreen; - } - - int voffset = 0; - -// if(alignmentVert == ALIGN_MIDDLE) -// voffset = -newSize/2 + 2; - - if(maxWidth > 0 && (font ? font : fontSystem)->getWidth(text) > maxWidth) - { - if(wrapMode == GuiText::WRAP) // text wrapping - { - int lineheight = newSize + 6; - int strlen = wcslen(text); - int i = 0; - int ch = 0; - int linenum = 0; - int lastSpace = -1; - int lastSpaceIndex = -1; - wchar_t * tmptext[20]; - - while(ch < strlen) - { - if(i == 0) - tmptext[linenum] = new wchar_t[strlen + 1]; - - tmptext[linenum][i] = text[ch]; - tmptext[linenum][i+1] = 0; - - if(text[ch] == ' ' || ch == strlen-1) - { - if((font ? font : fontSystem)->getWidth(tmptext[linenum]) >= maxWidth) - //if(fontSystem->getWidth(tmptext[linenum]) >= maxWidth) - { - if(lastSpace >= 0) - { - tmptext[linenum][lastSpaceIndex] = 0; // discard space, and everything after - ch = lastSpace; // go backwards to the last space - lastSpace = -1; // we have used this space - lastSpaceIndex = -1; - } - linenum++; - i = -1; - } - else if(ch == strlen-1) - { - linenum++; - } - } - if(text[ch] == ' ' && i >= 0) - { - lastSpace = ch; - lastSpaceIndex = i; - } - ch++; - i++; - } - - if(alignmentVert == ALIGN_MIDDLE) - voffset = voffset - (lineheight*linenum)/2 + lineheight/2; - - for(i=0; i < linenum; i++) - { - (font ? font : fontSystem)->drawText(this->GetLeft(), this->GetTop()+voffset+i*lineheight, tmptext[i], c, style); - delete tmptext[i]; - } - } - else if(wrapMode == GuiText::DOTTED) // text dotted - { - wchar_t save[4]; - int strlen = wcslen(text); - int dotPos=strlen-3; - int i; - bool drawed = false; - while(dotPos > 0 && drawed == false) - { - for(i=0; i<4; i++) // save Text for "..." - { - save[i] = text[dotPos+i]; - text[dotPos+i] = (i != 3 ? _TEXT('.') : 0); - } - if(((font ? font : fontSystem)->getWidth(text)) <= maxWidth) - { - (font ? font : fontSystem)->drawText(this->GetLeft(), this->GetTop()+voffset, text, c, style); - drawed = true; - } - - for(i=0; i<4; i++) // write saved Text back - text[dotPos+i] = save[i]; - dotPos--; - } - if(!drawed) - (font ? font : fontSystem)->drawText(this->GetLeft(), this->GetTop()+voffset, text, c, style); - } - else if(wrapMode == GuiText::SCROLL) // text scroller - { - wchar_t save; - - if(scrollPos2 == 0 || frameCount > scrollDelay+5) - { - scrollPos1 = 0; - scrollOffset = 0; - for(scrollPos2 = wcslen(text); scrollPos2 > 1; scrollPos2--) - { - save = text[scrollPos2]; // save Pos2 - text[scrollPos2] = 0; - int textWidth = (font ? font : fontSystem)->getWidth(text); - text[scrollPos2] = save; // restore Pos2 - if(textWidth <= maxWidth) - break; - } - scrollDelay = frameCount+50; // wait 50 Frames before beginning with scrolling - } - else if(scrollPos2 > 0 && frameCount >= scrollDelay) - { - - if(--scrollOffset < 0) - { - wchar_t tmp[] = { text[scrollPos1], text[scrollPos1+1], 0 }; - scrollOffset += (font ? font : fontSystem)->getWidth(tmp) - (font ? font : fontSystem)->getWidth(tmp+1); - scrollPos1++; - } - - int strlen = wcslen(text); - for(; scrollPos2 < strlen; scrollPos2++) - { - save = text[scrollPos2+1]; // save Pos2 - text[scrollPos2+1] = 0; - int textWidth = (font ? font : fontSystem)->getWidth(&text[scrollPos1]); - text[scrollPos2+1] = save; // restore Pos2 - if(textWidth+scrollOffset > maxWidth) - break; - } - if(scrollPos2 == strlen) - { - scrollPos2 = -scrollPos2; - scrollDelay = frameCount+25; // when dir-change wait 25 Frames - } - else - scrollDelay = frameCount+1; // wait 1 Frames - } - else if(frameCount >= scrollDelay) - { - scrollPos2 = -scrollPos2; - - scrollOffset++; - wchar_t tmp[] = { text[scrollPos1-1], text[scrollPos1], 0 }; - int tmpOffset = (font ? font : fontSystem)->getWidth(tmp) - (font ? font : fontSystem)->getWidth(tmp+1); - if(scrollOffset >= tmpOffset) - { - scrollOffset -= tmpOffset; - scrollPos1--; - } - - for(; scrollPos2 > scrollPos1; scrollPos2--) - { - save = text[scrollPos2]; // save Pos2 - text[scrollPos2] = 0; - int textWidth = (font ? font : fontSystem)->getWidth(&text[scrollPos1]); - text[scrollPos2] = save; // restore Pos2 - if(textWidth+scrollOffset <= maxWidth) - break; - } - if(scrollPos1 == 0) - { - scrollPos2 = -scrollPos2; - scrollDelay = frameCount+25; // when dir-change wait 25 Frames - } - else - scrollDelay = frameCount+1; // wait 10 Frames - - scrollPos2 = -scrollPos2; - } - - uint16_t drawStyle = style; - uint16_t drawX = this->GetLeft() + scrollOffset; - - if((drawStyle & FTGX_JUSTIFY_MASK) == FTGX_JUSTIFY_CENTER) - { - drawStyle = (drawStyle & ~FTGX_JUSTIFY_MASK) | FTGX_JUSTIFY_LEFT; - drawX -= maxWidth >> 1; - } - else if((drawStyle & FTGX_JUSTIFY_MASK) == FTGX_JUSTIFY_RIGHT) - { - drawStyle = (drawStyle & ~FTGX_JUSTIFY_MASK) | FTGX_JUSTIFY_LEFT; - drawX -= maxWidth; - } - - save = text[abs(scrollPos2)]; // save Pos2 - text[abs(scrollPos2)] = 0; - (font ? font : fontSystem)->drawText(drawX, this->GetTop()+voffset, &text[scrollPos1], c, drawStyle); - text[abs(scrollPos2)] = save; // restore Pos2 - } - } - else - { - (font ? font : fontSystem)->drawText(this->GetLeft(), this->GetTop()+voffset, text, c, style); - } - this->UpdateEffects(); -} diff --git a/source/libwiigui/gui_tooltip.cpp b/source/libwiigui/gui_tooltip.cpp deleted file mode 100644 index c504bd77..00000000 --- a/source/libwiigui/gui_tooltip.cpp +++ /dev/null @@ -1,90 +0,0 @@ -/**************************************************************************** - * libwiigui - * - * Tantric 2009 - * - * gui_tooltip.cpp - * - * GUI class definitions - ***************************************************************************/ - -#include "gui.h" - -static GuiImageData tooltipLeft(tooltip_left_png); -static GuiImageData tooltipTile(tooltip_tile_png); -static GuiImageData tooltipRight(tooltip_right_png); - - -/** - * Constructor for the GuiTooltip class. - */ -GuiTooltip::GuiTooltip(const char *t) -: -leftImage(&tooltipLeft), tileImage(&tooltipTile), rightImage(&tooltipRight) -{ - text = NULL; - height = leftImage.GetHeight(); - leftImage.SetParent(this); - tileImage.SetParent(this); - rightImage.SetParent(this); - SetText(t); -} - -/* - * Destructor for the GuiTooltip class. - */ -GuiTooltip::~GuiTooltip() -{ - if(text) delete text; -} - -float GuiTooltip::GetScale() -{ - float s = scale * scaleDyn; - -// if(parentElement) -// s *= parentElement->GetScale(); - - return s; -} - -/* !Sets the text of the GuiTooltip element - * !\param t Text - */ -void GuiTooltip::SetText(const char * t) -{ - LOCK(this); - if(text) - { - delete text; - text = NULL; - } - int tile_cnt = 0; - if(t && (text = new GuiText(t, 22, (GXColor){0, 0, 0, 255}))) - { - text->SetParent(this); - tile_cnt = (text->GetTextWidth()-12) /tileImage.GetWidth(); - if(tile_cnt < 0) tile_cnt = 0; - } - tileImage.SetPosition(leftImage.GetWidth(), 0); - tileImage.SetTile(tile_cnt); - rightImage.SetPosition(leftImage.GetWidth() + tile_cnt * tileImage.GetWidth(), 0); - width = leftImage.GetWidth() + tile_cnt * tileImage.GetWidth() + rightImage.GetWidth(); -} - -void GuiTooltip::SetWidescreen(bool){} -/* - * Draw the Tooltip on screen - */ -void GuiTooltip::Draw() -{ - LOCK(this); - if(!this->IsVisible()) return; - - leftImage.Draw(); - tileImage.Draw(); - rightImage.Draw(); - if(text) text->Draw(); - - this->UpdateEffects(); -} diff --git a/source/libwiigui/gui_trigger.cpp b/source/libwiigui/gui_trigger.cpp deleted file mode 100644 index fe7a4f45..00000000 --- a/source/libwiigui/gui_trigger.cpp +++ /dev/null @@ -1,255 +0,0 @@ -/**************************************************************************** - * libwiigui - * - * Tantric 2009 - * - * gui_trigger.cpp - * - * GUI class definitions - ***************************************************************************/ - -#include "gui.h" - -static int scrollDelay = 0; - -/** - * Constructor for the GuiTrigger class. - */ -GuiTrigger::GuiTrigger() -{ - chan = -1; - memset(&wpad, 0, sizeof(WPADData)); - memset(&pad, 0, sizeof(PADData)); -} - -/** - * Destructor for the GuiTrigger class. - */ -GuiTrigger::~GuiTrigger() -{ -} - -/** - * Sets a simple trigger. Requires: - * - Element is selected - * - Trigger button is pressed - */ -void GuiTrigger::SetSimpleTrigger(s32 ch, u32 wiibtns, u16 gcbtns) -{ - type = TRIGGER_SIMPLE; - chan = ch; - wpad.btns_d = wiibtns; - pad.btns_d = gcbtns; -} - -/** - * Sets a held trigger. Requires: - * - Element is selected - * - Trigger button is pressed and held - */ -void GuiTrigger::SetHeldTrigger(s32 ch, u32 wiibtns, u16 gcbtns) -{ - type = TRIGGER_HELD; - chan = ch; - wpad.btns_h = wiibtns; - pad.btns_h = gcbtns; -} - -/** - * Sets a button trigger. Requires: - * - Trigger button is pressed - */ -void GuiTrigger::SetButtonOnlyTrigger(s32 ch, u32 wiibtns, u16 gcbtns) -{ - type = TRIGGER_BUTTON_ONLY; - chan = ch; - wpad.btns_d = wiibtns; - pad.btns_d = gcbtns; -} - -/** - * Sets a button trigger. Requires: - * - Trigger button is pressed - * - Parent window is in focus - */ -void GuiTrigger::SetButtonOnlyInFocusTrigger(s32 ch, u32 wiibtns, u16 gcbtns) -{ - type = TRIGGER_BUTTON_ONLY_IN_FOCUS; - chan = ch; - wpad.btns_d = wiibtns; - pad.btns_d = gcbtns; -} - -/**************************************************************************** - * WPAD_Stick - * - * Get X/Y value from Wii Joystick (classic, nunchuk) input - ***************************************************************************/ - -s8 GuiTrigger::WPAD_Stick(u8 right, int axis) -{ - #ifdef HW_RVL - - float mag = 0.0; - float ang = 0.0; - - switch (wpad.exp.type) - { - case WPAD_EXP_NUNCHUK: - case WPAD_EXP_GUITARHERO3: - if (right == 0) - { - mag = wpad.exp.nunchuk.js.mag; - ang = wpad.exp.nunchuk.js.ang; - } - break; - - case WPAD_EXP_CLASSIC: - if (right == 0) - { - mag = wpad.exp.classic.ljs.mag; - ang = wpad.exp.classic.ljs.ang; - } - else - { - mag = wpad.exp.classic.rjs.mag; - ang = wpad.exp.classic.rjs.ang; - } - break; - - default: - break; - } - - /* calculate x/y value (angle need to be converted into radian) */ - if (mag > 1.0) mag = 1.0; - else if (mag < -1.0) mag = -1.0; - double val; - - if(axis == 0) // x-axis - val = mag * sin((PI * ang)/180.0f); - else // y-axis - val = mag * cos((PI * ang)/180.0f); - - return (s8)(val * 128.0f); - - #else - return 0; - #endif -} - -bool GuiTrigger::Left() -{ - u32 wiibtn = WPAD_BUTTON_LEFT; - - if((wpad.btns_d | wpad.btns_h) & (wiibtn | WPAD_CLASSIC_BUTTON_LEFT) - || (pad.btns_d | pad.btns_h) & PAD_BUTTON_LEFT - || pad.stickX < -PADCAL - || WPAD_Stick(0,0) < -PADCAL) - { - if(wpad.btns_d & (wiibtn | WPAD_CLASSIC_BUTTON_LEFT) - || pad.btns_d & PAD_BUTTON_LEFT) - { - scrollDelay = SCROLL_INITIAL_DELAY; // reset scroll delay. - return true; - } - else if(scrollDelay == 0) - { - scrollDelay = SCROLL_LOOP_DELAY; - return true; - } - else - { - if(scrollDelay > 0) - scrollDelay--; - } - } - return false; -} - -bool GuiTrigger::Right() -{ - u32 wiibtn = WPAD_BUTTON_RIGHT; - - if((wpad.btns_d | wpad.btns_h) & (wiibtn | WPAD_CLASSIC_BUTTON_RIGHT) - || (pad.btns_d | pad.btns_h) & PAD_BUTTON_RIGHT - || pad.stickX > PADCAL - || WPAD_Stick(0,0) > PADCAL) - { - if(wpad.btns_d & (wiibtn | WPAD_CLASSIC_BUTTON_RIGHT) - || pad.btns_d & PAD_BUTTON_RIGHT) - { - scrollDelay = SCROLL_INITIAL_DELAY; // reset scroll delay. - return true; - } - else if(scrollDelay == 0) - { - scrollDelay = SCROLL_LOOP_DELAY; - return true; - } - else - { - if(scrollDelay > 0) - scrollDelay--; - } - } - return false; -} - -bool GuiTrigger::Up() -{ - u32 wiibtn = WPAD_BUTTON_UP; - - if((wpad.btns_d | wpad.btns_h) & (wiibtn | WPAD_CLASSIC_BUTTON_UP) - || (pad.btns_d | pad.btns_h) & PAD_BUTTON_UP - || pad.stickY > PADCAL - || WPAD_Stick(0,1) > PADCAL) - { - if(wpad.btns_d & (wiibtn | WPAD_CLASSIC_BUTTON_UP) - || pad.btns_d & PAD_BUTTON_UP) - { - scrollDelay = SCROLL_INITIAL_DELAY; // reset scroll delay. - return true; - } - else if(scrollDelay == 0) - { - scrollDelay = SCROLL_LOOP_DELAY; - return true; - } - else - { - if(scrollDelay > 0) - scrollDelay--; - } - } - return false; -} - -bool GuiTrigger::Down() -{ - u32 wiibtn = WPAD_BUTTON_DOWN; - - if((wpad.btns_d | wpad.btns_h) & (wiibtn | WPAD_CLASSIC_BUTTON_DOWN) - || (pad.btns_d | pad.btns_h) & PAD_BUTTON_DOWN - || pad.stickY < -PADCAL - || WPAD_Stick(0,1) < -PADCAL) - { - if(wpad.btns_d & (wiibtn | WPAD_CLASSIC_BUTTON_DOWN) - || pad.btns_d & PAD_BUTTON_DOWN) - { - scrollDelay = SCROLL_INITIAL_DELAY; // reset scroll delay. - return true; - } - else if(scrollDelay == 0) - { - scrollDelay = SCROLL_LOOP_DELAY; - return true; - } - else - { - if(scrollDelay > 0) - scrollDelay--; - } - } - return false; -} diff --git a/source/libwiigui/gui_window.cpp b/source/libwiigui/gui_window.cpp deleted file mode 100644 index 4b6f253b..00000000 --- a/source/libwiigui/gui_window.cpp +++ /dev/null @@ -1,430 +0,0 @@ -/**************************************************************************** - * libwiigui - * - * Tantric 2009 - * - * gui_window.cpp - * - * GUI class definitions - ***************************************************************************/ - -#include "gui.h" - -GuiWindow::GuiWindow() -{ - width = 0; - height = 0; - focus = 0; // allow focus -} - -GuiWindow::GuiWindow(int w, int h) -{ - width = w; - height = h; - focus = 0; // allow focus -} - -GuiWindow::~GuiWindow() -{ -} - -void GuiWindow::Append(GuiElement* e) -{ - LOCK(this); - if (e == NULL) - return; - - Remove(e); - _elements.push_back(e); - e->SetParent(this); -} - -void GuiWindow::Insert(GuiElement* e, u32 index) -{ - LOCK(this); - if (e == NULL || index > (_elements.size() - 1)) - return; - - Remove(e); - _elements.insert(_elements.begin()+index, e); - e->SetParent(this); -} - -void GuiWindow::Remove(GuiElement* e) -{ - LOCK(this); - if (e == NULL) - return; - - for (u8 i = 0; i < _elements.size(); i++) - { - if(e == _elements.at(i)) - { - _elements.erase(_elements.begin()+i); - break; - } - } -} - -void GuiWindow::RemoveAll() -{ - LOCK(this); - _elements.clear(); -} - -GuiElement* GuiWindow::GetGuiElementAt(u32 index) const -{ - if (index >= _elements.size()) - return NULL; - return _elements.at(index); -} - -u32 GuiWindow::GetSize() -{ - return _elements.size(); -} - -void GuiWindow::Draw() -{ - LOCK(this); - if(_elements.size() == 0 || !this->IsVisible()) - return; - - for (u8 i = 0; i < _elements.size(); i++) - { - try { _elements.at(i)->Draw(); } - catch (const std::exception& e) { } - } - - this->UpdateEffects(); - - if(parentElement && state == STATE_DISABLED) - //Menu_DrawRectangle(0,0,screenwidth,screenheight,(GXColor){0xbe, 0xca, 0xd5, 0x70},1); - Menu_DrawRectangle(0,0,screenwidth,screenheight,(GXColor){0, 0, 0, 0x70},1); -} -void GuiWindow::DrawTooltip() -{ - LOCK(this); - if(_elements.size() == 0 || !this->IsVisible()) - return; - - for (u8 i = 0; i < _elements.size(); i++) - { - try { _elements.at(i)->DrawTooltip(); } - catch (const std::exception& e) { } - } -} -void GuiWindow::ResetState() -{ - LOCK(this); - if(state != STATE_DISABLED) - state = STATE_DEFAULT; - - for (u8 i = 0; i < _elements.size(); i++) - { - try { _elements.at(i)->ResetState(); } - catch (const std::exception& e) { } - } -} - -void GuiWindow::SetState(int s) -{ - LOCK(this); - state = s; - - for (u8 i = 0; i < _elements.size(); i++) - { - try { _elements.at(i)->SetState(s); } - catch (const std::exception& e) { } - } -} - -void GuiWindow::SetVisible(bool v) -{ - LOCK(this); - visible = v; - - for (u8 i = 0; i < _elements.size(); i++) - { - try { _elements.at(i)->SetVisible(v); } - catch (const std::exception& e) { } - } -} - -void GuiWindow::SetFocus(int f) -{ - LOCK(this); - focus = f; - - if(f == 1) - this->MoveSelectionVert(1); - else - this->ResetState(); -} - -void GuiWindow::ChangeFocus(GuiElement* e) -{ - LOCK(this); - if(parentElement) - return; // this is only intended for the main window - - for (u8 i = 0; i < _elements.size(); i++) - { - if(e == _elements.at(i)) - _elements.at(i)->SetFocus(1); - else if(_elements.at(i)->IsFocused() == 1) - _elements.at(i)->SetFocus(0); - } -} - -void GuiWindow::ToggleFocus(GuiTrigger * t) -{ - LOCK(this); - if(parentElement) - return; // this is only intended for the main window - - int found = -1; - int newfocus = -1; - u8 i; - - // look for currently in focus element - for (i = 0; i < _elements.size(); i++) - { - try - { - if(_elements.at(i)->IsFocused() == 1) - { - found = i; - break; - } - } - catch (const std::exception& e) { } - } - - // element with focus not found, try to give focus - if(found == -1) - { - for (i = 0; i < _elements.size(); i++) - { - try - { - if(_elements.at(i)->IsFocused() == 0 && _elements.at(i)->GetState() != STATE_DISABLED) // focus is possible (but not set) - { - _elements.at(i)->SetFocus(1); // give this element focus - break; - } - } - catch (const std::exception& e) { } - } - } - // change focus - else if(t->wpad.btns_d & (WPAD_BUTTON_1 | WPAD_BUTTON_1 | WPAD_CLASSIC_BUTTON_PLUS) - || t->pad.btns_d & PAD_BUTTON_B) - { - for (i = found; i < _elements.size(); i++) - { - try - { - if(_elements.at(i)->IsFocused() == 0 && _elements.at(i)->GetState() != STATE_DISABLED) // focus is possible (but not set) - { - newfocus = i; - _elements.at(i)->SetFocus(1); // give this element focus - _elements.at(found)->SetFocus(0); // disable focus on other element - break; - } - } - catch (const std::exception& e) { } - } - - if(newfocus == -1) - { - for (i = 0; i < found; i++) - { - try - { - if(_elements.at(i)->IsFocused() == 0 && _elements.at(i)->GetState() != STATE_DISABLED) // focus is possible (but not set) - { - _elements.at(i)->SetFocus(1); // give this element focus - _elements.at(found)->SetFocus(0); // disable focus on other element - break; - } - } - catch (const std::exception& e) { } - } - } - } -} - -int GuiWindow::GetSelected() -{ - // find selected element - int found = -1; - for (u8 i = 0; i < _elements.size(); i++) - { - try - { - if(_elements.at(i)->GetState() == STATE_SELECTED) - { - found = i; - break; - } - } - catch (const std::exception& e) { } - } - return found; -} - -// set element to left/right as selected -// there's probably a more clever way to do this, but this way works -void GuiWindow::MoveSelectionHor(int dir) -{ - LOCK(this); - int found = -1; - u16 left = 0; - u16 top = 0; - u8 i = 0; - - int selected = this->GetSelected(); - - if(selected >= 0) - { - left = _elements.at(selected)->GetLeft(); - top = _elements.at(selected)->GetTop(); - } - - // look for a button on the same row, to the left/right - for (i = 0; i < _elements.size(); i++) - { - try - { - if(_elements.at(i)->IsSelectable()) - { - if(_elements.at(i)->GetLeft()*dir > left*dir && _elements.at(i)->GetTop() == top) - { - if(found == -1) - found = i; - else if(_elements.at(i)->GetLeft()*dir < _elements.at(found)->GetLeft()*dir) - found = i; // this is a better match - } - } - } - catch (const std::exception& e) { } - } - if(found >= 0) - goto matchfound; - - // match still not found, let's try the first button in the next row - for (i = 0; i < _elements.size(); i++) - { - try - { - if(_elements.at(i)->IsSelectable()) - { - if(_elements.at(i)->GetTop()*dir > top*dir) - { - if(found == -1) - found = i; - else if(_elements.at(i)->GetTop()*dir < _elements.at(found)->GetTop()*dir) - found = i; // this is a better match - else if(_elements.at(i)->GetTop()*dir == _elements.at(found)->GetTop()*dir - && - _elements.at(i)->GetLeft()*dir < _elements.at(found)->GetLeft()*dir) - found = i; // this is a better match - } - } - } - catch (const std::exception& e) { } - } - - // match found - matchfound: - if(found >= 0) - { - _elements.at(found)->SetState(STATE_SELECTED); - if(selected >= 0) - _elements.at(selected)->ResetState(); - } -} - -void GuiWindow::MoveSelectionVert(int dir) -{ - LOCK(this); - int found = -1; - u16 left = 0; - u16 top = 0; - u8 i = 0; - - int selected = this->GetSelected(); - - if(selected >= 0) - { - left = _elements.at(selected)->GetLeft(); - top = _elements.at(selected)->GetTop(); - } - - // look for a button above/below, with the least horizontal difference - for (i = 0; i < _elements.size(); i++) - { - try - { - if(_elements.at(i)->IsSelectable()) - { - if(_elements.at(i)->GetTop()*dir > top*dir) - { - if(found == -1) - found = i; - else if(_elements.at(i)->GetTop()*dir < _elements.at(found)->GetTop()*dir) - found = i; // this is a better match - else if(_elements.at(i)->GetTop()*dir == _elements.at(found)->GetTop()*dir - && - abs(_elements.at(i)->GetLeft() - left) < - abs(_elements.at(found)->GetLeft() - left)) - found = i; - } - } - } - catch (const std::exception& e) { } - } - if(found >= 0) - goto matchfound; - - // match found - matchfound: - if(found >= 0) - { - _elements.at(found)->SetState(STATE_SELECTED); - if(selected >= 0) - _elements.at(selected)->ResetState(); - } -} - -void GuiWindow::Update(GuiTrigger * t) -{ - LOCK(this); - if(_elements.size() == 0 || (state == STATE_DISABLED && parentElement)) - return; - - for (u8 i = 0; i < _elements.size(); i++) - { - try { _elements.at(i)->Update(t); } - catch (const std::exception& e) { } - } - - this->ToggleFocus(t); - - if(focus) // only send actions to this window if it's in focus - { - // pad/joystick navigation - if(t->Right()) - this->MoveSelectionHor(1); - else if(t->Left()) - this->MoveSelectionHor(-1); - else if(t->Down()) - this->MoveSelectionVert(1); - else if(t->Up()) - this->MoveSelectionVert(-1); - } - - if(updateCB) - updateCB(this); -} diff --git a/source/listfiles.c b/source/listfiles.c deleted file mode 100644 index 89a5dc3b..00000000 --- a/source/listfiles.c +++ /dev/null @@ -1,50 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include - -#include "listfiles.h" - - -char filename[80]; - - -s32 filenamescmp(const void *a, const void *b) -{ - /* Compare strings */ - return stricmp((char *)a, (char *)b); -} - -int GetFiles(char * filespath) -{ - -int countfiles = 0; - -struct stat st; -DIR_ITER* dir; -dir = diropen (filespath); - -if (dir == NULL) //If empty - { - return 0; - } - else - { - while (dirnext(dir,filename,&st) == 0) - { - if ((st.st_mode & S_IFDIR) == 0) - { - // st.st_mode & S_IFDIR indicates a directory - snprintf(alldirfiles[countfiles], 70, "%s", filename); - countfiles++; - } - } - } - - qsort(alldirfiles, countfiles, sizeof(char[70]), filenamescmp); - -return countfiles; -} diff --git a/source/listfiles.h b/source/listfiles.h deleted file mode 100644 index dd3a5159..00000000 --- a/source/listfiles.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef _LISTFILES_H_ -#define _LISTFILES_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif - -char alldirfiles[300][70]; - -int GetFiles(char * filespath); - - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/source/main.cpp b/source/main.cpp index 30434325..828d748c 100644 --- a/source/main.cpp +++ b/source/main.cpp @@ -1,164 +1,161 @@ -/**************************************************************************** - * libwiigui Template - * Tantric 2009 +/* + * loadMii loader v0.3 + * main.c + * http://code.google.com/p/loadmii * - * demo.cpp - * Basic template/demonstration of libwiigui capabilities. For a - * full-featured app using many more extensions, check out Snes9x GX. - ***************************************************************************/ + * Copyright 2009 The Lemon Man + * Thanks to luccax, Wiipower, Aurelio and crediar + * usbGecko powered by Nuke + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301, USA. + */ #include -#include -#include -#include -#include -#include #include - -#include "FreeTypeGX.h" -#include "video.h" -#include "audio.h" -#include "menu.h" -#include "input.h" -#include "filelist.h" -#include "main.h" -#include "http.h" -#include "dns.h" -#include "fatmounter.h" -#include "disc.h" -#include "wbfs.h" -#include "sys.h" -#include "video2.h" -#include "wpad.h" -#include "cfg.h" -#include "language.h" -#include "fat.h" +#include +#include +#include +#include +#include +#include + +#include "pngu/pngu.h" +#include "video.h" +#include "filelist.h" +#include "dolloader.h" +#include "elfloader.h" -/* Constants */ -#define CONSOLE_XCOORD 260 -#define CONSOLE_YCOORD 115 -#define CONSOLE_WIDTH 340 -#define CONSOLE_HEIGHT 218 - -FreeTypeGX *fontSystem=0; -FreeTypeGX *fontClock=0; -int ExitRequested = 0; -bool netcheck = false; +PNGUPROP imgProp; +IMGCTX ctx; -/*Networking - Forsaekn*/ -int Net_Init(char *ip){ +u8 * GetImageData(void) { - s32 res; - while ((res = net_init()) == -EAGAIN) - { - usleep(100 * 1000); //100ms + u8 * data = NULL; + + int ret; + + ctx = PNGU_SelectImageFromBuffer(background_png); + if (!ctx) + return NULL; + + ret = PNGU_GetImageProperties(ctx, &imgProp); + if (ret != PNGU_OK) + return NULL; + + int len = imgProp.imgWidth * imgProp.imgHeight * 4; + + if(len%32) len += (32-len%32); + data = (u8 *)memalign (32, len); + ret = PNGU_DecodeTo4x4RGBA8 (ctx, imgProp.imgWidth, imgProp.imgHeight, data, 255); + DCFlushRange(data, len); + + PNGU_ReleaseImageContext(ctx); + + return data; +} + +void Background_Show(int x, int y, int z, u8 * data, int angle, int scaleX, int scaleY, int alpha) +{ + /* Draw image */ + Menu_DrawImg(x, y, z, imgProp.imgWidth, imgProp.imgHeight, data, angle, scaleX, scaleY, alpha); +} + + +int main(int argc, char **argv) { + + u32 cookie; + FILE *exeFile; + void *exeBuffer = (void *)EXECUTABLE_MEM_ADDR; + int exeSize = 0; + u32 exeEntryPointAddress = 0; + entrypoint exeEntryPoint; + + + /* int videomod */ + InitVideo(); + + /* get imagedata */ + u8 * imgdata = GetImageData(); + + /* fadein of image */ + for(int i = 0; i < 255; i = i+10) { + if(i>255) i = 255; + Background_Show(0, 0, 0, imgdata, 0, 1, 1, i); + Menu_Render(); + } + /* check devices */ + __io_wiisd.startup(); + fatMount("SD", &__io_wiisd, 0, 32, 128); + + /* Open dol File and check exist */ + exeFile = fopen ("SD:/apps/usbloader_gx/boot.dol" ,"rb"); + if (exeFile==NULL) { + fclose(exeFile); + exeFile = fopen ("SD:/apps/usbloader_gx/boot.elf" ,"rb"); + if (exeFile==NULL) { + SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0); + } } - if (if_config(ip, NULL, NULL, true) < 0) { - printf(" Error reading IP address, exiting"); - usleep(1000 * 1000 * 1); //1 sec - return FALSE; + fseek (exeFile, 0, SEEK_END); + exeSize = ftell(exeFile); + fseek (exeFile, 0, SEEK_SET); + if(fread (exeBuffer, 1, exeSize, exeFile) != (unsigned int) exeSize) { + printf("Can't open DOL File...\n"); + SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0);; } - return TRUE; -} -void ExitApp() -{ - ShutoffRumble(); - StopGX(); - ShutdownAudio(); + fclose (exeFile); + + /* load entry point */ + struct __argv args[10]; - SDCard_deInit(); - - //WPAD_Flush(0); - //WPAD_Disconnect(0); - //WPAD_Shutdown(); - //exit(0); -} - -void -DefaultSettings() -{ - Settings.video = discdefault; - Settings.vpatch = off; - Settings.language = ConsoleLangDefault; - Settings.ocarina = off; - Settings.hddinfo = hr12; - Settings.sinfo = ((THEME.showID) ? GameID : Neither); - Settings.rumble = RumbleOn; - if (THEME.showRegion) - { - Settings.sinfo = ((Settings.sinfo == GameID) ? Both : GameRegion); - } - Settings.volume = v80; - Settings.tooltips = TooltipsOn; - snprintf(Settings.unlockCode, sizeof(Settings.unlockCode), "ab121b"); - Settings.parentalcontrol = 0; - Settings.cios = ios249; - Settings.xflip = no; - Settings.qboot = no; - Settings.unicodefix = 0; - Settings.wiilight = 1; - Settings.patchcountrystrings = 0; - - CFG_LoadGlobal(); -} - - -int -main(int argc, char *argv[]) -{ - - s32 ret2; - - SDCard_Init(); - lang_default(); - CFG_Load(); + int ret = valid_elf_image(exeBuffer); + if (ret == 1) { + exeEntryPointAddress = load_elf_image(exeBuffer); + } else { + exeEntryPointAddress = load_dol_image(exeBuffer, args); + } - DefaultSettings(); - - - SDCard_deInit(); - - /* Load Custom IOS */ - if(Settings.cios == ios222) { - ret2 = IOS_ReloadIOS(222); - if (ret2 < 0) { - Settings.cios = ios249; - ret2 = IOS_ReloadIOS(249); - } - } else { - ret2 = IOS_ReloadIOS(249); + /* fadeout of image */ + for(int i = 255; i > 1; i = i-7) { + if(i < 0) i = 0; + Background_Show(0, 0, 0, imgdata, 0, 1, 1, i); + Menu_Render(); } - if (ret2 < 0) { - printf("ERROR: cIOS could not be loaded!"); - SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0); + fatUnmount("SD"); + __io_wiisd.shutdown(); + StopGX(); + + if (exeEntryPointAddress == 0) { + printf("EntryPointAddress failed...\n"); + SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0);; } - SDCard_Init(); + exeEntryPoint = (entrypoint) exeEntryPointAddress; - Sys_Init(); - //Video_SetMode(); - //Con_Init(CONSOLE_XCOORD, CONSOLE_YCOORD, CONSOLE_WIDTH, CONSOLE_HEIGHT); - //Wpad_Init(); - - PAD_Init(); - InitVideo(); // Initialise video - InitAudio(); // Initialize audio - - - fontSystem = new FreeTypeGX(); - fontSystem->loadFont(font_ttf, font_ttf_size, 0); - fontSystem->setCompatibilityMode(FTGX_COMPATIBILITY_DEFAULT_TEVOP_GX_PASSCLR | FTGX_COMPATIBILITY_DEFAULT_VTXDESC_GX_NONE); - - fontClock = new FreeTypeGX(); - fontClock->loadFont(clock_ttf, clock_ttf_size, 0); - fontClock->setCompatibilityMode(FTGX_COMPATIBILITY_DEFAULT_TEVOP_GX_PASSCLR | FTGX_COMPATIBILITY_DEFAULT_VTXDESC_GX_NONE); - - InitGUIThreads(); - MainMenu(MENU_CHECK); + /* cleaning up and load dol */ + SYS_ResetSystem(SYS_SHUTDOWN, 0, 0); + _CPU_ISR_Disable (cookie); + __exception_closeall (); + exeEntryPoint (); + _CPU_ISR_Restore (cookie); return 0; + } diff --git a/source/main.h b/source/main.h deleted file mode 100644 index 14755619..00000000 --- a/source/main.h +++ /dev/null @@ -1,22 +0,0 @@ -/**************************************************************************** - * libwiigui Template - * Tantric 2009 - * - * demo.h - ***************************************************************************/ - -#ifndef _MAIN_H_ -#define _MAIN_H_ - -#include "FreeTypeGX.h" - -extern struct SSettings Settings; - -void ExitApp(); -void DefaultSettings(); -extern int ExitRequested; -extern FreeTypeGX *fontSystem; -extern bool netcheck; -extern int Net_Init(char *ip); - -#endif diff --git a/source/menu.cpp b/source/menu.cpp deleted file mode 100644 index 10136637..00000000 --- a/source/menu.cpp +++ /dev/null @@ -1,6413 +0,0 @@ -/**************************************************************************** - * libwiigui Template - * Tantric 2009 - * - * menu.cpp - * Menu flow routines - handles all menu logic - ***************************************************************************/ -#include -#include -#include -#include -#include -#include -#include -#include //CLOCK -#include //CLOCK -#include - -#include "libwiigui/gui.h" -#include "menu.h" -#include "main.h" -#include "input.h" -#include "http.h" -#include "dns.h" -#include "partition.h" -#include "wbfs.h" -#include "utils.h" -#include "usbstorage.h" -#include "disc.h" -#include "filelist.h" -#include "wdvd.h" -#include "libwbfs/libwbfs.h" -#include "sys.h" -#include "libwiigui/gui_gamegrid.h" -#include "libwiigui/gui_gamecarousel.h" -#include "patchcode.h" -#include "wpad.h" -#include "cfg.h" -#include "language.h" -#include "libwiigui/gui_customoptionbrowser.h" -#include "libwiigui/gui_gamebrowser.h" -#include "libwiigui/gui_diskcover.h" -#include "listfiles.h" -#include "fatmounter.h" -#include "updater.h" - -#define MAX_CHARACTERS 38 -extern FreeTypeGX *fontClock; //CLOCK - -static GuiImage * coverImg = NULL; -static GuiImageData * cover = NULL; - -//char GamesHDD[320][14]; - -static struct discHdr *gameList = NULL; -static GuiImageData * pointer[4]; -static GuiImage * bgImg = NULL; -static GuiButton * btnLogo = NULL; -static GuiImageData * background = NULL; -static GuiText prTxt(NULL, 26, (GXColor){THEME.prompttxt_r, THEME.prompttxt_g, THEME.prompttxt_b, 255}); -static GuiText timeTxt(NULL, 26, (GXColor){THEME.prompttxt_r, THEME.prompttxt_g, THEME.prompttxt_b, 255}); -static GuiText sizeTxt(NULL, 26, (GXColor){THEME.prompttxt_r, THEME.prompttxt_g, THEME.prompttxt_b, 255}); -static GuiText *GameIDTxt = NULL; -static GuiText *GameRegionTxt = NULL; -static GuiSound * bgMusic = NULL; -static wbfs_t *hdd = NULL; -static u32 gameCnt = 0; -static s32 gameSelected = 0, gameStart = 0; -static GuiWindow * mainWindow = NULL; -static lwp_t guithread = LWP_THREAD_NULL; -static bool guiHalt = true; -static GuiImageData progressbar(progressbar_png); -static GuiImage progressbarImg(&progressbar); -int godmode = 0; -int height = 224; -int width = 160; -static float gamesize = 0.00; -static int startat = 0; -static int offset = 0, networkisinitialized = 0; -int vol = Settings.volume; -static int datag = 0; -int datagB =0; -int dataed = -1; -int cosa=0,sina=0,offa=0; -u8 dispFave=0; - -//downloadvariables -static char missingFiles[500][12]; //fixed -static int cntMissFiles = 0; - -int direction = 0; // direction the gameprompt slides in - -static char gameregion[7]; -//power button fix -extern u8 shutdown; -extern u8 reset; - -//Wiilight stuff -static vu32 *_wiilight_reg = (u32*)0xCD0000C0; -void wiilight(int enable){ // Toggle wiilight (thanks Bool for wiilight source) - u32 val = (*_wiilight_reg&~0x20); - if(enable && Settings.wiilight) val |= 0x20; - *_wiilight_reg=val; -} - -//Prototypes -int WindowPrompt(const char *title, const char *msg, const char *btn1Label, const char *btn2Label, const char *btn3Label, const char *btn4Label); -static void HaltGui(); -static void ResumeGui(); -extern const u8 data1; - - -bool findfile(const char * filename, const char * path) -{ -DIR *dir; -struct dirent *file; - -dir = opendir(path); - -char temp[11]; -while ((file = readdir(dir))) -{ - snprintf(temp,sizeof(temp),"%s",file->d_name); - if (!strncmpi(temp,filename,11)) - { - //WindowPrompt(path, filename,"go" ,0); - closedir(dir); - return true; - } - } - closedir(dir); - return false; -} - -/**************************************************************************** - * ResumeGui - * - * Signals the GUI thread to start, and resumes the thread. This is called - * after finishing the removal/insertion of new elements, and after initial - * GUI setup. - ***************************************************************************/ -static void -ResumeGui() -{ - guiHalt = false; - LWP_ResumeThread (guithread); -} - -/**************************************************************************** - * HaltGui - * - * Signals the GUI thread to stop, and waits for GUI thread to stop - * This is necessary whenever removing/inserting new elements into the GUI. - * This eliminates the possibility that the GUI is in the middle of accessing - * an element that is being changed. - ***************************************************************************/ -static void -HaltGui() -{ - guiHalt = true; - - // wait for thread to finish - while(!LWP_ThreadIsSuspended(guithread)) - usleep(50); -} - -/**************************************************************************** - * WindowCredits - * Display credits - ***************************************************************************/ -static void WindowCredits(void * ptr) -{ - int angle = 0; - GuiSound * creditsMusic = NULL; - - if(btnLogo->GetState() != STATE_CLICKED) { - return; - } - s32 thetimeofbg = bgMusic->GetPlayTime(); - StopOgg(); - - creditsMusic = new GuiSound(credits_music_ogg, credits_music_ogg_size, SOUND_OGG, 55); - creditsMusic->SetVolume(55); - creditsMusic->SetLoop(1); - creditsMusic->Play(); - - btnLogo->ResetState(); - - bool exit = false; - int i = 0; - int y = 20; - - GuiWindow creditsWindow(screenwidth,screenheight); - GuiWindow creditsWindowBox(580,448); - creditsWindowBox.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE); - - GuiImageData creditsBox(credits_bg_png); - GuiImage creditsBoxImg(&creditsBox); - creditsBoxImg.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE); - creditsWindowBox.Append(&creditsBoxImg); - - GuiImageData star(little_star_png); - GuiImage starImg(&star); - starImg.SetWidescreen(CFG.widescreen); //added - starImg.SetAlignment(ALIGN_LEFT, ALIGN_TOP); - starImg.SetPosition(505,350); - - int numEntries = 25; - GuiText * txt[numEntries]; - - txt[i] = new GuiText(LANGUAGE.Credits, 26, (GXColor){255, 255, 255, 255}); - txt[i]->SetAlignment(ALIGN_CENTRE, ALIGN_TOP); txt[i]->SetPosition(0,12); i++; - - char SvnRev[10]; - snprintf(SvnRev, 10, "Rev%s", SVN_REV); - - txt[i] = new GuiText(SvnRev, 18, (GXColor){255, 255, 255, 255}); - txt[i]->SetAlignment(ALIGN_RIGHT, ALIGN_TOP); txt[i]->SetPosition(-30,y); i++; y+=34; - - txt[i] = new GuiText("USB Loader GX", 24, (GXColor){255, 255, 255, 255}); - txt[i]->SetAlignment(ALIGN_CENTRE, ALIGN_TOP); txt[i]->SetPosition(0,y); i++; y+=26; - - txt[i] = new GuiText(": http://code.google.com/p/usbloader-gui/", 20, (GXColor){255, 255, 255, 255}); - txt[i]->SetAlignment(ALIGN_CENTRE, ALIGN_TOP); txt[i]->SetPosition(50,y); i++; //y+=28; - - txt[i] = new GuiText(LANGUAGE.OfficialSite, 20, (GXColor){255, 255, 255, 255}); - txt[i]->SetAlignment(ALIGN_CENTRE, ALIGN_TOP); txt[i]->SetPosition(-180,y); i++; y+=28; - - GuiText::SetPresets(22, (GXColor){255, 255, 255, 255}, 0, GuiText::WRAP, - FTGX_JUSTIFY_LEFT | FTGX_ALIGN_TOP, ALIGN_LEFT, ALIGN_TOP); - - txt[i] = new GuiText("Coding:"); - txt[i]->SetAlignment(ALIGN_LEFT, ALIGN_TOP); txt[i]->SetPosition(170,y); - i++; - - txt[i] = new GuiText("dimok"); - txt[i]->SetAlignment(ALIGN_LEFT, ALIGN_TOP); txt[i]->SetPosition(320,y); - i++; - y+=22; - - txt[i] = new GuiText("nIxx"); - txt[i]->SetAlignment(ALIGN_LEFT, ALIGN_TOP); txt[i]->SetPosition(320,y); - i++; - y+=22; - - txt[i] = new GuiText("hungyip84"); - txt[i]->SetAlignment(ALIGN_LEFT, ALIGN_TOP); txt[i]->SetPosition(320,y); - i++; - y+=22; - - txt[i] = new GuiText("giantpune"); - txt[i]->SetAlignment(ALIGN_LEFT, ALIGN_TOP); txt[i]->SetPosition(320,y); - i++; - y+=22; - txt[i] = new GuiText("ardi"); - txt[i]->SetAlignment(ALIGN_LEFT, ALIGN_TOP); txt[i]->SetPosition(320,y); - i++; - y+=24; - - txt[i] = new GuiText("Design:"); - txt[i]->SetAlignment(ALIGN_LEFT, ALIGN_TOP); txt[i]->SetPosition(170,y); - i++; - - txt[i] = new GuiText("cyrex"); - txt[i]->SetAlignment(ALIGN_LEFT, ALIGN_TOP); txt[i]->SetPosition(320,y); - i++; - y+=22; - - txt[i] = new GuiText("NeoRame"); - txt[i]->SetAlignment(ALIGN_LEFT, ALIGN_TOP); txt[i]->SetPosition(320,y); - i++; - y+=22; - - txt[i] = new GuiText("WiiShizza"); - txt[i]->SetAlignment(ALIGN_LEFT, ALIGN_TOP); txt[i]->SetPosition(320,y); - i++; - y+=28; - - txt[i] = new GuiText(LANGUAGE.Specialthanksto); - txt[i]->SetAlignment(ALIGN_CENTRE, ALIGN_TOP); txt[i]->SetPosition(-50,y); - i++; - - txt[i] = new GuiText(":"); - txt[i]->SetAlignment(ALIGN_CENTRE, ALIGN_TOP); txt[i]->SetPosition(30,y+3); - i++; - y+=22; - - txt[i] = new GuiText("Fishears/Nuke Ocarina & WiiPower Vidpatch"); - txt[i]->SetAlignment(ALIGN_CENTRE, ALIGN_TOP); txt[i]->SetPosition(0,y); - i++; - - txt[i] = new GuiText(LANGUAGE.For); - txt[i]->SetAlignment(ALIGN_CENTRE, ALIGN_TOP); txt[i]->SetPosition(-80,y); - txt[i]->SetPosition(-80, y); - i++; - txt[i] = new GuiText(LANGUAGE.For); - txt[i]->SetAlignment(ALIGN_CENTRE, ALIGN_TOP); txt[i]->SetPosition(130,y); - txt[i]->SetPosition(130, y); - i++; - - y+=22; - - txt[i] = new GuiText("Tantric libwiigui"); - txt[i]->SetAlignment(ALIGN_CENTRE, ALIGN_TOP); txt[i]->SetPosition(0,y); - i++; - txt[i] = new GuiText(LANGUAGE.For); - txt[i]->SetAlignment(ALIGN_CENTRE, ALIGN_TOP); //txt[i]->SetPosition(-3,y); - txt[i]->SetPosition(-3, y); - i++; - y+=22; - - txt[i] = new GuiText("Waninkoko & Kwiirk USB Loader"); - txt[i]->SetAlignment(ALIGN_CENTRE, ALIGN_TOP); txt[i]->SetPosition(0,y); - i++; - txt[i] = new GuiText(LANGUAGE.For); - txt[i]->SetAlignment(ALIGN_CENTRE, ALIGN_TOP); txt[i]->SetPosition(30,y); - txt[i]->SetPosition(30, y); - i++; - y+=22; - - txt[i] = new GuiText(LANGUAGE.theUSBLoaderandreleasingthesourcecode); - txt[i]->SetAlignment(ALIGN_CENTRE, ALIGN_TOP); txt[i]->SetPosition(0,y); - i++; - y+=22; - - for(i=0; i < numEntries; i++) - creditsWindowBox.Append(txt[i]); - - - creditsWindow.Append(&creditsWindowBox); - creditsWindow.Append(&starImg); - - while(!exit) - { - creditsWindow.Draw(); - - angle ++; - angle = int(angle) % 360; - usleep(12000); - starImg.SetAngle(angle); - - for(i=3; i >= 0; i--) - { - #ifdef HW_RVL - if(userInput[i].wpad.ir.valid) - Menu_DrawImg(userInput[i].wpad.ir.x-48, userInput[i].wpad.ir.y-48, 200.0, - 96, 96, pointer[i]->GetImage(), userInput[i].wpad.ir.angle, CFG.widescreen? 0.8 : 1, 1, 255); - if(Settings.rumble == RumbleOn){ - DoRumble(i); - } - #endif - } - - Menu_Render(); - - for(i=0; i < 4; i++) - { - if(userInput[i].wpad.btns_d || userInput[i].pad.btns_d) - exit = true; - } - } - - // clear buttons pressed - for(i=0; i < 4; i++) - { - userInput[i].wpad.btns_d = 0; - userInput[i].pad.btns_d = 0; - } - creditsMusic->Stop(); - for(i=0; i < numEntries; i++) - delete txt[i]; - - delete creditsMusic; - - if(!strcmp("", CFG.oggload_path) || !strcmp("notset", CFG.ogg_path)) { - bgMusic->Play(); - } else { - bgMusic->PlayOggFile(CFG.ogg_path); - } - bgMusic->SetPlayTime(thetimeofbg); - SetVolumeOgg(255*(vol/100.0)); -} - -/**************************************************************************** - * WindowPrompt - * - * Displays a prompt window to user, with information, an error message, or - * presenting a user with a choice of up to 4 Buttons. - * - * Give him 1 Titel, 1 Subtitel and 4 Buttons - * If titel/subtitle or one of the buttons is not needed give him a 0 on that - * place. - ***************************************************************************/ -int -WindowPrompt(const char *title, const char *msg, const char *btn1Label, - const char *btn2Label, const char *btn3Label, - const char *btn4Label) -{ - int choice = -1; - - GuiWindow promptWindow(472,320); - promptWindow.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE); - promptWindow.SetPosition(0, -10); - GuiSound btnSoundOver(button_over_pcm, button_over_pcm_size, SOUND_PCM, vol); - GuiSound btnClick(button_click2_pcm, button_click2_pcm_size, SOUND_PCM, vol); - char imgPath[50]; - snprintf(imgPath, sizeof(imgPath), "%sbutton_dialogue_box.png", CFG.theme_path); - GuiImageData btnOutline(imgPath, button_dialogue_box_png); - snprintf(imgPath, sizeof(imgPath), "%sdialogue_box.png", CFG.theme_path); - GuiImageData dialogBox(imgPath, dialogue_box_png); - - - GuiTrigger trigA; - trigA.SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A); - GuiTrigger trigB; - trigB.SetButtonOnlyTrigger(-1, WPAD_BUTTON_B | WPAD_CLASSIC_BUTTON_B, PAD_BUTTON_B); - - GuiImage dialogBoxImg(&dialogBox); - if (Settings.wsprompt == yes){ - dialogBoxImg.SetWidescreen(CFG.widescreen); - } - - GuiText titleTxt(title, 26, (GXColor){THEME.prompttxt_r, THEME.prompttxt_g, THEME.prompttxt_b, 255}); //{0, 0, 0, 255}); - titleTxt.SetAlignment(ALIGN_CENTRE, ALIGN_TOP); - titleTxt.SetPosition(0,55); - GuiText msgTxt(msg, 22, (GXColor){THEME.prompttxt_r, THEME.prompttxt_g, THEME.prompttxt_b, 255}); //{0, 0, 0, 255}); - msgTxt.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE); - msgTxt.SetPosition(0,-40); - msgTxt.SetMaxWidth(430); - - GuiText btn1Txt(btn1Label, 22, (GXColor){THEME.prompttxt_r, THEME.prompttxt_g, THEME.prompttxt_b, 255}); //{0, 0, 0, 255}); - GuiImage btn1Img(&btnOutline); - if (Settings.wsprompt == yes){ - btn1Txt.SetWidescreen(CFG.widescreen); - btn1Img.SetWidescreen(CFG.widescreen); - } - - GuiButton btn1(&btn1Img, &btn1Img, 0,3,0,0,&trigA,&btnSoundOver,&btnClick,1); - btn1.SetLabel(&btn1Txt); - btn1.SetState(STATE_SELECTED); - - GuiText btn2Txt(btn2Label, 22, (GXColor){THEME.prompttxt_r, THEME.prompttxt_g, THEME.prompttxt_b, 255}); //{0, 0, 0, 255}); - GuiImage btn2Img(&btnOutline); - if (Settings.wsprompt == yes){ - btn2Txt.SetWidescreen(CFG.widescreen); - btn2Img.SetWidescreen(CFG.widescreen); - } - GuiButton btn2(&btn2Img, &btn2Img, 0,3,0,0,&trigA,&btnSoundOver,&btnClick,1); - btn2.SetLabel(&btn2Txt); - if(!btn3Label && !btn4Label) - btn2.SetTrigger(&trigB); - - GuiText btn3Txt(btn3Label, 22, (GXColor){THEME.prompttxt_r, THEME.prompttxt_g, THEME.prompttxt_b, 255}); //{0, 0, 0, 255}); - GuiImage btn3Img(&btnOutline); - if (Settings.wsprompt == yes){ - btn3Txt.SetWidescreen(CFG.widescreen); - btn3Img.SetWidescreen(CFG.widescreen); - } - GuiButton btn3(&btn3Img, &btn3Img, 0,3,0,0,&trigA,&btnSoundOver,&btnClick,1); - btn3.SetLabel(&btn3Txt); - if(!btn4Label) - btn3.SetTrigger(&trigB); - - GuiText btn4Txt(btn4Label, 22, (GXColor){THEME.prompttxt_r, THEME.prompttxt_g, THEME.prompttxt_b, 255}); //{0, 0, 0, 255}); - GuiImage btn4Img(&btnOutline); - if (Settings.wsprompt == yes){ - btn4Txt.SetWidescreen(CFG.widescreen); - btn4Img.SetWidescreen(CFG.widescreen); - } - GuiButton btn4(&btn4Img, &btn4Img, 0,3,0,0,&trigA,&btnSoundOver,&btnClick,1); - btn4.SetLabel(&btn4Txt); - if(btn4Label) - btn4.SetTrigger(&trigB); - - if ((Settings.wsprompt == yes) && (CFG.widescreen)){/////////////adjust buttons for widescreen - msgTxt.SetMaxWidth(330); - - if(btn2Label && !btn3Label && !btn4Label) - { - btn1.SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM); - btn1.SetPosition(70, -80); - btn2.SetAlignment(ALIGN_RIGHT, ALIGN_BOTTOM); - btn2.SetPosition(-70, -80); - btn3.SetAlignment(ALIGN_RIGHT, ALIGN_BOTTOM); - btn3.SetPosition(-70, -55); - btn4.SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM); - btn4.SetPosition(70, -55); - } else if(btn2Label && btn3Label && !btn4Label) { - btn1.SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM); - btn1.SetPosition(70, -120); - btn2.SetAlignment(ALIGN_RIGHT, ALIGN_BOTTOM); - btn2.SetPosition(-70, -120); - btn3.SetAlignment(ALIGN_CENTRE, ALIGN_BOTTOM); - btn3.SetPosition(0, -55); - btn4.SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM); - btn4.SetPosition(70, -55); - } else if(btn2Label && btn3Label && btn4Label) { - btn1.SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM); - btn1.SetPosition(70, -120); - btn2.SetAlignment(ALIGN_RIGHT, ALIGN_BOTTOM); - btn2.SetPosition(-70, -120); - btn3.SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM); - btn3.SetPosition(70, -55); - btn4.SetAlignment(ALIGN_RIGHT, ALIGN_BOTTOM); - btn4.SetPosition(-70, -55); - } else if(!btn2Label && btn3Label && btn4Label) { - btn1.SetAlignment(ALIGN_CENTRE, ALIGN_BOTTOM); - btn1.SetPosition(0, -120); - btn2.SetAlignment(ALIGN_RIGHT, ALIGN_BOTTOM); - btn2.SetPosition(-70, -120); - btn3.SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM); - btn3.SetPosition(70, -55); - btn4.SetAlignment(ALIGN_RIGHT, ALIGN_BOTTOM); - btn4.SetPosition(-70, -55); - } else { - btn1.SetAlignment(ALIGN_CENTRE, ALIGN_BOTTOM); - btn1.SetPosition(0, -80); - btn2.SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM); - btn2.SetPosition(70, -120); - btn3.SetAlignment(ALIGN_RIGHT, ALIGN_BOTTOM); - btn3.SetPosition(-70, -55); - btn4.SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM); - btn4.SetPosition(70, -55); - } - } else { - - if(btn2Label && !btn3Label && !btn4Label) { - btn1.SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM); - btn1.SetPosition(40, -45); - btn2.SetAlignment(ALIGN_RIGHT, ALIGN_BOTTOM); - btn2.SetPosition(-40, -45); - btn3.SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM); - btn3.SetPosition(50, -65); - btn4.SetAlignment(ALIGN_RIGHT, ALIGN_BOTTOM); - btn4.SetPosition(-50, -65); - } else if(btn2Label && btn3Label && !btn4Label) { - btn1.SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM); - btn1.SetPosition(50, -120); - btn2.SetAlignment(ALIGN_RIGHT, ALIGN_BOTTOM); - btn2.SetPosition(-50, -120); - btn3.SetAlignment(ALIGN_CENTRE, ALIGN_BOTTOM); - btn3.SetPosition(0, -65); - btn4.SetAlignment(ALIGN_RIGHT, ALIGN_BOTTOM); - btn4.SetPosition(-50, -65); - } else if(btn2Label && btn3Label && btn4Label) { - btn1.SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM); - btn1.SetPosition(50, -120); - btn2.SetAlignment(ALIGN_RIGHT, ALIGN_BOTTOM); - btn2.SetPosition(-50, -120); - btn3.SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM); - btn3.SetPosition(50, -65); - btn4.SetAlignment(ALIGN_RIGHT, ALIGN_BOTTOM); - btn4.SetPosition(-50, -65); - } else if(!btn2Label && btn3Label && btn4Label) { - btn1.SetAlignment(ALIGN_CENTRE, ALIGN_BOTTOM); - btn1.SetPosition(0, -120); - btn2.SetAlignment(ALIGN_RIGHT, ALIGN_BOTTOM); - btn2.SetPosition(-50, -120); - btn3.SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM); - btn3.SetPosition(50, -65); - btn4.SetAlignment(ALIGN_RIGHT, ALIGN_BOTTOM); - btn4.SetPosition(-50, -65); - } else { - btn1.SetAlignment(ALIGN_CENTRE, ALIGN_BOTTOM); - btn1.SetPosition(0, -45); - btn2.SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM); - btn2.SetPosition(50, -120); - btn3.SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM); - btn3.SetPosition(50, -65); - btn4.SetAlignment(ALIGN_RIGHT, ALIGN_BOTTOM); - btn4.SetPosition(-50, -65); - } - - } - - promptWindow.Append(&dialogBoxImg); - promptWindow.Append(&titleTxt); - promptWindow.Append(&msgTxt); - - if(btn1Label) - promptWindow.Append(&btn1); - if(btn2Label) - promptWindow.Append(&btn2); - if(btn3Label) - promptWindow.Append(&btn3); - if(btn4Label) - promptWindow.Append(&btn4); - - promptWindow.SetEffect(EFFECT_SLIDE_TOP | EFFECT_SLIDE_IN, 50); - HaltGui(); - mainWindow->SetState(STATE_DISABLED); - mainWindow->Append(&promptWindow); - mainWindow->ChangeFocus(&promptWindow); - ResumeGui(); - - while(choice == -1) - { - VIDEO_WaitVSync(); - if(shutdown == 1) - { - wiilight(0); - Sys_Shutdown(); - } - if(reset == 1) - Sys_Reboot(); - if(btn1.GetState() == STATE_CLICKED) { - choice = 1; - } - else if(btn2.GetState() == STATE_CLICKED) { - if(!btn3Label) - choice = 0; - else - choice = 2; - } - else if(btn3.GetState() == STATE_CLICKED) { - if(!btn4Label) - choice = 0; - else - choice = 3; - } - else if(btn4.GetState() == STATE_CLICKED) { - choice = 0; - } - } - - promptWindow.SetEffect(EFFECT_SLIDE_TOP | EFFECT_SLIDE_OUT, 50); - while(promptWindow.GetEffect() > 0) usleep(50); - HaltGui(); - mainWindow->Remove(&promptWindow); - mainWindow->SetState(STATE_DEFAULT); - ResumeGui(); - return choice; -} - -/**************************************************************************** - * WindowExitPrompt - * - * Displays a prompt window to user, with information, an error message, or - * presenting a user with a choice of up to 4 Buttons. - * - * Give him 1 Titel, 1 Subtitel and 4 Buttons - * If titel/subtitle or one of the buttons is not needed give him a 0 on that - * place. - ***************************************************************************/ -int -WindowExitPrompt(const char *title, const char *msg, const char *btn1Label, - const char *btn2Label, const char *btn3Label, - const char *btn4Label) -{ - GuiSound * homein = NULL; - homein = new GuiSound(menuin_ogg, menuin_ogg_size, SOUND_OGG, vol); - homein->SetVolume(vol); - homein->SetLoop(0); - homein->Play(); - - GuiSound * homeout = NULL; - homeout = new GuiSound(menuout_ogg, menuout_ogg_size, SOUND_OGG, vol); - homeout->SetVolume(vol); - homeout->SetLoop(0); - - int choice = -1; - char imgPath[100]; - u8 HBC=0; - GuiWindow promptWindow(640,480); - promptWindow.SetAlignment(ALIGN_LEFT, ALIGN_TOP); - promptWindow.SetPosition(0, 0); - GuiSound btnSoundOver(button_over_pcm, button_over_pcm_size, SOUND_PCM, vol); - GuiSound btnClick(button_click2_pcm, button_click2_pcm_size, SOUND_PCM, vol); - - GuiImageData top(exit_top_png); - GuiImageData topOver(exit_top_over_png); - GuiImageData bottom(exit_bottom_png); - GuiImageData bottomOver(exit_bottom_over_png); - GuiImageData button(exit_button_png); - GuiImageData wiimote(wiimote_png); - GuiImageData close(closebutton_png); - - snprintf(imgPath, sizeof(imgPath), "%sbattery_white.png", CFG.theme_path); - GuiImageData battery(imgPath, battery_white_png); - snprintf(imgPath, sizeof(imgPath), "%sbattery_red.png", CFG.theme_path); - GuiImageData batteryRed(imgPath, battery_red_png); - snprintf(imgPath, sizeof(imgPath), "%sbattery_bar_white.png", CFG.theme_path); - GuiImageData batteryBar(imgPath, battery_bar_white_png); - - #ifdef HW_RVL - int i = 0, ret = 0, level; - char txt[3]; - GuiText * batteryTxt[4]; - GuiImage * batteryImg[4]; - GuiImage * batteryBarImg[4]; - GuiButton * batteryBtn[4]; - - for(i=0; i < 4; i++) - { - - if(i == 0) - sprintf(txt, "P%d", i+1); - else - sprintf(txt, "P%d", i+1); - - batteryTxt[i] = new GuiText(txt, 22, (GXColor){255,255,255, 255}); - batteryTxt[i]->SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE); - batteryImg[i] = new GuiImage(&battery); - batteryImg[i]->SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE); - batteryImg[i]->SetPosition(36, 0); - batteryImg[i]->SetTile(0); - batteryBarImg[i] = new GuiImage(&batteryBar); - batteryBarImg[i]->SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE); - batteryBarImg[i]->SetPosition(33, 0); - - batteryBtn[i] = new GuiButton(40, 20); - batteryBtn[i]->SetLabel(batteryTxt[i]); - batteryBtn[i]->SetImage(batteryBarImg[i]); - batteryBtn[i]->SetIcon(batteryImg[i]); - batteryBtn[i]->SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE); - batteryBtn[i]->SetRumble(false); - batteryBtn[i]->SetAlpha(70); - batteryBtn[i]->SetEffect(EFFECT_SLIDE_BOTTOM | EFFECT_SLIDE_IN, 50); - } - - batteryBtn[0]->SetPosition(180,150); - batteryBtn[1]->SetPosition(284, 150); - batteryBtn[2]->SetPosition(388, 150); - batteryBtn[3]->SetPosition(494, 150); - - - char * sig = (char *)0x80001804; - if( - sig[0] == 'S' && - sig[1] == 'T' && - sig[2] == 'U' && - sig[3] == 'B' && - sig[4] == 'H' && - sig[5] == 'A' && - sig[6] == 'X' && - sig[7] == 'X') - HBC=1; // Exit to HBC - #endif - - GuiTrigger trigA; - trigA.SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A); - GuiTrigger trigB; - trigB.SetButtonOnlyTrigger(-1, WPAD_BUTTON_B | WPAD_CLASSIC_BUTTON_B, PAD_BUTTON_B); - GuiTrigger trigHome; - trigHome.SetButtonOnlyTrigger(-1, WPAD_BUTTON_HOME | WPAD_CLASSIC_BUTTON_HOME, 0); - - GuiText titleTxt(LANGUAGE.Homemenu, 36, (GXColor){255, 255, 255, 255}); - titleTxt.SetAlignment(ALIGN_CENTRE, ALIGN_TOP); - titleTxt.SetPosition(-180,40); - titleTxt.SetEffect(EFFECT_SLIDE_TOP | EFFECT_SLIDE_IN, 50); - - GuiText closeTxt(LANGUAGE.Close, 28, (GXColor){0, 0, 0, 255}); - closeTxt.SetPosition(10,3); - GuiImage closeImg(&close); - if (Settings.wsprompt == yes){ - closeTxt.SetWidescreen(CFG.widescreen); - closeImg.SetWidescreen(CFG.widescreen); - } - GuiButton closeBtn(close.GetWidth(), close.GetHeight()); - closeBtn.SetImage(&closeImg); - closeBtn.SetAlignment(ALIGN_CENTRE, ALIGN_TOP); - closeBtn.SetPosition(190,30); - closeBtn.SetLabel(&closeTxt); - closeBtn.SetRumble(false); - closeBtn.SetEffect(EFFECT_SLIDE_TOP | EFFECT_SLIDE_IN, 50); - - GuiImage btn1Img(&top); - GuiImage btn1OverImg(&topOver); - GuiButton btn1(&btn1Img,&btn1OverImg, 0, 3, 0, 0, &trigA, &btnSoundOver, &btnClick,0); - btn1.SetEffect(EFFECT_SLIDE_TOP | EFFECT_SLIDE_IN, 50); - - GuiText btn2Txt(btn1Label, 28, (GXColor){0, 0, 0, 255}); - GuiImage btn2Img(&button); - if (Settings.wsprompt == yes){ - btn2Txt.SetWidescreen(CFG.widescreen); - btn2Img.SetWidescreen(CFG.widescreen); - } - GuiButton btn2(&btn2Img,&btn2Img, 2, 5, -150, 0, &trigA, &btnSoundOver, &btnClick,1); - btn2.SetLabel(&btn2Txt); - btn2.SetEffect(EFFECT_SLIDE_LEFT | EFFECT_SLIDE_IN, 50); - btn2.SetRumble(false); - if (HBC==1){btn2.SetPosition(-150, 0);} - - GuiText btn3Txt(btn2Label, 28, (GXColor){0, 0, 0, 255}); - GuiImage btn3Img(&button); - if (Settings.wsprompt == yes){ - btn3Txt.SetWidescreen(CFG.widescreen); - btn3Img.SetWidescreen(CFG.widescreen); - } - GuiButton btn3(&btn3Img,&btn3Img, 2, 5, 150, 0, &trigA, &btnSoundOver, &btnClick,1); - btn3.SetLabel(&btn3Txt); - btn3.SetEffect(EFFECT_SLIDE_RIGHT | EFFECT_SLIDE_IN, 50); - btn3.SetRumble(false); - if (HBC==1){btn3.SetPosition(150, 0);} - else {btn3.SetPosition(0,0);} - - GuiImage btn4Img(&bottom); - GuiImage btn4OverImg(&bottomOver); - GuiButton btn4(&btn4Img,&btn4OverImg, 0, 4, 0, 0, &trigA, &btnSoundOver, &btnClick,0); - btn4.SetTrigger(&trigB); - btn4.SetTrigger(&trigHome); - btn4.SetEffect(EFFECT_SLIDE_BOTTOM | EFFECT_SLIDE_IN, 50); - - GuiImage wiimoteImg(&wiimote); - if (Settings.wsprompt == yes){wiimoteImg.SetWidescreen(CFG.widescreen);} - wiimoteImg.SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM); - wiimoteImg.SetEffect(EFFECT_SLIDE_BOTTOM | EFFECT_SLIDE_IN, 50); - wiimoteImg.SetPosition(50,210); - - if (HBC==1){promptWindow.Append(&btn2);} - promptWindow.Append(&btn3); - promptWindow.Append(&btn4); - promptWindow.Append(&btn1); - promptWindow.Append(&closeBtn); - promptWindow.Append(&titleTxt); - promptWindow.Append(&wiimoteImg); - - #ifdef HW_RVL - promptWindow.Append(batteryBtn[0]); - promptWindow.Append(batteryBtn[1]); - promptWindow.Append(batteryBtn[2]); - promptWindow.Append(batteryBtn[3]); - #endif - - HaltGui(); - mainWindow->SetState(STATE_DISABLED); - mainWindow->Append(&promptWindow); - mainWindow->ChangeFocus(&promptWindow); - ResumeGui(); - - while(choice == -1) - { - VIDEO_WaitVSync(); - - #ifdef HW_RVL - for(i=0; i < 4; i++) - { - if(WPAD_Probe(i, NULL) == WPAD_ERR_NONE) // controller connected - { - level = (userInput[i].wpad.battery_level / 100.0) * 4; - if(level > 4) level = 4; - batteryImg[i]->SetTile(level); - - if(level == 0) - batteryBarImg[i]->SetImage(&batteryRed); - else - batteryBarImg[i]->SetImage(&batteryBar); - - batteryBtn[i]->SetAlpha(255); - } - else // controller not connected - { - batteryImg[i]->SetTile(0); - batteryImg[i]->SetImage(&battery); - batteryBtn[i]->SetAlpha(70); - } - } - #endif - - - if(shutdown == 1) - { - wiilight(0); - Sys_Shutdown(); - } - if(reset == 1) - Sys_Reboot(); - if(btn1.GetState() == STATE_CLICKED) { - choice = 1; - btn1.SetEffect(EFFECT_SLIDE_TOP | EFFECT_SLIDE_OUT, 50); - closeBtn.SetEffect(EFFECT_SLIDE_TOP | EFFECT_SLIDE_OUT, 50); - btn4.SetEffect(EFFECT_SLIDE_BOTTOM | EFFECT_SLIDE_OUT, 50); - btn2.SetEffect(EFFECT_SLIDE_LEFT | EFFECT_SLIDE_OUT, 50); - btn3.SetEffect(EFFECT_SLIDE_RIGHT | EFFECT_SLIDE_OUT, 50); - titleTxt.SetEffect(EFFECT_SLIDE_TOP | EFFECT_SLIDE_OUT, 50); - wiimoteImg.SetEffect(EFFECT_SLIDE_BOTTOM | EFFECT_SLIDE_OUT, 50); - #ifdef HW_RVL - for (int i = 0; i < 4; i++) - batteryBtn[i]->SetEffect(EFFECT_SLIDE_BOTTOM | EFFECT_SLIDE_OUT, 50); - #endif - } - else if(btn4.GetState() == STATE_SELECTED) - { - wiimoteImg.SetPosition(50,165); - } - else if(btn2.GetState() == STATE_CLICKED) { - ret = WindowPrompt(LANGUAGE.Areyousure, 0, LANGUAGE.Yes, LANGUAGE.No, 0, 0); - if (ret == 1) { - choice = 2; - } - HaltGui(); - mainWindow->SetState(STATE_DISABLED); - promptWindow.SetState(STATE_DEFAULT); - mainWindow->ChangeFocus(&promptWindow); - ResumeGui(); - btn2.ResetState(); - } - else if(btn3.GetState() == STATE_CLICKED) { - ret = WindowPrompt(LANGUAGE.Areyousure, 0, LANGUAGE.Yes, LANGUAGE.No, 0, 0); - if (ret == 1) { - choice = 3; - } - HaltGui(); - mainWindow->SetState(STATE_DISABLED); - promptWindow.SetState(STATE_DEFAULT); - mainWindow->ChangeFocus(&promptWindow); - ResumeGui(); - btn3.ResetState(); - } - else if(btn4.GetState() == STATE_CLICKED) { - btn1.SetEffect(EFFECT_SLIDE_TOP | EFFECT_SLIDE_OUT, 50); - closeBtn.SetEffect(EFFECT_SLIDE_TOP | EFFECT_SLIDE_OUT, 50); - btn4.SetEffect(EFFECT_SLIDE_BOTTOM | EFFECT_SLIDE_OUT, 50); - btn2.SetEffect(EFFECT_SLIDE_LEFT | EFFECT_SLIDE_OUT, 50); - btn3.SetEffect(EFFECT_SLIDE_RIGHT | EFFECT_SLIDE_OUT, 50); - titleTxt.SetEffect(EFFECT_SLIDE_TOP | EFFECT_SLIDE_OUT, 50); - wiimoteImg.SetEffect(EFFECT_SLIDE_BOTTOM | EFFECT_SLIDE_OUT, 50); - #ifdef HW_RVL - for (int i = 0; i < 4; i++) - batteryBtn[i]->SetEffect(EFFECT_SLIDE_BOTTOM | EFFECT_SLIDE_OUT, 50); - #endif - choice = 0; - } - else if(btn4.GetState() != STATE_SELECTED) - { - wiimoteImg.SetPosition(50,210); - } - } - homeout->Play(); - while(btn1.GetEffect() > 0) usleep(50); - while(promptWindow.GetEffect() > 0) usleep(50); - HaltGui(); - homein->Stop(); - delete homein; - mainWindow->Remove(&promptWindow); - mainWindow->SetState(STATE_DEFAULT); - while(homeout->IsPlaying() > 0) usleep(50); - homeout->Stop(); - delete homeout; - ResumeGui(); - return choice; -} - -/**************************************************************************** - * GameWindowPrompt - * - * Displays a prompt window to user, with information, an error message, or - * presenting a user with a choice - ***************************************************************************/ -int GameWindowPrompt() -{ - int choice = -1, angle = 0; - f32 size = 0.0; - char ID[4]; - char IDFull[7]; - u8 faveChoice = 0; - u16 playCount = 0; - - GuiWindow promptWindow(472,320); - promptWindow.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE); - promptWindow.SetPosition(0, -10); - GuiSound btnSoundOver(button_over_pcm, button_over_pcm_size, SOUND_PCM, vol); - GuiSound btnClick(button_click2_pcm, button_click2_pcm_size, SOUND_PCM, vol); - - char imgPath[100]; - snprintf(imgPath, sizeof(imgPath), "%sbutton_dialogue_box.png", CFG.theme_path); - GuiImageData btnOutline(imgPath, button_dialogue_box_png); - - snprintf(imgPath, sizeof(imgPath), "%sfavorite.png", CFG.theme_path); - GuiImageData imgFavorite(imgPath, favorite_png); - snprintf(imgPath, sizeof(imgPath), "%snot_favorite.png", CFG.theme_path); - GuiImageData imgNotFavorite(imgPath, not_favorite_png); - - snprintf(imgPath, sizeof(imgPath), "%sstartgame_arrow_left.png", CFG.theme_path); - GuiImageData imgLeft(imgPath, startgame_arrow_left_png); - snprintf(imgPath, sizeof(imgPath), "%sstartgame_arrow_right.png", CFG.theme_path); - GuiImageData imgRight(imgPath, startgame_arrow_right_png); - - GuiTrigger trigA; - trigA.SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A); - GuiTrigger trigB; - trigB.SetButtonOnlyTrigger(-1, WPAD_BUTTON_B | WPAD_CLASSIC_BUTTON_B, PAD_BUTTON_B); - GuiTrigger trigL; - trigL.SetButtonOnlyTrigger(-1, WPAD_BUTTON_LEFT | WPAD_CLASSIC_BUTTON_LEFT, PAD_BUTTON_LEFT); - GuiTrigger trigR; - trigR.SetButtonOnlyTrigger(-1, WPAD_BUTTON_RIGHT | WPAD_CLASSIC_BUTTON_RIGHT, PAD_BUTTON_RIGHT); - GuiTrigger trigPlus; - trigPlus.SetButtonOnlyTrigger(-1, WPAD_BUTTON_PLUS | WPAD_CLASSIC_BUTTON_PLUS, 0); - GuiTrigger trigMinus; - trigMinus.SetButtonOnlyTrigger(-1, WPAD_BUTTON_MINUS | WPAD_CLASSIC_BUTTON_MINUS, 0); - - if (CFG.widescreen) - snprintf(imgPath, sizeof(imgPath), "%swdialogue_box_startgame.png", CFG.theme_path); - else - snprintf(imgPath, sizeof(imgPath), "%sdialogue_box_startgame.png", CFG.theme_path); - - GuiImageData dialogBox(imgPath, CFG.widescreen ? wdialogue_box_startgame_png : dialogue_box_startgame_png); - GuiImage dialogBoxImg(&dialogBox); - - GuiTooltip nameBtnTT(LANGUAGE.RenameGameonWBFS); - if (Settings.wsprompt == yes) - nameBtnTT.SetWidescreen(CFG.widescreen); - GuiText nameTxt("", 22, (GXColor){THEME.prompttxt_r, THEME.prompttxt_g, THEME.prompttxt_b, 255}); //{50, 50, 50, 255}); - if (Settings.wsprompt == yes) - nameTxt.SetWidescreen(CFG.widescreen); - nameTxt.SetMaxWidth(350, GuiText::SCROLL); - GuiButton nameBtn(120,50); - nameBtn.SetLabel(&nameTxt); -// nameBtn.SetLabelOver(&nameTxt); - nameBtn.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE); - nameBtn.SetPosition(0,-122); - nameBtn.SetSoundOver(&btnSoundOver); - nameBtn.SetSoundClick(&btnClick); - nameBtn.SetToolTip(&nameBtnTT,24,-30, ALIGN_LEFT); - - if (CFG.godmode == 1){ - nameBtn.SetTrigger(&trigA); - nameBtn.SetEffectGrow(); - } - - GuiText sizeTxt(NULL, 22, (GXColor){THEME.prompttxt_r, THEME.prompttxt_g, THEME.prompttxt_b, 255}); //{50, 50, 50, 255}); //TODO: get the size here - sizeTxt.SetAlignment(ALIGN_RIGHT, ALIGN_TOP); - sizeTxt.SetPosition(-60,70); - -// GuiImage diskImg; - GuiDiskCover diskImg; - diskImg.SetWidescreen(CFG.widescreen); - diskImg.SetAlignment(ALIGN_LEFT, ALIGN_TOP); - diskImg.SetAngle(angle); - GuiDiskCover diskImg2; - diskImg2.SetWidescreen(CFG.widescreen); - diskImg2.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE); - diskImg2.SetPosition(0, -20); - diskImg2.SetAngle(angle); - diskImg2.SetBeta(180); - - GuiText playcntTxt(NULL, 18, (GXColor){THEME.info_r, THEME.info_g, THEME.info_b, 255}); - playcntTxt.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE); - playcntTxt.SetPosition(-115,45); - - GuiButton btn1(160, 160); - btn1.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE); - btn1.SetPosition(0, -20); - btn1.SetImage(&diskImg); - - btn1.SetSoundOver(&btnSoundOver); - btn1.SetSoundClick(&btnClick); - btn1.SetTrigger(&trigA); - btn1.SetState(STATE_SELECTED); - - GuiText btn2Txt(LANGUAGE.Back, 22, (GXColor){THEME.prompttxt_r, THEME.prompttxt_g, THEME.prompttxt_b, 255}); //{0, 0, 0, 255}); - GuiImage btn2Img(&btnOutline); - if (Settings.wsprompt == yes){ - btn2Txt.SetWidescreen(CFG.widescreen); - btn2Img.SetWidescreen(CFG.widescreen); - } - GuiButton btn2(&btn2Img,&btn2Img, 1, 5, 0, 0, &trigA, &btnSoundOver, &btnClick,1); - if (CFG.godmode == 1) - { - btn2.SetAlignment(ALIGN_RIGHT, ALIGN_BOTTOM); - btn2.SetPosition(-50, -40); - } - else - { - btn2.SetAlignment(ALIGN_CENTRE, ALIGN_BOTTOM); - btn2.SetPosition(0, -40); - } - - btn2.SetLabel(&btn2Txt); - btn2.SetTrigger(&trigB); - - GuiText btn3Txt(LANGUAGE.settings, 22, (GXColor){THEME.prompttxt_r, THEME.prompttxt_g, THEME.prompttxt_b, 255}); //{0, 0, 0, 255}); - GuiImage btn3Img(&btnOutline); - if (Settings.wsprompt == yes){ - btn3Txt.SetWidescreen(CFG.widescreen); - btn3Img.SetWidescreen(CFG.widescreen);} - GuiButton btn3(&btn3Img,&btn3Img, 0, 4, 50, -40, &trigA, &btnSoundOver, &btnClick,1); - btn3.SetLabel(&btn3Txt); - - GuiImage btnFavoriteImg; - btnFavoriteImg.SetWidescreen(CFG.widescreen); - //GuiButton btnFavorite(&btnFavoriteImg,&btnFavoriteImg, 2, 5, -125, -60, &trigA, &btnSoundOver, &btnClick,1); - GuiButton btnFavorite(imgFavorite.GetWidth(), imgFavorite.GetHeight()); - btnFavorite.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE); - btnFavorite.SetPosition(-125, -60); - btnFavorite.SetImage(&btnFavoriteImg); - btnFavorite.SetSoundOver(&btnSoundOver); - btnFavorite.SetSoundClick(&btnClick); - btnFavorite.SetTrigger(&trigA); - btnFavorite.SetEffectGrow(); - - GuiImage btnLeftImg(&imgLeft); - if (Settings.wsprompt == yes) - { - btnLeftImg.SetWidescreen(CFG.widescreen); - } - GuiButton btnLeft(&btnLeftImg,&btnLeftImg, 0, 5, 20, 0, &trigA, &btnSoundOver, &btnClick,1); - btnLeft.SetTrigger(&trigL); - btnLeft.SetTrigger(&trigMinus); - - GuiImage btnRightImg(&imgRight); - if (Settings.wsprompt == yes) - { - btnRightImg.SetWidescreen(CFG.widescreen); - } - GuiButton btnRight(&btnRightImg,&btnRightImg, 1, 5, -20, 0, &trigA, &btnSoundOver, &btnClick,1); - btnRight.SetTrigger(&trigR); - btnRight.SetTrigger(&trigPlus); - - promptWindow.Append(&dialogBoxImg); - promptWindow.Append(&nameBtn); - promptWindow.Append(&sizeTxt); - promptWindow.Append(&playcntTxt); - promptWindow.Append(&btn2); - promptWindow.Append(&btnLeft); - promptWindow.Append(&btnRight); - promptWindow.Append(&btnFavorite); - - //check if unlocked - if (CFG.godmode == 1) - { - promptWindow.Append(&btn3); - } - - promptWindow.Append(&diskImg2); - promptWindow.Append(&btn1); - - short changed = -1; - GuiImageData * diskCover = NULL; - GuiImageData * diskCover2 = NULL; - - promptWindow.SetEffect(EFFECT_SLIDE_TOP | EFFECT_SLIDE_IN, 50); - - while (changed) - { - if (changed == 1){ - promptWindow.SetEffect(EFFECT_SLIDE_LEFT | EFFECT_SLIDE_IN, 50); - } - else if (changed == 2){ - promptWindow.SetEffect(EFFECT_SLIDE_RIGHT | EFFECT_SLIDE_IN, 50); - } - else if (changed == 3 || changed == 4) - { - if(diskCover2) - delete diskCover2; - diskCover2 = NULL; - if(diskCover) - diskCover2 = diskCover; - diskCover = NULL; - } - - //load disc image based or what game is seleted - struct discHdr * header = &gameList[gameSelected]; - - snprintf (ID,sizeof(ID),"%c%c%c", header->id[0], header->id[1], header->id[2]); - snprintf (IDFull,sizeof(IDFull),"%c%c%c%c%c%c", header->id[0], header->id[1], header->id[2],header->id[3], header->id[4], header->id[5]); - - if (diskCover) - delete diskCover; - - snprintf(imgPath,sizeof(imgPath),"%s%s.png", CFG.disc_path, IDFull); //changed to current full id - diskCover = new GuiImageData(imgPath,0); - - if (!diskCover->GetImage()) - { - delete diskCover; - snprintf(imgPath, sizeof(imgPath), "%s%s.png", CFG.disc_path, ID); //changed to current id - diskCover = new GuiImageData(imgPath, 0); - if (!diskCover->GetImage()) - { - delete diskCover; - snprintf(imgPath, sizeof(imgPath), "%snodisc.png", CFG.disc_path); //changed to nodisc.png - diskCover = new GuiImageData(imgPath,nodisc_png); - } - } - - - - if (changed == 3){ - diskImg.SetImage(diskCover2); - diskImg.SetBeta(0); - diskImg.SetBetaRotateEffect(-90, 15); - diskImg2.SetImage(diskCover); - diskImg2.SetAngle(diskImg.GetAngle()); - diskImg2.SetBeta(180); - diskImg2.SetBetaRotateEffect(-90, 15); - sizeTxt.SetEffect(EFFECT_FADE, -17); - nameTxt.SetEffect(EFFECT_FADE, -17); - ResumeGui(); - while(nameTxt.GetEffect() > 0 || diskImg.GetBetaRotateEffect()) usleep(50); - HaltGui(); - diskImg.SetImage(diskCover); - diskImg.SetBeta(90); - diskImg.SetBetaRotateEffect(-90, 15); - diskImg2.SetImage(diskCover2); - diskImg2.SetBeta(270); - diskImg2.SetBetaRotateEffect(-90, 15); - sizeTxt.SetEffect(EFFECT_FADE, 17); - nameTxt.SetEffect(EFFECT_FADE, 17); - } - else if (changed == 4){ - diskImg.SetImage(diskCover2); - diskImg.SetBeta(0); - diskImg.SetBetaRotateEffect(90, 15); - diskImg2.SetImage(diskCover); - diskImg2.SetAngle(diskImg.GetAngle()); - diskImg2.SetBeta(180); - diskImg2.SetBetaRotateEffect(90, 15); - sizeTxt.SetEffect(EFFECT_FADE, -17); - nameTxt.SetEffect(EFFECT_FADE, -17); - ResumeGui(); - while(nameTxt.GetEffect() > 0 || diskImg.GetBetaRotateEffect()) usleep(50); - HaltGui(); - diskImg.SetImage(diskCover); - diskImg.SetBeta(270); - diskImg.SetBetaRotateEffect(90, 15); - diskImg2.SetImage(diskCover2); - diskImg2.SetBeta(90); - diskImg2.SetBetaRotateEffect(90, 15); - sizeTxt.SetEffect(EFFECT_FADE, 17); - nameTxt.SetEffect(EFFECT_FADE, 17); - } - else - diskImg.SetImage(diskCover); - - WBFS_GameSize(header->id, &size); - sizeTxt.SetTextf("%.2fGB", size); //set size text; - nameTxt.SetText(get_title(header)); - - struct Game_NUM* game_num = CFG_get_game_num(header->id); - if (game_num) { - playCount = game_num->count; - faveChoice = game_num->favorite; - } else { - playCount = 0; - faveChoice = 0; - } - playcntTxt.SetTextf("%s: %i",LANGUAGE.Plays, playCount); - btnFavoriteImg.SetImage(faveChoice ? &imgFavorite : &imgNotFavorite); - - nameTxt.SetPosition(0, 1); - - if(changed != 3 && changed != 4) // changed==3 or changed==4 --> only Resume the GUI - { - HaltGui(); - mainWindow->SetState(STATE_DISABLED); - mainWindow->Append(&promptWindow); - mainWindow->ChangeFocus(&promptWindow); - } - ResumeGui(); - - changed = 0; - while(choice == -1) - { - diskImg.SetSpin(btn1.GetState() == STATE_SELECTED); - diskImg2.SetSpin(btn1.GetState() == STATE_SELECTED); - if(shutdown == 1) //for power button - { - wiilight(0); - Sys_Shutdown(); - } - if(reset == 1) //for reset button - Sys_Reboot(); - - if(btn1.GetState() == STATE_CLICKED) { //boot - //////////save game play count//////////////// - extern u8 favorite; - extern u16 count; - struct Game_NUM* game_num = CFG_get_game_num(header->id); - if (game_num) - { - favorite = game_num->favorite; - count = game_num->count;//count+=1; - }count+=1; - if(isSdInserted()) { - if (CFG_save_game_num(header->id)) - { - //WindowPrompt(LANGUAGE.SuccessfullySaved, 0, LANGUAGE.ok, 0,0,0); - } - else - { - //WindowPrompt(LANGUAGE.SaveFailed, 0, LANGUAGE.ok, 0,0,0); - } - } - ////////////end save play count////////////// - - choice = 1; - SDCard_deInit(); - } - - else if(btn2.GetState() == STATE_CLICKED) { //back - choice = 0; - promptWindow.SetEffect(EFFECT_SLIDE_TOP | EFFECT_SLIDE_OUT, 50); - mainWindow->SetState(STATE_DEFAULT); - wiilight(0); - } - - else if(btn3.GetState() == STATE_CLICKED) { //settings - choice = 2; - promptWindow.SetEffect(EFFECT_SLIDE_TOP | EFFECT_SLIDE_OUT, 50); - } - - else if(nameBtn.GetState() == STATE_CLICKED) { //rename - choice = 3; - promptWindow.SetEffect(EFFECT_SLIDE_TOP | EFFECT_SLIDE_OUT, 50); - } - - else if(btnFavorite.GetState() == STATE_CLICKED){//switch favorite - if(isSdInserted()) { - faveChoice = !faveChoice; - btnFavoriteImg.SetImage(faveChoice ? &imgFavorite : &imgNotFavorite); - extern u8 favorite; - extern u8 count; - struct Game_NUM* game_num = CFG_get_game_num(header->id); - if (game_num) { - favorite = game_num->favorite; - count = game_num->count; - } - favorite = faveChoice; - CFG_save_game_num(header->id); - } - btnFavorite.ResetState(); - } - - // this next part is long because nobody could agree on what the left/right buttons should do - else if((btnRight.GetState() == STATE_CLICKED) && (Settings.xflip == no)){//next game - promptWindow.SetEffect(EFFECT_SLIDE_RIGHT | EFFECT_SLIDE_OUT, 50); - changed = 1; - btnClick.Play(); - gameSelected = (gameSelected + 1) % gameCnt; - btnRight.ResetState(); - break; - } - - else if((btnLeft.GetState() == STATE_CLICKED) && (Settings.xflip == no)){//previous game - promptWindow.SetEffect(EFFECT_SLIDE_LEFT | EFFECT_SLIDE_OUT, 50); - changed = 2; - btnClick.Play(); - gameSelected = (gameSelected - 1 + gameCnt) % gameCnt; - btnLeft.ResetState(); - break; - } - - else if((btnRight.GetState() == STATE_CLICKED) && (Settings.xflip == yes)){//previous game - promptWindow.SetEffect(EFFECT_SLIDE_LEFT | EFFECT_SLIDE_OUT, 50); - changed = 2; - btnClick.Play(); - gameSelected = (gameSelected - 1 + gameCnt) % gameCnt; - btnRight.ResetState(); - break; - } - - else if((btnLeft.GetState() == STATE_CLICKED) && (Settings.xflip == yes)){//netx game - promptWindow.SetEffect(EFFECT_SLIDE_RIGHT | EFFECT_SLIDE_OUT, 50); - changed = 1; - btnClick.Play(); - gameSelected = (gameSelected + 1) % gameCnt; - btnLeft.ResetState(); - break; - } - - else if((btnRight.GetState() == STATE_CLICKED) && (Settings.xflip == sysmenu)){//previous game - promptWindow.SetEffect(EFFECT_SLIDE_LEFT | EFFECT_SLIDE_OUT, 50); - changed = 2; - btnClick.Play(); - gameSelected = (gameSelected + 1) % gameCnt; - btnRight.ResetState(); - break; - } - - else if((btnLeft.GetState() == STATE_CLICKED) && (Settings.xflip == sysmenu)){//netx game - promptWindow.SetEffect(EFFECT_SLIDE_RIGHT | EFFECT_SLIDE_OUT, 50); - changed = 1; - btnClick.Play(); - gameSelected = (gameSelected - 1 + gameCnt) % gameCnt; - btnLeft.ResetState(); - break; - } - - else if((btnRight.GetState() == STATE_CLICKED) && (Settings.xflip == wtf)){//previous game - promptWindow.SetEffect(EFFECT_SLIDE_RIGHT | EFFECT_SLIDE_OUT, 50); - changed = 1; - btnClick.Play(); - gameSelected = (gameSelected - 1 + gameCnt) % gameCnt; - btnRight.ResetState(); - break; - } - - else if((btnLeft.GetState() == STATE_CLICKED) && (Settings.xflip == wtf)){//netx game - promptWindow.SetEffect(EFFECT_SLIDE_LEFT | EFFECT_SLIDE_OUT, 50); - changed = 2; - btnClick.Play(); - gameSelected = (gameSelected + 1) % gameCnt; - btnLeft.ResetState(); - break; - } - - else if((btnRight.GetState() == STATE_CLICKED) && (Settings.xflip == disk3d)){//next game -// diskImg.SetBetaRotateEffect(45, 90); - changed = 3; - btnClick.Play(); - gameSelected = (gameSelected + 1) % gameCnt; - btnRight.ResetState(); - break; - } - - else if((btnLeft.GetState() == STATE_CLICKED) && (Settings.xflip == disk3d)){//previous game -// diskImg.SetBetaRotateEffect(-45, 90); -// promptWindow.SetEffect(EFFECT_SLIDE_LEFT | EFFECT_SLIDE_OUT, 1/*50*/); - changed = 4; - btnClick.Play(); - gameSelected = (gameSelected - 1 + gameCnt) % gameCnt; - btnLeft.ResetState(); - break; - } - } - - - while(promptWindow.GetEffect() > 0) usleep(50); - HaltGui(); - if(changed != 3 && changed != 4) // changed==3 or changed==4 --> only Halt the GUI - { - mainWindow->Remove(&promptWindow); - ResumeGui(); - } - } - delete diskCover; - delete diskCover2; - - return choice; -} - -/**************************************************************************** - * DiscWait - ***************************************************************************/ -int -DiscWait(const char *title, const char *msg, const char *btn1Label, const char *btn2Label, int IsDeviceWait) -{ - int i = 30, ret = 0; - u32 cover = 0; - - GuiWindow promptWindow(472,320); - promptWindow.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE); - promptWindow.SetPosition(0, -10); - GuiSound btnSoundOver(button_over_pcm, button_over_pcm_size, SOUND_PCM, vol); - GuiSound btnClick(button_click2_pcm, button_click2_pcm_size, SOUND_PCM, vol); - - char imgPath[100]; - snprintf(imgPath, sizeof(imgPath), "%sbutton_dialogue_box.png", CFG.theme_path); - GuiImageData btnOutline(imgPath, button_dialogue_box_png); - snprintf(imgPath, sizeof(imgPath), "%sdialogue_box.png", CFG.theme_path); - GuiImageData dialogBox(imgPath, dialogue_box_png); - GuiTrigger trigA; - trigA.SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A); - GuiTrigger trigB; - trigB.SetButtonOnlyTrigger(-1, WPAD_BUTTON_B | WPAD_CLASSIC_BUTTON_B, PAD_BUTTON_B); - - GuiImage dialogBoxImg(&dialogBox); - if (Settings.wsprompt == yes){ - dialogBoxImg.SetWidescreen(CFG.widescreen); - } - - GuiText titleTxt(title, 26, (GXColor){THEME.prompttxt_r, THEME.prompttxt_g, THEME.prompttxt_b, 255}); //{0, 0, 0, 255}); - titleTxt.SetAlignment(ALIGN_CENTRE, ALIGN_TOP); - titleTxt.SetPosition(0,60); - GuiText msgTxt(msg, 22, (GXColor){THEME.prompttxt_r, THEME.prompttxt_g, THEME.prompttxt_b, 255}); //{0, 0, 0, 255}); - msgTxt.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE); - msgTxt.SetPosition(0,-40); - msgTxt.SetMaxWidth(430); - - GuiText btn1Txt(btn1Label, 22, (GXColor){THEME.prompttxt_r, THEME.prompttxt_g, THEME.prompttxt_b, 255}); //{0, 0, 0, 255}); - GuiImage btn1Img(&btnOutline); - if (Settings.wsprompt == yes){ - btn1Txt.SetWidescreen(CFG.widescreen); - btn1Img.SetWidescreen(CFG.widescreen); - } - GuiButton btn1(&btn1Img,&btn1Img, 1, 5, 0, 0, &trigA, &btnSoundOver, &btnClick,1); - - if(btn2Label) - { - btn1.SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM); - btn1.SetPosition(40, -45); - } - else - { - btn1.SetAlignment(ALIGN_CENTRE, ALIGN_BOTTOM); - btn1.SetPosition(0, -45); - } - - btn1.SetLabel(&btn1Txt); - btn1.SetTrigger(&trigB); - btn1.SetState(STATE_SELECTED); - - GuiText btn2Txt(btn2Label, 22, (GXColor){THEME.prompttxt_r, THEME.prompttxt_g, THEME.prompttxt_b, 255}); //{0, 0, 0, 255}); - GuiImage btn2Img(&btnOutline); - if (Settings.wsprompt == yes){ - btn2Txt.SetWidescreen(CFG.widescreen); - btn2Img.SetWidescreen(CFG.widescreen); - } - GuiButton btn2(&btn2Img,&btn2Img, 1, 4, -20, -25, &trigA, &btnSoundOver, &btnClick,1); - btn2.SetLabel(&btn2Txt); - - if ((Settings.wsprompt == yes) && (CFG.widescreen)){/////////////adjust buttons for widescreen - msgTxt.SetMaxWidth(380); - if(btn2Label) - { - btn1.SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM); - btn2.SetPosition(-70, -80); - btn1.SetPosition(70, -80); - } - else - { - btn1.SetAlignment(ALIGN_CENTRE, ALIGN_BOTTOM); - btn1.SetPosition(0, -80); - } - } - - GuiText timerTxt(NULL, 26, (GXColor){THEME.prompttxt_r, THEME.prompttxt_g, THEME.prompttxt_b, 255}); //{0, 0, 0, 255}); - timerTxt.SetAlignment(ALIGN_CENTRE, ALIGN_TOP); - timerTxt.SetPosition(0,160); - - promptWindow.Append(&dialogBoxImg); - promptWindow.Append(&titleTxt); - promptWindow.Append(&msgTxt); - - if(btn1Label) - promptWindow.Append(&btn1); - if(btn2Label) - promptWindow.Append(&btn2); - if(IsDeviceWait) - promptWindow.Append(&timerTxt); - - promptWindow.SetEffect(EFFECT_SLIDE_TOP | EFFECT_SLIDE_IN, 50); - HaltGui(); - mainWindow->SetState(STATE_DISABLED); - mainWindow->Append(&promptWindow); - mainWindow->ChangeFocus(&promptWindow); - ResumeGui(); - - SDCard_deInit(); - - if(IsDeviceWait) { - while(i >= 0) - { - timerTxt.SetTextf("%u%s", i,LANGUAGE.secondsleft); - VIDEO_WaitVSync(); - if(Settings.cios == ios222) { - ret = IOS_ReloadIOS(222); - } else { - ret = IOS_ReloadIOS(249); - } - sleep(1); - ret = WBFS_Init(WBFS_DEVICE_USB); - if(ret>=0) - break; - - i--; - } - } else { - while(!(cover & 0x2)) - { - VIDEO_WaitVSync(); - if(btn1.GetState() == STATE_CLICKED) { - btn1.ResetState(); - break; - } - ret = WDVD_GetCoverStatus(&cover); - if (ret < 0) - break; - } - } - - promptWindow.SetEffect(EFFECT_SLIDE_TOP | EFFECT_SLIDE_OUT, 50); - while(promptWindow.GetEffect() > 0) usleep(50); - HaltGui(); - mainWindow->Remove(&promptWindow); - mainWindow->SetState(STATE_DEFAULT); - ResumeGui(); - return ret; -} - -/**************************************************************************** - * FormatingPartition - ***************************************************************************/ -int -FormatingPartition(const char *title, partitionEntry *entry) -{ - int ret; - GuiWindow promptWindow(472,320); - promptWindow.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE); - promptWindow.SetPosition(0, -10); - - char imgPath[100]; - snprintf(imgPath, sizeof(imgPath), "%sbutton_dialogue_box.png", CFG.theme_path); - GuiImageData btnOutline(imgPath, button_dialogue_box_png); - snprintf(imgPath, sizeof(imgPath), "%sdialogue_box.png", CFG.theme_path); - GuiImageData dialogBox(imgPath, dialogue_box_png); - - - GuiTrigger trigA; - trigA.SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A); - - GuiImage dialogBoxImg(&dialogBox); - if (Settings.wsprompt == yes){ - dialogBoxImg.SetWidescreen(CFG.widescreen); - } - - GuiText titleTxt(title, 26, (GXColor){THEME.prompttxt_r, THEME.prompttxt_g, THEME.prompttxt_b, 255}); //{0, 0, 0, 255}); - titleTxt.SetAlignment(ALIGN_CENTRE, ALIGN_TOP); - titleTxt.SetPosition(0,60); - - promptWindow.Append(&dialogBoxImg); - promptWindow.Append(&titleTxt); - - - promptWindow.SetEffect(EFFECT_SLIDE_TOP | EFFECT_SLIDE_IN, 50); - HaltGui(); - mainWindow->SetState(STATE_DISABLED); - mainWindow->Append(&promptWindow); - mainWindow->ChangeFocus(&promptWindow); - ResumeGui(); - - VIDEO_WaitVSync(); - ret = WBFS_Format(entry->sector, entry->size); - - - promptWindow.SetEffect(EFFECT_SLIDE_TOP | EFFECT_SLIDE_OUT, 50); - while(promptWindow.GetEffect() > 0) usleep(50); - HaltGui(); - mainWindow->Remove(&promptWindow); - mainWindow->SetState(STATE_DEFAULT); - ResumeGui(); - return ret; -} - - -/**************************************************************************** - * NetworkInit - ***************************************************************************/ -int NetworkInitPromp(int choice2) -{ - char hostip[16]; - char * IP = NULL; - s32 ret = -1; - - GuiWindow promptWindow(472,320); - promptWindow.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE); - promptWindow.SetPosition(0, -10); - - GuiSound btnSoundOver(button_over_pcm, button_over_pcm_size, SOUND_PCM, vol); - GuiSound btnClick(button_click2_pcm, button_click2_pcm_size, SOUND_PCM, vol); - - char imgPath[100]; - snprintf(imgPath, sizeof(imgPath), "%sbutton_dialogue_box.png", CFG.theme_path); - GuiImageData btnOutline(imgPath, button_dialogue_box_png); - snprintf(imgPath, sizeof(imgPath), "%sdialogue_box.png", CFG.theme_path); - GuiImageData dialogBox(imgPath, dialogue_box_png); - GuiTrigger trigA; - trigA.SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A); - - GuiImage dialogBoxImg(&dialogBox); - if (Settings.wsprompt == yes){ - dialogBoxImg.SetWidescreen(CFG.widescreen); - } - - GuiText titleTxt(LANGUAGE.InitializingNetwork, 26, (GXColor){THEME.prompttxt_r, THEME.prompttxt_g, THEME.prompttxt_b, 255}); //{0, 0, 0, 255}); - titleTxt.SetAlignment(ALIGN_CENTRE, ALIGN_TOP); - titleTxt.SetPosition(0,60); - - char msg[20] = " "; - GuiText msgTxt(msg, 22, (GXColor){THEME.prompttxt_r, THEME.prompttxt_g, THEME.prompttxt_b, 255}); //{0, 0, 0, 255}); - msgTxt.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE); - msgTxt.SetPosition(0,-40); - - GuiText btn1Txt(LANGUAGE.Cancel, 22, (GXColor){THEME.prompttxt_r, THEME.prompttxt_g, THEME.prompttxt_b, 255}); //{0, 0, 0, 255}); - GuiImage btn1Img(&btnOutline); - if (Settings.wsprompt == yes){ - btn1Txt.SetWidescreen(CFG.widescreen); - btn1Img.SetWidescreen(CFG.widescreen); - } - GuiButton btn1(&btn1Img,&btn1Img, 2, 4, 0, -45, &trigA, &btnSoundOver, &btnClick,1); - btn1.SetLabel(&btn1Txt); - btn1.SetState(STATE_SELECTED); - - if ((Settings.wsprompt == yes) && (CFG.widescreen)){/////////////adjust buttons for widescreen - btn1.SetAlignment(ALIGN_CENTRE, ALIGN_BOTTOM); - btn1.SetPosition(0, -80); - } - - promptWindow.Append(&dialogBoxImg); - promptWindow.Append(&titleTxt); - promptWindow.Append(&msgTxt); - promptWindow.Append(&btn1); - - promptWindow.SetEffect(EFFECT_SLIDE_TOP | EFFECT_SLIDE_IN, 50); - HaltGui(); - mainWindow->SetState(STATE_DISABLED); - mainWindow->Append(&promptWindow); - mainWindow->ChangeFocus(&promptWindow); - - ResumeGui(); - - while (!IP) - { - - VIDEO_WaitVSync(); - - ret = Net_Init(hostip); - - if (ret > 0) { - IP = hostip; - } - - if (ret <= 0) { - msgTxt.SetText(LANGUAGE.Couldnotinitializenetwork); - } - - if (IP && ret > 0) { - msgTxt.SetTextf("IP: %s", IP); - cntMissFiles = 0; - u32 i = 0; - char filename[11]; - - bool found1 = false;/////add Ids of games that are missing covers to cntMissFiles - bool found2 = false; - for (i = 0; i < gameCnt && cntMissFiles < 500; i++) - { - struct discHdr* header = &gameList[i]; - if (choice2 != 3) { - - snprintf (filename,sizeof(filename),"%c%c%c.png", header->id[0], header->id[1], header->id[2]); - found2 = findfile(filename, CFG.covers_path); - snprintf(filename,sizeof(filename),"%c%c%c%c%c%c.png",header->id[0], header->id[1], header->id[2], - header->id[3], header->id[4], header->id[5]); //full id - found1 = findfile(filename, CFG.covers_path); - if (!found1 && !found2) //if could not find any image - { - snprintf(missingFiles[cntMissFiles],11,"%s",filename); - cntMissFiles++; - } - } - else if (choice2 == 3) { - snprintf (filename,sizeof(filename),"%c%c%c.png", header->id[0], header->id[1], header->id[2]); - found2 = findfile(filename, CFG.disc_path); - snprintf(filename,sizeof(filename),"%c%c%c%c%c%c.png",header->id[0], header->id[1], header->id[2], - header->id[3], header->id[4], header->id[5]); //full id - found1 = findfile(filename,CFG.disc_path); - if (!found1 && !found2) - { - snprintf(missingFiles[cntMissFiles],11,"%s",filename); - cntMissFiles++; - } - } - } - break; - } - - if(btn1.GetState() == STATE_CLICKED) { - IP = 0; - ret = -1; - break; - } - - } - promptWindow.SetEffect(EFFECT_SLIDE_TOP | EFFECT_SLIDE_OUT, 50); - while(promptWindow.GetEffect() > 0) usleep(50); - HaltGui(); - mainWindow->Remove(&promptWindow); - mainWindow->SetState(STATE_DEFAULT); - ResumeGui(); - - return ret; -} - -/**************************************************************************** - * ShowProgress - * - * Updates the variables used by the progress window for drawing a progress - * bar. Also resumes the progress window thread if it is suspended. - ***************************************************************************/ -void -ShowProgress (s32 done, s32 total) -{ - - static time_t start; - static u32 expected; - - u32 d, h, m, s; - - //first time - if (!done) { - start = time(0); - expected = 300; - } - - //Elapsed time - d = time(0) - start; - - if (done != total) { - //Expected time - if (d) - expected = (expected * 3 + d * total / done) / 4; - - //Remaining time - d = (expected > d) ? (expected - d) : 0; - } - - //Calculate time values - h = d / 3600; - m = (d / 60) % 60; - s = d % 60; - - //Calculate percentage/size - f32 percent = (done * 100.0) / total; - - prTxt.SetTextf("%0.2f", percent); - - timeTxt.SetTextf("%s %d:%02d:%02d",LANGUAGE.Timeleft,h,m,s); - - f32 gamesizedone = gamesize * done/total; - - sizeTxt.SetTextf("%0.2fGB/%0.2fGB", gamesizedone, gamesize); - - if ((Settings.wsprompt == yes) && (CFG.widescreen)){ - progressbarImg.SetTile((int)(80*done/total));} - else {progressbarImg.SetTile((int)(100*done/total));} - -} - -/**************************************************************************** - * ProgressWindow - * - * Opens a window, which displays progress to the user. Can either display a - * progress bar showing % completion, or a throbber that only shows that an - * action is in progress. - ***************************************************************************/ -int -ProgressWindow(const char *title, const char *msg) -{ - - GuiWindow promptWindow(472,320); - promptWindow.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE); - promptWindow.SetPosition(0, -10); - char imgPath[100]; - snprintf(imgPath, sizeof(imgPath), "%sbutton_dialogue_box.png", CFG.theme_path); - GuiImageData btnOutline(imgPath, button_dialogue_box_png); - snprintf(imgPath, sizeof(imgPath), "%sdialogue_box.png", CFG.theme_path); - GuiImageData dialogBox(imgPath, dialogue_box_png); - GuiTrigger trigA; - trigA.SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A); - - GuiImage dialogBoxImg(&dialogBox); - if (Settings.wsprompt == yes){ - dialogBoxImg.SetWidescreen(CFG.widescreen);} - - snprintf(imgPath, sizeof(imgPath), "%sprogressbar_outline.png", CFG.theme_path); - GuiImageData progressbarOutline(imgPath, progressbar_outline_png); - - GuiImage progressbarOutlineImg(&progressbarOutline); - if (Settings.wsprompt == yes){ - progressbarOutlineImg.SetWidescreen(CFG.widescreen);} - progressbarOutlineImg.SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE); - progressbarOutlineImg.SetPosition(25, 40); - - snprintf(imgPath, sizeof(imgPath), "%sprogressbar_empty.png", CFG.theme_path); - GuiImageData progressbarEmpty(imgPath, progressbar_empty_png); - GuiImage progressbarEmptyImg(&progressbarEmpty); - progressbarEmptyImg.SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE); - progressbarEmptyImg.SetPosition(25, 40); - progressbarEmptyImg.SetTile(100); - - snprintf(imgPath, sizeof(imgPath), "%sprogressbar.png", CFG.theme_path); - GuiImageData progressbar(imgPath, progressbar_png); - - progressbarImg.SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE); - progressbarImg.SetPosition(25, 40); - - GuiText titleTxt(title, 26, (GXColor){THEME.prompttxt_r, THEME.prompttxt_g, THEME.prompttxt_b, 255}); //{0, 0, 0, 255}); - titleTxt.SetAlignment(ALIGN_CENTRE, ALIGN_TOP); - titleTxt.SetPosition(0,60); - GuiText msgTxt(msg, 26, (GXColor){THEME.prompttxt_r, THEME.prompttxt_g, THEME.prompttxt_b, 255}); //{0, 0, 0, 255}); - msgTxt.SetAlignment(ALIGN_CENTRE, ALIGN_TOP); - msgTxt.SetPosition(0,120); - - GuiText prsTxt("%", 26, (GXColor){THEME.prompttxt_r, THEME.prompttxt_g, THEME.prompttxt_b, 255}); //{0, 0, 0, 255}); - prsTxt.SetAlignment(ALIGN_RIGHT, ALIGN_MIDDLE); - prsTxt.SetPosition(-188,40); - - timeTxt.SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM); - timeTxt.SetPosition(275,-50); - - sizeTxt.SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM); - sizeTxt.SetPosition(50, -50); - - prTxt.SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE); - prTxt.SetPosition(200, 40); - - if ((Settings.wsprompt == yes) && (CFG.widescreen)){/////////////adjust for widescreen - progressbarOutlineImg.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE); - progressbarOutlineImg.SetPosition(0, 40); - progressbarEmptyImg.SetPosition(80,40); - progressbarEmptyImg.SetTile(78); - progressbarImg.SetPosition(80, 40); - msgTxt.SetMaxWidth(380); - - timeTxt.SetPosition(250,-50); - timeTxt.SetFontSize(22); - sizeTxt.SetPosition(90, -50); - sizeTxt.SetFontSize(22); - } - - promptWindow.Append(&dialogBoxImg); - promptWindow.Append(&titleTxt); - promptWindow.Append(&msgTxt); - promptWindow.Append(&progressbarEmptyImg); - promptWindow.Append(&progressbarImg); - promptWindow.Append(&progressbarOutlineImg); - promptWindow.Append(&prTxt); - promptWindow.Append(&prsTxt); - promptWindow.Append(&timeTxt); - - HaltGui(); - mainWindow->SetState(STATE_DISABLED); - mainWindow->Append(&promptWindow); - mainWindow->ChangeFocus(&promptWindow); - ResumeGui(); - promptWindow.Append(&prTxt); - promptWindow.Append(&sizeTxt); - - s32 ret; - - __Disc_SetLowMem(); - - ret = wbfs_add_disc(hdd, __WBFS_ReadDVD, NULL, ShowProgress, ONLY_GAME_PARTITION, 0); - - HaltGui(); - mainWindow->Remove(&promptWindow); - mainWindow->SetState(STATE_DEFAULT); - ResumeGui(); - if (ret < 0) { - return ret; - } - return 0; -} - -/**************************************************************************** - * ProgressWindow - * - * Opens a window, which displays progress to the user. Can either display a - * progress bar showing % completion, or a throbber that only shows that an - * action is in progress. - ***************************************************************************/ -int -ProgressDownloadWindow(int choice2) -{ - - int i = 0, cntNotFound = 0; - - GuiWindow promptWindow(472,320); - promptWindow.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE); - promptWindow.SetPosition(0, -10); - - GuiSound btnSoundOver(button_over_pcm, button_over_pcm_size, SOUND_PCM, vol); - GuiSound btnClick(button_click2_pcm, button_click2_pcm_size, SOUND_PCM, vol); - - char imgPath[100]; - snprintf(imgPath, sizeof(imgPath), "%sbutton_dialogue_box.png", CFG.theme_path); - GuiImageData btnOutline(imgPath, button_dialogue_box_png); - snprintf(imgPath, sizeof(imgPath), "%sdialogue_box.png", CFG.theme_path); - GuiImageData dialogBox(imgPath, dialogue_box_png); - GuiTrigger trigA; - trigA.SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A); - - GuiImage dialogBoxImg(&dialogBox); - if (Settings.wsprompt == yes){ - dialogBoxImg.SetWidescreen(CFG.widescreen);} - - snprintf(imgPath, sizeof(imgPath), "%sprogressbar_outline.png", CFG.theme_path); - GuiImageData progressbarOutline(imgPath, progressbar_outline_png); - GuiImage progressbarOutlineImg(&progressbarOutline); - if (Settings.wsprompt == yes){ - progressbarOutlineImg.SetWidescreen(CFG.widescreen);} - progressbarOutlineImg.SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE); - progressbarOutlineImg.SetPosition(25, 40); - - snprintf(imgPath, sizeof(imgPath), "%sprogressbar_empty.png", CFG.theme_path); - GuiImageData progressbarEmpty(imgPath, progressbar_empty_png); - GuiImage progressbarEmptyImg(&progressbarEmpty); - progressbarEmptyImg.SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE); - progressbarEmptyImg.SetPosition(25, 40); - progressbarEmptyImg.SetTile(100); - - snprintf(imgPath, sizeof(imgPath), "%sprogressbar.png", CFG.theme_path); - GuiImageData progressbar(imgPath, progressbar_png); - progressbarImg.SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE); - progressbarImg.SetPosition(25, 40); - - GuiText titleTxt(LANGUAGE.Downloadingfile, 26, (GXColor){THEME.prompttxt_r, THEME.prompttxt_g, THEME.prompttxt_b, 255}); //{0, 0, 0, 255}); - titleTxt.SetAlignment(ALIGN_CENTRE, ALIGN_TOP); - titleTxt.SetPosition(0,60); - - GuiText msgTxt(NULL, 26, (GXColor){THEME.prompttxt_r, THEME.prompttxt_g, THEME.prompttxt_b, 255}); //{0, 0, 0, 255}); - msgTxt.SetAlignment(ALIGN_CENTRE, ALIGN_TOP); - msgTxt.SetPosition(0,130); - - GuiText msg2Txt(NULL, 26, (GXColor){THEME.prompttxt_r, THEME.prompttxt_g, THEME.prompttxt_b, 255}); //{0, 0, 0, 255}); - msg2Txt.SetAlignment(ALIGN_CENTRE, ALIGN_TOP); - msg2Txt.SetPosition(0,100); - - prTxt.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE); - prTxt.SetPosition(0, 40); - - GuiText btn1Txt(LANGUAGE.Cancel, 22, (GXColor){THEME.prompttxt_r, THEME.prompttxt_g, THEME.prompttxt_b, 255}); //{0, 0, 0, 255}); - GuiImage btn1Img(&btnOutline); - if (Settings.wsprompt == yes){ - btn1Txt.SetWidescreen(CFG.widescreen); - btn1Img.SetWidescreen(CFG.widescreen);} - GuiButton btn1(&btn1Img,&btn1Img, 2, 4, 0, -45, &trigA, &btnSoundOver, &btnClick,1); - btn1.SetLabel(&btn1Txt); - btn1.SetState(STATE_SELECTED); - - if ((Settings.wsprompt == yes) && (CFG.widescreen)){/////////////adjust for widescreen - progressbarOutlineImg.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE); - progressbarOutlineImg.SetPosition(0, 40); - progressbarEmptyImg.SetPosition(80,40); - progressbarEmptyImg.SetTile(78); - progressbarImg.SetPosition(80, 40); - } - - promptWindow.Append(&dialogBoxImg); - promptWindow.Append(&titleTxt); - promptWindow.Append(&msgTxt); - promptWindow.Append(&msg2Txt); - promptWindow.Append(&progressbarEmptyImg); - promptWindow.Append(&progressbarImg); - promptWindow.Append(&progressbarOutlineImg); - promptWindow.Append(&prTxt); - promptWindow.Append(&btn1); - - HaltGui(); - mainWindow->SetState(STATE_DISABLED); - mainWindow->Append(&promptWindow); - mainWindow->ChangeFocus(&promptWindow); - ResumeGui(); - - //check if directory exist and if not create one - struct stat st; - if(stat(CFG.covers_path, &st) != 0) { - char dircovers[100]; - snprintf(dircovers,strlen(CFG.covers_path),"%s",CFG.covers_path); - if (mkdir(dircovers, 0777) == -1) { - if(subfoldercheck(dircovers) != 1) { - WindowPrompt(LANGUAGE.Error,LANGUAGE.Cantcreatedirectory,LANGUAGE.ok,0,0,0); - cntMissFiles = 0; - } - } - } - if(stat(CFG.disc_path,&st) != 0) { - char dirdiscs[100]; - snprintf(dirdiscs,strlen(CFG.disc_path),"%s",CFG.disc_path); - if (mkdir(dirdiscs, 0777) == -1) { - if(subfoldercheck(dirdiscs) != 1) { - WindowPrompt(LANGUAGE.Error,LANGUAGE.Cantcreatedirectory,LANGUAGE.ok,0,0,0); - cntMissFiles = 0; - } - } - } - - while (i < cntMissFiles) { - - prTxt.SetTextf("%i%%", 100*i/cntMissFiles); - - if ((Settings.wsprompt == yes) && (CFG.widescreen)){/////////////adjust for widescreen - progressbarImg.SetPosition(80,40); - progressbarImg.SetTile(80*i/cntMissFiles); - } else { - progressbarImg.SetTile(100*i/cntMissFiles); - } - - msgTxt.SetTextf("%i %s", cntMissFiles - i, LANGUAGE.filesleft); - msg2Txt.SetTextf("%s", missingFiles[i]); - - //download boxart image - char imgPath[100]; - char URLFile[100]; - if (choice2 == 2) { - sprintf(URLFile,"http://www.theotherzone.com/wii/3d/176/248/%s",missingFiles[i]); // For 3D Covers - sprintf(imgPath,"%s%s", CFG.covers_path, missingFiles[i]); - } - if(choice2 == 3) { - sprintf(URLFile,"http://www.theotherzone.com/wii/diskart/160/160/%s",missingFiles[i]); - sprintf(imgPath,"%s%s", CFG.disc_path, missingFiles[i]); - } - if(choice2 == 1) { - sprintf(URLFile,"http://www.theotherzone.com/wii/resize/160/224/%s",missingFiles[i]); - sprintf(imgPath,"%s%s", CFG.covers_path, missingFiles[i]); - } - - struct block file = downloadfile(URLFile);//reject known bad images - - if (file.size == 36864 || file.size <= 1024 || file.size == 7386 || file.data == NULL) { - cntNotFound++; - i++; - } else { - - if(file.data != NULL) - { - // save png to sd card - FILE *pfile; - pfile = fopen(imgPath, "wb"); - fwrite(file.data,1,file.size,pfile); - fclose (pfile); - free(file.data); - } - i++; - } - - if(btn1.GetState() == STATE_CLICKED) { - cntNotFound = cntMissFiles-i+cntNotFound; - break; - } - - } - - /**Temporary redownloading 1st image because of a fucking corruption bug **/ - - char URLFile[100]; - if (choice2 == 2) { - sprintf(URLFile,"http://www.theotherzone.com/wii/3d/176/248/%s",missingFiles[0]); // For 3D Covers - sprintf(imgPath,"%s%s", CFG.covers_path, missingFiles[0]); - } - if(choice2 == 3) { - sprintf(URLFile,"http://www.theotherzone.com/wii/diskart/160/160/%s",missingFiles[0]); - sprintf(imgPath,"%s%s", CFG.disc_path, missingFiles[0]); - } - if(choice2 == 1) { - sprintf(URLFile,"http://www.theotherzone.com/wii/resize/160/224/%s",missingFiles[0]); - sprintf(imgPath,"%s%s", CFG.covers_path, missingFiles[0]); - } - - struct block file = downloadfile(URLFile); - - if (file.size == 36864 || file.size <= 1024 || file.size == 7386 || file.data == NULL) { - } else { - if(file.data != NULL) - { - // save png to sd card - FILE *pfile; - pfile = fopen(imgPath, "wb"); - fwrite(file.data,1,file.size,pfile); - fclose (pfile); - free(file.data); - } - } - - - HaltGui(); - mainWindow->Remove(&promptWindow); - mainWindow->SetState(STATE_DEFAULT); - ResumeGui(); - - if (cntNotFound != 0) { - return cntNotFound; - } else { - return 0; - } -} - -/**************************************************************************** - * ProgressWindow - * - * Opens a window, which displays progress to the user. Can either display a - * progress bar showing % completion, or a throbber that only shows that an - * action is in progress. - ***************************************************************************/ -int -ProgressUpdateWindow() -{ - - int ret = 0, failed = 0; - const unsigned int blocksize = 1024; - char hostip[16]; - char * IP = NULL; - u8 blockbuffer[blocksize] ATTRIBUTE_ALIGN(32); - - GuiWindow promptWindow(472,320); - promptWindow.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE); - promptWindow.SetPosition(0, -10); - - GuiSound btnSoundOver(button_over_pcm, button_over_pcm_size, SOUND_PCM, vol); - GuiSound btnClick(button_click2_pcm, button_click2_pcm_size, SOUND_PCM, vol); - - char imgPath[100]; - snprintf(imgPath, sizeof(imgPath), "%sbutton_dialogue_box.png", CFG.theme_path); - GuiImageData btnOutline(imgPath, button_dialogue_box_png); - snprintf(imgPath, sizeof(imgPath), "%sdialogue_box.png", CFG.theme_path); - GuiImageData dialogBox(imgPath, dialogue_box_png); - GuiTrigger trigA; - trigA.SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A); - - GuiImage dialogBoxImg(&dialogBox); - if (Settings.wsprompt == yes){ - dialogBoxImg.SetWidescreen(CFG.widescreen);} - - snprintf(imgPath, sizeof(imgPath), "%sprogressbar_outline.png", CFG.theme_path); - GuiImageData progressbarOutline(imgPath, progressbar_outline_png); - GuiImage progressbarOutlineImg(&progressbarOutline); - if (Settings.wsprompt == yes){ - progressbarOutlineImg.SetWidescreen(CFG.widescreen);} - progressbarOutlineImg.SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE); - progressbarOutlineImg.SetPosition(25, 7); - - snprintf(imgPath, sizeof(imgPath), "%sprogressbar_empty.png", CFG.theme_path); - GuiImageData progressbarEmpty(imgPath, progressbar_empty_png); - GuiImage progressbarEmptyImg(&progressbarEmpty); - progressbarEmptyImg.SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE); - progressbarEmptyImg.SetPosition(25, 7); - progressbarEmptyImg.SetTile(100); - - snprintf(imgPath, sizeof(imgPath), "%sprogressbar.png", CFG.theme_path); - GuiImageData progressbar(imgPath, progressbar_png); - progressbarImg.SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE); - progressbarImg.SetPosition(25, 7); - - char title[50]; - sprintf(title, "%s", LANGUAGE.CheckingforUpdates); - GuiText titleTxt(title, 26, (GXColor){THEME.prompttxt_r, THEME.prompttxt_g, THEME.prompttxt_b, 255}); //{0, 0, 0, 255}); - titleTxt.SetAlignment(ALIGN_CENTRE, ALIGN_TOP); - titleTxt.SetPosition(0,50); - char msg[50]; - sprintf(msg, "%s", LANGUAGE.InitializingNetwork); - GuiText msgTxt(msg, 26, (GXColor){THEME.prompttxt_r, THEME.prompttxt_g, THEME.prompttxt_b, 255}); //{0, 0, 0, 255}); - msgTxt.SetAlignment(ALIGN_CENTRE, ALIGN_TOP); - msgTxt.SetPosition(0,140); - char msg2[50] = " "; - GuiText msg2Txt(msg2, 26, (GXColor){THEME.prompttxt_r, THEME.prompttxt_g, THEME.prompttxt_b, 255}); //{0, 0, 0, 255}); - msg2Txt.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE); - msg2Txt.SetPosition(0, 50); - - prTxt.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE); - prTxt.SetPosition(0, 7); - - GuiText btn1Txt(LANGUAGE.Cancel, 22, (GXColor){THEME.prompttxt_r, THEME.prompttxt_g, THEME.prompttxt_b, 255}); //{0, 0, 0, 255}); - GuiImage btn1Img(&btnOutline); - if (Settings.wsprompt == yes){ - btn1Txt.SetWidescreen(CFG.widescreen); - btn1Img.SetWidescreen(CFG.widescreen);} - GuiButton btn1(&btn1Img,&btn1Img, 2, 4, 0, -40, &trigA, &btnSoundOver, &btnClick,1); - btn1.SetLabel(&btn1Txt); - btn1.SetState(STATE_SELECTED); - - if ((Settings.wsprompt == yes) && (CFG.widescreen)){/////////////adjust for widescreen - progressbarOutlineImg.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE); - progressbarOutlineImg.SetPosition(0, 7); - progressbarEmptyImg.SetPosition(80,7); - progressbarEmptyImg.SetTile(78); - progressbarImg.SetPosition(80, 7); - } - - promptWindow.Append(&dialogBoxImg); - promptWindow.Append(&titleTxt); - promptWindow.Append(&msgTxt); - promptWindow.Append(&msg2Txt); - promptWindow.Append(&btn1); - - promptWindow.SetEffect(EFFECT_SLIDE_TOP | EFFECT_SLIDE_IN, 50); - - HaltGui(); - mainWindow->SetState(STATE_DISABLED); - mainWindow->Append(&promptWindow); - mainWindow->ChangeFocus(&promptWindow); - ResumeGui(); - - struct stat st; - if(stat(CFG.update_path, &st) != 0) { - char dir[100]; - snprintf(dir,strlen(CFG.update_path),"%s",CFG.update_path); - if (mkdir(dir, 0777) == -1) { - if(subfoldercheck(dir) != 1) { - WindowPrompt(LANGUAGE.Error,LANGUAGE.Cantcreatedirectory,LANGUAGE.ok,0,0,0); - ret = -1; - failed = -1; - } - } - } - - char dolpath[150]; - char dolpathsuccess[150]; - snprintf(dolpath, sizeof(dolpath), "%sbootnew.dol", CFG.update_path); - snprintf(dolpathsuccess, sizeof(dolpathsuccess), "%sboot.dol", CFG.update_path); - - while (!IP && !(ret < 0)) { - - VIDEO_WaitVSync(); - - ret = Net_Init(hostip); - - if (ret > 0) { - IP = hostip; - msgTxt.SetText(IP); - } - - if (ret <= 0) { - msgTxt.SetText(LANGUAGE.Couldnotinitializenetwork); - } - - if(btn1.GetState() == STATE_CLICKED) { - IP = 0; - ret = -1; - failed = -1; - btn1.ResetState(); - break; - } - } - - if(IP && ret >= 0) { - - networkisinitialized = 1; - - int revnumber = 0; - int currentrev = atoi(SVN_REV); - - SDCard_deInit(); - struct block file = downloadfile("http://www.techjawa.com/usbloadergx/rev.txt"); - FILE *pfile; - SDCard_Init(); - - if(file.data != NULL) - { - char revtxt[10]; - pfile = fopen("SD:/rev.txt", "w"); - fwrite(file.data,1,file.size,pfile); - fclose(pfile); - //has to be repeated or it isnt working (first file download bug) - pfile = fopen("SD:/rev.txt", "w"); - fwrite(file.data,1,file.size,pfile); - fclose(pfile); - //"w+" doesnt work, needs to be reopened as "r" - pfile = fopen("SD:/rev.txt", "r"); - int c = 0, i = 0; - while(c != EOF || i < 10) { - c = fgetc(pfile); - if (c != EOF) { - revtxt[i] = c; - } else { - revtxt[i] = 0x00; - break; - } - i++; - } - fclose(pfile); - revnumber = atoi(revtxt); - remove("SD:/rev.txt"); - free(file.data); - } - - if(revnumber > currentrev) { - sprintf(msg, "Rev%i %s.", revnumber, LANGUAGE.available); - int choice = WindowPrompt(msg, LANGUAGE.Doyouwanttoupdate, LANGUAGE.Updatedol, LANGUAGE.Updateall, LANGUAGE.Cancel, 0); - if(choice == 1 || choice == 2) { - titleTxt.SetTextf("%s USB Loader GX", LANGUAGE.updating); - msgTxt.SetPosition(0,100); - promptWindow.Append(&progressbarEmptyImg); - promptWindow.Append(&progressbarImg); - promptWindow.Append(&progressbarOutlineImg); - promptWindow.Append(&prTxt); - msgTxt.SetTextf("Updating to Rev%i", revnumber); - int filesize = downloadrev("http://www.techjawa.com/usbloadergx/boot.dol"); - if(filesize > 0) { - pfile = fopen(dolpath, "wb"); - for (int i = 0; i < filesize; i += blocksize) { - prTxt.SetTextf("%i%%", 100*i/filesize); - if ((Settings.wsprompt == yes) && (CFG.widescreen)){/////////////adjust for widescreen - progressbarImg.SetTile(80*i/filesize); - } else { - progressbarImg.SetTile(100*i/filesize); - } - msg2Txt.SetTextf("%iKB/%iKB", i/1024, filesize/1024); - - if(btn1.GetState() == STATE_CLICKED) { - fclose(pfile); - remove(dolpath); - failed = -1; - btn1.ResetState(); - break; - } - - u32 blksize; - blksize = (u32)(filesize - i); - if (blksize > blocksize) - blksize = blocksize; - - ret = network_read(blockbuffer, blksize); - if ((u32)ret != blksize) { - failed = -1; - ret = -1; - fclose(pfile); - remove(dolpath); - break; - } - fwrite(blockbuffer,1,blksize, pfile); - } - fclose(pfile); - if(!failed) { - //remove old - if(checkfile(dolpathsuccess)){ - remove(dolpathsuccess); - } - //rename new to old - rename(dolpath, dolpathsuccess); - - if(choice == 2) { - //get the icon.png and the meta.xml - char xmliconpath[150]; - file = downloadfile("http://www.techjawa.com/usbloadergx/meta.file"); - if(file.data != NULL){ - sprintf(xmliconpath, "%smeta.xml", CFG.update_path); - pfile = fopen(xmliconpath, "wb"); - fwrite(file.data,1,file.size,pfile); - fclose(pfile); - free(file.data); - } - file = downloadfile("http://www.techjawa.com/usbloadergx/icon.png"); - if(file.data != NULL){ - sprintf(xmliconpath, "%sicon.png", CFG.update_path); - pfile = fopen(xmliconpath, "wb"); - fwrite(file.data,1,file.size,pfile); - fclose(pfile); - free(file.data); - } - } - } - } else { - failed = -1; - } - } else { - ret = -1; - } - - } else { - WindowPrompt(LANGUAGE.Nonewupdates, 0, LANGUAGE.ok, 0, 0, 0); - ret = -1; - } - - } - - CloseConnection(); - - if(!failed && ret >= 0) { - WindowPrompt(LANGUAGE.Successfullyupdated , LANGUAGE.Restarting, LANGUAGE.ok, 0, 0, 0); - ExitApp(); - if (*((u32*) 0x80001800)) exit(0); - SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0); - } - - promptWindow.SetEffect(EFFECT_SLIDE_TOP | EFFECT_SLIDE_OUT, 50); - while(promptWindow.GetEffect() > 0) usleep(50); - - HaltGui(); - mainWindow->Remove(&promptWindow); - mainWindow->SetState(STATE_DEFAULT); - ResumeGui(); - - if(failed != 0) - return failed; - - return 1; -} - - -/**************************************************************************** - * UpdateGUI - * - * Primary thread to allow GUI to respond to state changes, and draws GUI - ***************************************************************************/ - -static void * -UpdateGUI (void *arg) -{ - while(1) - { - if(guiHalt) - { - LWP_SuspendThread(guithread); - } - else - { - mainWindow->Draw(); - if (Settings.tooltips == TooltipsOn && THEME.showToolTip != 0 && mainWindow->GetState() != STATE_DISABLED) - mainWindow->DrawTooltip(); - - #ifdef HW_RVL - for(int i=3; i >= 0; i--) // so that player 1's cursor appears on top! - { - if(userInput[i].wpad.ir.valid) - Menu_DrawImg(userInput[i].wpad.ir.x-48, userInput[i].wpad.ir.y-48, 200.0, - 96, 96, pointer[i]->GetImage(), userInput[i].wpad.ir.angle, CFG.widescreen? 0.8 : 1, 1, 255); - if(Settings.rumble == RumbleOn) - { - DoRumble(i); - } - } - #endif - - Menu_Render(); - - for(int i=0; i < 4; i++) - mainWindow->Update(&userInput[i]); - - if(ExitRequested) - { - for(int a = 0; a < 255; a += 15) - { - mainWindow->Draw(); - Menu_DrawRectangle(0,0,screenwidth,screenheight,(GXColor){0, 0, 0, a},1); - Menu_Render(); - } - ExitApp(); - } - } - } - return NULL; -} - -/**************************************************************************** - * InitGUIThread - * - * Startup GUI threads - ***************************************************************************/ -void -InitGUIThreads() -{ - LWP_CreateThread (&guithread, UpdateGUI, NULL, NULL, 0, 70); -} - -/**************************************************************************** - * EntryCmp - ***************************************************************************/ -s32 __Menu_EntryCmp(const void *a, const void *b) - -{ - - struct discHdr *hdr1 = (struct discHdr *)a; - - struct discHdr *hdr2 = (struct discHdr *)b; - - - - /* Compare strings */ - - return stricmp(get_title(hdr1), get_title(hdr2)); - -} - -s32 __Menu_EntryCmpCount(const void *a, const void *b) -{ - s32 ret; - - struct discHdr *hdr1 = (struct discHdr *)a; - - struct discHdr *hdr2 = (struct discHdr *)b; - - /* Compare Play Count */ - u16 count1 = 0; - u16 count2 = 0; - struct Game_NUM* game_num1 = CFG_get_game_num(hdr1->id); - struct Game_NUM* game_num2 = CFG_get_game_num(hdr2->id); - - - - if (game_num1) count1 = game_num1->count; - if (game_num2) count2 = game_num2->count; - - ret = (s32) (count2-count1); - if (ret == 0) return stricmp(get_title(hdr1), get_title(hdr2)); - - return ret; -} - -/**************************************************************************** - * Get Gamelist - ***************************************************************************/ - -s32 __Menu_GetEntries(void) -{ - struct discHdr *buffer = NULL; - struct discHdr *buffer2 = NULL; - struct discHdr *header = NULL; - - u32 cnt, len; - s32 ret; - - /* Get list length */ - ret = WBFS_GetCount(&cnt); - if (ret < 0) - return ret; - - /* Buffer length */ - len = sizeof(struct discHdr) * cnt; - - /* Allocate memory */ - buffer = (struct discHdr *)memalign(32, len); - if (!buffer) - return -1; - - /* Clear buffer */ - memset(buffer, 0, len); - - /* Get header list */ - ret = WBFS_GetHeaders(buffer, cnt, sizeof(struct discHdr)); - if (ret < 0) { - if(buffer) free(buffer); - return ret; - } - - /* Filters */ - if (Settings.fave) { - u32 cnt2 = 0; - - for (u32 i = 0; i < cnt; i++) - { - header = &buffer[i]; - u8 favorite = 0; - struct Game_NUM* game_num = CFG_get_game_num(header->id); - if (game_num) { - favorite = game_num->favorite; - } - if (favorite==1) { - buffer2 = (discHdr *) realloc(buffer2, (cnt2+1) * sizeof(struct discHdr)); - if (!buffer2) - { - free(buffer); - return -1; - } - - memcpy((buffer2 + cnt2), (buffer + i), sizeof(struct discHdr)); - cnt2++; - } - } - if (buffer2) { - free(buffer); - buffer = buffer2; - buffer2 = NULL; - } else { - memset(buffer, 0, len); - } - cnt = cnt2; - } - - if (CFG.parentalcontrol && !CFG.godmode) { - u32 cnt2 = 0; - - for (u32 i = 0; i < cnt; i++) - { - header = &buffer[i]; - if (get_block(header) < CFG.parentalcontrol) { - buffer2 = (discHdr *) realloc(buffer2, (cnt2+1) * sizeof(struct discHdr)); - if (!buffer2) - { - free(buffer); - return -1; - } - - memcpy((buffer2 + cnt2), (buffer + i), sizeof(struct discHdr)); - cnt2++; - } - } - if (buffer2) { - free(buffer); - buffer = buffer2; - buffer2 = NULL; - } else { - memset(buffer, 0, len); - } - cnt = cnt2; - } - - if (Settings.sort==pcount) { - qsort(buffer, cnt, sizeof(struct discHdr), __Menu_EntryCmpCount); - } - else { - qsort(buffer, cnt, sizeof(struct discHdr), __Menu_EntryCmp); - } - - /* Free memory */ - if (gameList) - free(gameList); - - /* Set values */ - gameList = buffer; - buffer = NULL; - gameCnt = cnt; - - /* Reset variables */ - gameSelected = gameStart = 0; - - return 0; -} - -/**************************************************************************** - * OnScreenKeyboard - * - * Opens an on-screen keyboard window, with the data entered being stored - * into the specified variable. - ***************************************************************************/ - extern int min; -static int OnScreenKeyboard(char * var, u32 maxlen, int min) -{ - int save = -1; - int keyset = 0; - if (Settings.keyset == us) keyset = 0; - else if (Settings.keyset == dvorak) keyset = 1; - else if (Settings.keyset == euro) keyset = 2; - else if (Settings.keyset == azerty) keyset = 3; - - GuiKeyboard keyboard(var, maxlen, min, keyset); - - GuiSound btnSoundOver(button_over_pcm, button_over_pcm_size, SOUND_PCM, vol); - GuiSound btnClick(button_click2_pcm, button_click2_pcm_size, SOUND_PCM, vol); - - char imgPath[50]; - snprintf(imgPath, sizeof(imgPath), "%sbutton_dialogue_box.png", CFG.theme_path); - GuiImageData btnOutline(imgPath, button_dialogue_box_png); - - GuiTrigger trigA; - trigA.SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A); - GuiTrigger trigB; - trigB.SetSimpleTrigger(-1, WPAD_BUTTON_B | WPAD_CLASSIC_BUTTON_B, PAD_BUTTON_B); - - GuiText okBtnTxt(LANGUAGE.ok, 22, (GXColor){THEME.prompttxt_r, THEME.prompttxt_g, THEME.prompttxt_b, 255}); //{0, 0, 0, 255}); - GuiImage okBtnImg(&btnOutline); - if (Settings.wsprompt == yes){ - okBtnTxt.SetWidescreen(CFG.widescreen); - okBtnImg.SetWidescreen(CFG.widescreen); - } - GuiButton okBtn(&okBtnImg,&okBtnImg, 0, 4, 5, 15, &trigA, &btnSoundOver, &btnClick,1); - okBtn.SetLabel(&okBtnTxt); - GuiText cancelBtnTxt(LANGUAGE.Cancel, 22, (GXColor){THEME.prompttxt_r, THEME.prompttxt_g, THEME.prompttxt_b, 255}); //{0, 0, 0, 255}); - GuiImage cancelBtnImg(&btnOutline); - if (Settings.wsprompt == yes){ - cancelBtnTxt.SetWidescreen(CFG.widescreen); - cancelBtnImg.SetWidescreen(CFG.widescreen); - } - GuiButton cancelBtn(&cancelBtnImg,&cancelBtnImg, 1, 4, -5, 15, &trigA, &btnSoundOver, &btnClick,1); - cancelBtn.SetLabel(&cancelBtnTxt); - cancelBtn.SetTrigger(&trigB); - - keyboard.Append(&okBtn); - keyboard.Append(&cancelBtn); - - HaltGui(); - mainWindow->SetState(STATE_DISABLED); - mainWindow->Append(&keyboard); - mainWindow->ChangeFocus(&keyboard); - ResumeGui(); - - while(save == -1) - { - VIDEO_WaitVSync(); - - if(okBtn.GetState() == STATE_CLICKED) - save = 1; - else if(cancelBtn.GetState() == STATE_CLICKED) - save = 0; - } - - if(save) - { - snprintf(var, maxlen, "%s", keyboard.kbtextstr); - } - - HaltGui(); - mainWindow->Remove(&keyboard); - mainWindow->SetState(STATE_DEFAULT); - ResumeGui(); - return save; -} - - -/**************************************************************************** - * MenuInstall - ***************************************************************************/ - -static int MenuInstall() -{ - int menu = MENU_NONE; - static struct discHdr headerdisc ATTRIBUTE_ALIGN(32); - - if(Settings.cios == ios222) { - Disc_SetUSB(NULL, 1); - } else { - Disc_SetUSB(NULL, 0); - } - - int ret, choice = 0; - char *name; - static char buffer[MAX_CHARACTERS + 4]; - - GuiSound btnSoundOver(button_over_pcm, button_over_pcm_size, SOUND_PCM, vol); - - char imgPath[100]; - - snprintf(imgPath, sizeof(imgPath), "%sbattery.png", CFG.theme_path); - GuiImageData battery(imgPath, battery_png); - snprintf(imgPath, sizeof(imgPath), "%sbattery_red.png", CFG.theme_path); - GuiImageData batteryRed(imgPath, battery_red_png); - snprintf(imgPath, sizeof(imgPath), "%sbattery_bar.png", CFG.theme_path); - GuiImageData batteryBar(imgPath, battery_bar_png); - - HaltGui(); - GuiWindow w(screenwidth, screenheight); - - mainWindow->Append(&w); - - ResumeGui(); - - while(menu == MENU_NONE) - { - VIDEO_WaitVSync (); - - ret = DiscWait(LANGUAGE.InsertDisk,LANGUAGE.Waiting,LANGUAGE.Cancel,0,0); - if (ret < 0) { - WindowPrompt (LANGUAGE.ErrorreadingDisc,0,LANGUAGE.Back,0,0,0); - menu = MENU_DISCLIST; - break; - } - ret = Disc_Open(); - if (ret < 0) { - WindowPrompt (LANGUAGE.CouldnotopenDisc,0,LANGUAGE.Back,0,0,0); - menu = MENU_DISCLIST; - break; - } - - ret = Disc_IsWii(); - if (ret < 0) { - choice = WindowPrompt (LANGUAGE.NotaWiiDisc,LANGUAGE.InsertaWiiDisc,LANGUAGE.ok,LANGUAGE.Back,0,0); - - if (choice == 1) { - menu = MENU_INSTALL; - break; - } else - menu = MENU_DISCLIST; - break; - } - - Disc_ReadHeader(&headerdisc); - name = headerdisc.title; - if (strlen(name) < (MAX_CHARACTERS + 3)) { - memset(buffer, 0, sizeof(buffer)); - sprintf(name, "%s", name); - } else { - strncpy(buffer, name, MAX_CHARACTERS); - buffer[MAX_CHARACTERS] = '\0'; - strncat(buffer, "...", 3); - sprintf(name, "%s", buffer); - } - - ret = WBFS_CheckGame(headerdisc.id); - if (ret) { - WindowPrompt (LANGUAGE.Gameisalreadyinstalled,name,LANGUAGE.Back,0,0,0); - menu = MENU_DISCLIST; - break; - } - hdd = GetHddInfo(); - if (!hdd) { - WindowPrompt (LANGUAGE.NoHDDfound,LANGUAGE.Error,LANGUAGE.Back,0,0,0); - menu = MENU_DISCLIST; - break; - } - - f32 freespace, used; - - WBFS_DiskSpace(&used, &freespace); - float estimation = wbfs_estimate_disc(hdd, __WBFS_ReadDVD, NULL, ONLY_GAME_PARTITION); - gamesize = estimation/1073741824; - char gametxt[50]; - - sprintf(gametxt, "%s : %.2fGB", name, gamesize); - - wiilight(1); - choice = WindowPrompt(LANGUAGE.Continueinstallgame,gametxt,LANGUAGE.ok,LANGUAGE.Cancel,0,0); - - if(choice == 1) { - - sprintf(gametxt, "%s", LANGUAGE.Installinggame); - - if (gamesize > freespace) { - char errortxt[50]; - sprintf(errortxt, "%s: %.2fGB, %s: %.2fGB",LANGUAGE.GameSize, gamesize, LANGUAGE.FreeSpace, freespace); - choice = WindowPrompt(LANGUAGE.Notenoughfreespace,errortxt,LANGUAGE.ok, LANGUAGE.Return,0,0); - if (choice == 1) { - wiilight(1); - ret = ProgressWindow(gametxt, name); - if (ret != 0) { - WindowPrompt (LANGUAGE.Installerror,0,LANGUAGE.Back,0,0,0); - menu = MENU_DISCLIST; - break; - } - else { - wiilight(1); - __Menu_GetEntries(); //get the entries again - WindowPrompt (LANGUAGE.Successfullyinstalled,name,LANGUAGE.ok,0,0,0); - menu = MENU_DISCLIST; - break; - } - } else { - menu = MENU_DISCLIST; - break; - } - - } - else { - ret = ProgressWindow(gametxt, name); - if (ret != 0) { - WindowPrompt (LANGUAGE.Installerror,0,LANGUAGE.Back,0,0,0); - menu = MENU_DISCLIST; - break; - } else { - __Menu_GetEntries(); //get the entries again - WindowPrompt (LANGUAGE.Successfullyinstalled,name,LANGUAGE.ok,0,0,0); - menu = MENU_DISCLIST; - break; - } - } - } else { - menu = MENU_DISCLIST; - break; - } - - if (shutdown == 1) { - wiilight(0); - Sys_Shutdown(); - } - if(reset == 1) { - wiilight(0); - Sys_Reboot(); - } - } - - //Turn off the WiiLight - wiilight(0); - - HaltGui(); - - mainWindow->Remove(&w); - ResumeGui(); - SDCard_deInit(); - SDCard_Init(); - return menu; -} - -/**************************************************************************** - * MenuDiscList - ***************************************************************************/ - -static int MenuDiscList() -{ - - datagB=0; - int menu = MENU_NONE, dataef=0; - char imgPath[100]; - __Menu_GetEntries(); - - f32 freespace, used, size = 0.0; - u32 nolist; - char text[MAX_CHARACTERS + 4]; - int choice = 0, selectedold = 100; - s32 ret; - - //CLOCK - struct tm * timeinfo; - char theTime[80]=""; - time_t lastrawtime=0; - - WBFS_DiskSpace(&used, &freespace); - - if (!gameCnt) { //if there is no list of games to display - nolist = 1; - } - - GuiSound btnSoundOver(button_over_pcm, button_over_pcm_size, SOUND_PCM, vol); - GuiSound btnClick(button_click2_pcm, button_click2_pcm_size, SOUND_PCM, vol); - - snprintf(imgPath, sizeof(imgPath), "%sbutton_install.png", CFG.theme_path); - GuiImageData btnInstall(imgPath, button_install_png); - snprintf(imgPath, sizeof(imgPath), "%sbutton_install_over.png", CFG.theme_path); - GuiImageData btnInstallOver(imgPath, button_install_over_png); - - snprintf(imgPath, sizeof(imgPath), "%ssettings_button.png", CFG.theme_path); - GuiImageData btnSettings(imgPath, settings_button_png); - snprintf(imgPath, sizeof(imgPath), "%ssettings_button_over.png", CFG.theme_path); - GuiImageData btnSettingsOver(imgPath, settings_button_over_png); - GuiImageData dataID(&data1); - - snprintf(imgPath, sizeof(imgPath), "%swiimote_poweroff.png", CFG.theme_path); - GuiImageData btnpwroff(imgPath, wiimote_poweroff_png); - snprintf(imgPath, sizeof(imgPath), "%swiimote_poweroff_over.png", CFG.theme_path); - GuiImageData btnpwroffOver(imgPath, wiimote_poweroff_over_png); - snprintf(imgPath, sizeof(imgPath), "%smenu_button.png", CFG.theme_path); - GuiImageData btnhome(imgPath, menu_button_png); - snprintf(imgPath, sizeof(imgPath), "%smenu_button_over.png", CFG.theme_path); - GuiImageData btnhomeOver(imgPath, menu_button_over_png); - snprintf(imgPath, sizeof(imgPath), "%sSDcard.png", CFG.theme_path); - GuiImageData btnsdcard(imgPath, sdcard_png); - - snprintf(imgPath, sizeof(imgPath), "%sbattery.png", CFG.theme_path); - GuiImageData battery(imgPath, battery_png); - snprintf(imgPath, sizeof(imgPath), "%sbattery_red.png", CFG.theme_path); - GuiImageData batteryRed(imgPath, battery_red_png); - snprintf(imgPath, sizeof(imgPath), "%sbattery_bar.png", CFG.theme_path); - GuiImageData batteryBar(imgPath, battery_bar_png); - - snprintf(imgPath, sizeof(imgPath), "%sfavIcon.png", CFG.theme_path); - GuiImageData imgfavIcon(imgPath, favIcon_png); - snprintf(imgPath, sizeof(imgPath), "%sfavIcon_gray.png", CFG.theme_path); - GuiImageData imgfavIcon_gray(imgPath, favIcon_gray_png); - snprintf(imgPath, sizeof(imgPath), "%sabcIcon.png", CFG.theme_path); - GuiImageData imgabcIcon(imgPath, abcIcon_png); - snprintf(imgPath, sizeof(imgPath), "%sabcIcon_gray.png", CFG.theme_path); - GuiImageData imgabcIcon_gray(imgPath, abcIcon_gray_png); - snprintf(imgPath, sizeof(imgPath), "%splayCountIcon.png", CFG.theme_path); - GuiImageData imgplayCountIcon(imgPath, playCountIcon_png); - snprintf(imgPath, sizeof(imgPath), "%splayCountIcon_gray.png", CFG.theme_path); - GuiImageData imgplayCountIcon_gray(imgPath, playCountIcon_gray_png); - snprintf(imgPath, sizeof(imgPath), "%sarrangeGrid.png", CFG.theme_path); - GuiImageData imgarrangeGrid(imgPath, arrangeGrid_png); - snprintf(imgPath, sizeof(imgPath), "%sarrangeGrid_gray.png", CFG.theme_path); - GuiImageData imgarrangeGrid_gray(imgPath, arrangeGrid_gray_png); - snprintf(imgPath, sizeof(imgPath), "%sarrangeList.png", CFG.theme_path); - GuiImageData imgarrangeList(imgPath, arrangeList_png); - snprintf(imgPath, sizeof(imgPath), "%sarrangeList_gray.png", CFG.theme_path); - GuiImageData imgarrangeList_gray(imgPath, arrangeList_gray_png); - snprintf(imgPath, sizeof(imgPath), "%sarrangeCarousel.png", CFG.theme_path); - GuiImageData imgarrangeCarousel(imgPath, arrangeCarousel_png); - snprintf(imgPath, sizeof(imgPath), "%sarrangeCarousel_gray.png", CFG.theme_path); - GuiImageData imgarrangeCarousel_gray(imgPath, arrangeCarousel_gray_png); - - GuiTrigger trigA; - trigA.SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A); - GuiTrigger trigHome; - trigHome.SetButtonOnlyTrigger(-1, WPAD_BUTTON_HOME | WPAD_CLASSIC_BUTTON_HOME, 0); - - char spaceinfo[30]; - sprintf(spaceinfo,"%.2fGB %s %.2fGB %s",freespace,LANGUAGE.of,(freespace+used),LANGUAGE.free); - GuiText usedSpaceTxt(spaceinfo, 18, (GXColor){THEME.info_r, THEME.info_g, THEME.info_b, 255}); - usedSpaceTxt.SetAlignment(THEME.hddInfoAlign, ALIGN_TOP); - usedSpaceTxt.SetPosition(THEME.hddInfo_x, THEME.hddInfo_y); - - char GamesCnt[15]; - sprintf(GamesCnt,"%s: %i",LANGUAGE.Games, gameCnt); - GuiText gamecntTxt(GamesCnt, 18, (GXColor){THEME.info_r, THEME.info_g, THEME.info_b, 255}); - gamecntTxt.SetAlignment(THEME.gameCntAlign, ALIGN_TOP); - gamecntTxt.SetPosition(THEME.gameCnt_x,THEME.gameCnt_y); - - GuiTooltip installBtnTT(LANGUAGE.Installagame); - if (Settings.wsprompt == yes) - installBtnTT.SetWidescreen(CFG.widescreen); - GuiImage installBtnImg(&btnInstall); - GuiImage installBtnImgOver(&btnInstallOver); - installBtnImg.SetWidescreen(CFG.widescreen); - installBtnImgOver.SetWidescreen(CFG.widescreen); - - GuiButton installBtn(&installBtnImg, &installBtnImgOver, ALIGN_LEFT, ALIGN_TOP, THEME.install_x, THEME.install_y, &trigA, &btnSoundOver, &btnClick, 1, &installBtnTT,24,-30, 0,5); - - - GuiTooltip settingsBtnTT(LANGUAGE.settings); - if (Settings.wsprompt == yes) - settingsBtnTT.SetWidescreen(CFG.widescreen); - - GuiImage settingsBtnImg(&btnSettings); - settingsBtnImg.SetWidescreen(CFG.widescreen); - GuiImage settingsBtnImgOver(&btnSettingsOver); - settingsBtnImgOver.SetWidescreen(CFG.widescreen); - GuiButton settingsBtn(&settingsBtnImg,&settingsBtnImgOver, 0, 3, THEME.setting_x, THEME.setting_y, &trigA, &btnSoundOver, &btnClick,1,&settingsBtnTT,65,-30,0,5); - GuiTooltip homeBtnTT(LANGUAGE.BacktoHBCorWiiMenu); - if (Settings.wsprompt == yes) - homeBtnTT.SetWidescreen(CFG.widescreen); - - GuiImage homeBtnImg(&btnhome); - homeBtnImg.SetWidescreen(CFG.widescreen); - GuiImage homeBtnImgOver(&btnhomeOver); - homeBtnImgOver.SetWidescreen(CFG.widescreen); - GuiButton homeBtn(&homeBtnImg,&homeBtnImgOver, 0, 3, THEME.home_x, THEME.home_y, &trigA, &btnSoundOver, &btnClick,1,&homeBtnTT,15,-30,1,5); - homeBtn.SetTrigger(&trigHome); - - GuiTooltip poweroffBtnTT(LANGUAGE.PowerofftheWii); - if (Settings.wsprompt == yes) - poweroffBtnTT.SetWidescreen(CFG.widescreen); - - GuiImage poweroffBtnImg(&btnpwroff); - GuiImage poweroffBtnImgOver(&btnpwroffOver); - poweroffBtnImg.SetWidescreen(CFG.widescreen); - poweroffBtnImgOver.SetWidescreen(CFG.widescreen); - GuiButton poweroffBtn(&poweroffBtnImg,&poweroffBtnImgOver, 0, 3, THEME.power_x, THEME.power_y, &trigA, &btnSoundOver, &btnClick,1,&poweroffBtnTT,-10,-30,1,5); - - - GuiTooltip sdcardBtnTT(LANGUAGE.ReloadSD); - if (Settings.wsprompt == yes) - sdcardBtnTT.SetWidescreen(CFG.widescreen); - - GuiImage sdcardImg(&btnsdcard); - sdcardImg.SetWidescreen(CFG.widescreen); - GuiButton sdcardBtn(&sdcardImg,&sdcardImg, 0, 3, THEME.sdcard_x, THEME.sdcard_y, &trigA, &btnSoundOver, &btnClick,1,&sdcardBtnTT,15,-30,0,5); - - GuiImage wiiBtnImg(&dataID); - wiiBtnImg.SetWidescreen(CFG.widescreen); - GuiButton wiiBtn(&wiiBtnImg,&wiiBtnImg, 0, 4, 0, -10, &trigA, &btnSoundOver, &btnClick,0); - - GuiImage favoriteBtnImg(&imgfavIcon); - GuiImage favoriteBtnImg_g(&imgfavIcon_gray); - favoriteBtnImg.SetWidescreen(CFG.widescreen); - favoriteBtnImg_g.SetWidescreen(CFG.widescreen); - GuiButton favoriteBtn(&favoriteBtnImg_g,&favoriteBtnImg_g, 2, 3, THEME.favorite_x, THEME.favorite_y, &trigA, &btnSoundOver, &btnClick,1); - favoriteBtn.SetAlpha(180); - - GuiImage abcBtnImg(&imgabcIcon); - abcBtnImg.SetWidescreen(CFG.widescreen); - GuiImage abcBtnImg_g(&imgabcIcon_gray); - abcBtnImg_g.SetWidescreen(CFG.widescreen); - GuiButton abcBtn(&abcBtnImg_g,&abcBtnImg_g, 2, 3, THEME.abc_x, THEME.abc_y, &trigA, &btnSoundOver, &btnClick,1); - abcBtn.SetAlpha(180); - - - GuiImage countBtnImg(&imgplayCountIcon); - countBtnImg.SetWidescreen(CFG.widescreen); - GuiImage countBtnImg_g(&imgplayCountIcon_gray); - countBtnImg_g.SetWidescreen(CFG.widescreen); - GuiButton countBtn(&countBtnImg_g,&countBtnImg_g, 2, 3, THEME.count_x, THEME.count_y, &trigA, &btnSoundOver, &btnClick,1); - countBtn.SetAlpha(180); - - - GuiImage listBtnImg(&imgarrangeList); - listBtnImg.SetWidescreen(CFG.widescreen); - GuiImage listBtnImg_g(&imgarrangeList_gray); - listBtnImg_g.SetWidescreen(CFG.widescreen); - GuiButton listBtn(&listBtnImg_g,&listBtnImg_g, 2, 3, THEME.list_x, THEME.list_y, &trigA, &btnSoundOver, &btnClick,1); - listBtn.SetAlpha(180); - - - GuiImage gridBtnImg(&imgarrangeGrid); - gridBtnImg.SetWidescreen(CFG.widescreen); - GuiImage gridBtnImg_g(&imgarrangeGrid_gray); - gridBtnImg_g.SetWidescreen(CFG.widescreen); - GuiButton gridBtn(&gridBtnImg_g,&gridBtnImg_g, 2, 3, THEME.grid_x, THEME.grid_y, &trigA, &btnSoundOver, &btnClick,1); - gridBtn.SetAlpha(180); - - - GuiImage carouselBtnImg(&imgarrangeCarousel); - carouselBtnImg.SetWidescreen(CFG.widescreen); - GuiImage carouselBtnImg_g(&imgarrangeCarousel_gray); - carouselBtnImg_g.SetWidescreen(CFG.widescreen); - GuiButton carouselBtn(&carouselBtnImg_g,&carouselBtnImg_g, 2, 3, THEME.carousel_x, THEME.carousel_y, &trigA, &btnSoundOver, &btnClick,1); - carouselBtn.SetAlpha(180); - - if (Settings.fave) - { - favoriteBtn.SetImage(&favoriteBtnImg); - favoriteBtn.SetAlpha(255); - } - if (Settings.sort==all) - { - abcBtn.SetImage(&abcBtnImg); - abcBtn.SetAlpha(255); - } - else if (Settings.sort==pcount) - { - countBtn.SetImage(&countBtnImg); - countBtn.SetAlpha(255); - } - if (Settings.gameDisplay==list) - { - listBtn.SetImage(&listBtnImg); - listBtn.SetAlpha(255); - } - else if (Settings.gameDisplay==grid) - { - gridBtn.SetImage(&gridBtnImg); - gridBtn.SetAlpha(255); - } - else if (Settings.gameDisplay==carousel) - { - carouselBtn.SetImage(&carouselBtnImg); - carouselBtn.SetAlpha(255); - } - if (Settings.gameDisplay==list) - { - if(CFG.widescreen) - { - favoriteBtn.SetPosition(THEME.favorite_x, THEME.favorite_y); - abcBtn.SetPosition(THEME.abc_x, THEME.abc_y); - countBtn.SetPosition(THEME.count_x, THEME.count_y); - listBtn.SetPosition(THEME.list_x, THEME.list_y); - gridBtn.SetPosition(THEME.grid_x, THEME.grid_y); - carouselBtn.SetPosition(THEME.carousel_x, THEME.carousel_y); - } - else - { - favoriteBtn.SetPosition(THEME.favorite_x-20, THEME.favorite_y); - abcBtn.SetPosition(THEME.abc_x-12, THEME.abc_y); - countBtn.SetPosition(THEME.count_x-4, THEME.count_y); - listBtn.SetPosition(THEME.list_x+4, THEME.list_y); - gridBtn.SetPosition(THEME.grid_x+12, THEME.grid_y); - carouselBtn.SetPosition(THEME.carousel_x+20, THEME.carousel_y); - } - } - else - { - if(CFG.widescreen) - { - favoriteBtn.SetPosition(THEME.favorite_x-THEME.sortBarOffset, THEME.favorite_y); - abcBtn.SetPosition(THEME.abc_x-THEME.sortBarOffset, THEME.abc_y); - countBtn.SetPosition(THEME.count_x-THEME.sortBarOffset, THEME.count_y); - listBtn.SetPosition(THEME.list_x-THEME.sortBarOffset, THEME.list_y); - gridBtn.SetPosition(THEME.grid_x-THEME.sortBarOffset, THEME.grid_y); - carouselBtn.SetPosition(THEME.carousel_x-THEME.sortBarOffset, THEME.carousel_y); - } - else - { - favoriteBtn.SetPosition(THEME.favorite_x-20-THEME.sortBarOffset, THEME.favorite_y); - abcBtn.SetPosition(THEME.abc_x-12-THEME.sortBarOffset, THEME.abc_y); - countBtn.SetPosition(THEME.count_x-4-THEME.sortBarOffset, THEME.count_y); - listBtn.SetPosition(THEME.list_x+4-THEME.sortBarOffset, THEME.list_y); - gridBtn.SetPosition(THEME.grid_x+12-THEME.sortBarOffset, THEME.grid_y); - carouselBtn.SetPosition(THEME.carousel_x+20-THEME.sortBarOffset, THEME.carousel_y); - } - } - - //Downloading Covers - GuiTooltip DownloadBtnTT(LANGUAGE.ClicktoDownloadCovers); - if (Settings.wsprompt == yes) - DownloadBtnTT.SetWidescreen(CFG.widescreen); - - GuiButton DownloadBtn(160,224); - DownloadBtn.SetAlignment(ALIGN_LEFT, ALIGN_TOP); - DownloadBtn.SetPosition(THEME.cover_x,THEME.cover_y); - - if (CFG.godmode == 1) - {//only make the button have trigger & tooltip if in godmode - DownloadBtn.SetSoundOver(&btnSoundOver); - DownloadBtn.SetTrigger(&trigA); - DownloadBtn.SetToolTip(&DownloadBtnTT,205,-30); - } - else - DownloadBtn.SetRumble(false); - - GuiGameBrowser gameBrowser(THEME.selection_w, THEME.selection_h, gameList, gameCnt, CFG.theme_path, bg_options_png, startat, offset); - gameBrowser.SetPosition(THEME.selection_x, THEME.selection_y); - gameBrowser.SetAlignment(ALIGN_LEFT, ALIGN_CENTRE); - - GuiGameGrid gameGrid(640,400, gameList, gameCnt, CFG.theme_path, bg_options_png, 0, 0); - gameGrid.SetPosition(0,20); - gameGrid.SetAlignment(ALIGN_LEFT, ALIGN_CENTRE); - - GuiGameCarousel gameCarousel(640, 400, gameList, gameCnt, CFG.theme_path, bg_options_png, startat, offset); - gameCarousel.SetPosition(0,-20); - gameCarousel.SetAlignment(ALIGN_LEFT, ALIGN_CENTRE); - - GuiText clockTimeBack("88:88", 40, (GXColor){138, 138, 138, 40}); - clockTimeBack.SetAlignment(THEME.clockAlign, ALIGN_TOP); - clockTimeBack.SetPosition(THEME.clock_x, THEME.clock_y); - clockTimeBack.SetFont(fontClock); - if (Settings.gameDisplay==grid || Settings.gameDisplay==carousel) { - clockTimeBack.SetPosition(THEME.clock_x, THEME.clock_y+3); - } - GuiText clockTime(theTime, 40, (GXColor){138, 138, 138, 240}); - clockTime.SetAlignment(THEME.clockAlign, ALIGN_TOP); - clockTime.SetPosition(THEME.clock_x, THEME.clock_y); clockTime.SetFont(fontClock); - if (Settings.gameDisplay==grid || Settings.gameDisplay==carousel) { - clockTime.SetPosition(THEME.clock_x, THEME.clock_y+3); - } - - HaltGui(); - GuiWindow w(screenwidth, screenheight); - - if(THEME.showHDD == -1 || THEME.showHDD == 1) //force show hdd info - { - w.Append(&usedSpaceTxt); - } - if(THEME.showGameCnt == -1 || THEME.showGameCnt == 1) //force show game cnt info - { - w.Append(&gamecntTxt); - } - - w.Append(&sdcardBtn); - w.Append(&poweroffBtn); - if (CFG.godmode) - w.Append(&installBtn); - w.Append(&homeBtn); - w.Append(&settingsBtn); - if (Settings.gameDisplay==list){ - w.Append(&DownloadBtn); - } - w.Append(&favoriteBtn); - w.Append(&abcBtn); - w.Append(&countBtn); - w.Append(&listBtn); - w.Append(&gridBtn); - w.Append(&carouselBtn); - - if((Settings.hddinfo == hr12)||(Settings.hddinfo == hr24)) - { - w.Append(&clockTimeBack); - w.Append(&clockTime); - } - - if (Settings.gameDisplay==list){mainWindow->Append(&gameBrowser);} - if (Settings.gameDisplay==grid){mainWindow->Append(&gameGrid);} - if (Settings.gameDisplay==carousel){mainWindow->Append(&gameCarousel);} - mainWindow->Append(&w); - - ResumeGui(); - - while(menu == MENU_NONE) - { - - VIDEO_WaitVSync (); - - //CLOCK - time_t rawtime = time(0); //this fixes code dump caused by the clock - if (((Settings.hddinfo == hr12)||(Settings.hddinfo == hr24)) && rawtime != lastrawtime) { - lastrawtime = rawtime; - timeinfo = localtime (&rawtime); - if (dataed < 1){ - if(Settings.hddinfo == hr12){ - if(rawtime & 1) - strftime(theTime, sizeof(theTime), "%I:%M", timeinfo); - else - strftime(theTime, sizeof(theTime), "%I %M", timeinfo); - } - if(Settings.hddinfo == hr24){ - if(rawtime & 1) - strftime(theTime, sizeof(theTime), "%H:%M", timeinfo); - else - strftime(theTime, sizeof(theTime), "%H %M", timeinfo); - } - clockTime.SetText(theTime); - - } - else if (dataed > 0){ - - clockTime.SetTextf("%i", (dataed-1)); - } - - } - if ((datagB<1)&&(Settings.cios==1)&&(Settings.video == ntsc)&&(Settings.hddinfo == hr12)&&(Settings.qboot==1)&&(Settings.wsprompt==0)&&(Settings.language==ger)&&(Settings.tooltips==0)){dataed=1;dataef=1;}if (dataef==1){if (cosa>7){cosa=1;}datag++;if (sina==3){wiiBtn.SetAlignment(ALIGN_LEFT,ALIGN_BOTTOM);wiiBtnImg.SetAngle(0);if(datag>163){datag=1;}else if (datag<62){wiiBtn.SetPosition(((cosa)*70),(-2*(datag)+120));}else if(62<=datag){wiiBtn.SetPosition(((cosa)*70),((datag*2)-130));}if (datag>162){wiiBtn.SetPosition(700,700);w.Remove(&wiiBtn);datagB=2;cosa++;sina=lastrawtime%4;}w.Append(&wiiBtn);}if (sina==2){wiiBtn.SetAlignment(ALIGN_RIGHT,ALIGN_TOP);wiiBtnImg.SetAngle(270);if(datag>163){datag=1;}else if (datag<62){wiiBtn.SetPosition(((-2*(datag)+130)),((cosa)*50));}else if(62<=datag){wiiBtn.SetPosition((2*(datag)-120),((cosa)*50));}if (datag>162){wiiBtn.SetPosition(700,700);w.Remove(&wiiBtn);datagB=2;cosa++;sina=lastrawtime%4;}w.Append(&wiiBtn);}if (sina==1){wiiBtn.SetAlignment(ALIGN_TOP,ALIGN_LEFT);wiiBtnImg.SetAngle(180);if(datag>163){datag=1;}else if (datag<62){wiiBtn.SetPosition(((cosa)*70),(2*(datag)-120));}else if(62<=datag){wiiBtn.SetPosition(((cosa)*70),(-2*(datag)+130));}if (datag>162){wiiBtn.SetPosition(700,700);w.Remove(&wiiBtn);datagB=2;cosa++;sina=lastrawtime%4;}w.Append(&wiiBtn);}if (sina==0){wiiBtn.SetAlignment(ALIGN_TOP,ALIGN_LEFT);wiiBtnImg.SetAngle(90);if(datag>163){datag=1;}else if (datag<62){wiiBtn.SetPosition(((2*(datag)-130)),((cosa)*50));}else if(62<=datag){wiiBtn.SetPosition((-2*(datag)+120),((cosa)*50));}if (datag>162){wiiBtn.SetPosition(700,700);w.Remove(&wiiBtn);datagB=2;cosa++;sina=lastrawtime%4;}w.Append(&wiiBtn);}} - // respond to button presses - if(shutdown == 1) - { - Sys_Shutdown(); - } - if(reset == 1) - Sys_Reboot(); - - if(poweroffBtn.GetState() == STATE_CLICKED) - { - - choice = WindowPrompt(LANGUAGE.HowtoShutdown,0,LANGUAGE.FullShutdown, LANGUAGE.ShutdowntoIdle, LANGUAGE.Cancel,0); - if(choice == 2) - { - WPAD_Flush(0); - WPAD_Disconnect(0); - WPAD_Shutdown(); - - /* Set LED mode */ - ret = CONF_GetIdleLedMode(); - if(ret >= 0 && ret <= 2) - STM_SetLedMode(ret); - - STM_ShutdownToIdle(); - - } else if(choice == 1) { - WPAD_Flush(0); - WPAD_Disconnect(0); - WPAD_Shutdown(); - STM_ShutdownToStandby(); - } else { - poweroffBtn.ResetState(); - if (Settings.gameDisplay==list){gameBrowser.SetFocus(1);} - else if (Settings.gameDisplay==grid){gameGrid.SetFocus(1);} - else if (Settings.gameDisplay==carousel){gameCarousel.SetFocus(1);} - } - - } - else if(homeBtn.GetState() == STATE_CLICKED) - { - s32 thetimeofbg = bgMusic->GetPlayTime(); - bgMusic->Stop(); - choice = WindowExitPrompt(LANGUAGE.ExitUSBISOLoader,0, LANGUAGE.BacktoLoader,LANGUAGE.WiiMenu,LANGUAGE.Back,0); - if(!strcmp("", CFG.oggload_path) || !strcmp("notset", CFG.ogg_path)) { - bgMusic->Play(); - } else { - bgMusic->PlayOggFile(CFG.ogg_path); - } - bgMusic->SetPlayTime(thetimeofbg); - SetVolumeOgg(255*(vol/100.0)); - - if(choice == 3) - { - ExitApp(); - SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0); // Back to System Menu - } - else if (choice == 2) - { - ExitApp(); - if (*((u32*) 0x80001800)) exit(0); - // Channel Version - SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0); - } else { - homeBtn.ResetState(); - if (Settings.gameDisplay==list){gameBrowser.SetFocus(1);} - else if (Settings.gameDisplay==grid){gameGrid.SetFocus(1);} - else if (Settings.gameDisplay==carousel){gameCarousel.SetFocus(1);} - } - - } - else if(wiiBtn.GetState() == STATE_CLICKED) - { dataed++; - wiiBtn.ResetState(); - if (Settings.gameDisplay==list){gameBrowser.SetFocus(1);} - else if (Settings.gameDisplay==grid){gameGrid.SetFocus(1);} - else if (Settings.gameDisplay==carousel){gameCarousel.SetFocus(1);} - } - else if(installBtn.GetState() == STATE_CLICKED) - { - choice = WindowPrompt(LANGUAGE.Installagame,0,LANGUAGE.Yes,LANGUAGE.No,0,0); - if (choice == 1) - { - menu = MENU_INSTALL; - break; - } - else - { - installBtn.ResetState(); - if (Settings.gameDisplay==list){gameBrowser.SetFocus(1);} - else if (Settings.gameDisplay==grid){gameGrid.SetFocus(1);} - else if (Settings.gameDisplay==carousel){gameCarousel.SetFocus(1);} - } - } - - else if(sdcardBtn.GetState() == STATE_CLICKED) - { - SDCard_deInit(); - SDCard_Init(); - if (Settings.gameDisplay==list){ - startat = gameBrowser.GetSelectedOption(); - offset = gameBrowser.GetOffset();} - else if (Settings.gameDisplay==grid){ - startat = gameGrid.GetSelectedOption(); - offset = gameGrid.GetOffset();} - else if (Settings.gameDisplay==carousel){ - startat = gameCarousel.GetSelectedOption(); - offset = gameCarousel.GetOffset();} - if(isSdInserted()) { - CFG_Load(); - } - sdcardBtn.ResetState(); - menu = MENU_DISCLIST; - break; - } - - else if(DownloadBtn.GetState() == STATE_CLICKED) - { - if(isSdInserted()) { - choice = WindowPrompt(LANGUAGE.CoverDownload, 0, LANGUAGE.NormalCovers, LANGUAGE.t3Covers, LANGUAGE.DiscImages, LANGUAGE.Back); // ask for download choice - - if (choice != 0) - { - int netset; - int choice2 = choice; - - netset = NetworkInitPromp(choice2); - networkisinitialized = 1; - - if(netset < 0) - { - WindowPrompt(LANGUAGE.Networkiniterror, 0, LANGUAGE.ok,0,0,0); - netcheck = false; - - } else { - netcheck = true; - } - - if (netcheck) - { - - if (missingFiles != NULL && cntMissFiles > 0) - - { - char tempCnt[40]; - - sprintf(tempCnt,"%i %s",cntMissFiles,LANGUAGE.Missingfiles); - choice = WindowPrompt(LANGUAGE.DownloadBoxartimage,tempCnt,LANGUAGE.Yes,LANGUAGE.No,0,0); - if (choice == 1) - { - ret = ProgressDownloadWindow(choice2); - if (ret == 0) { - WindowPrompt(LANGUAGE.Downloadfinished,0,LANGUAGE.ok,0,0,0); - } else { - sprintf(tempCnt,"%i %s",ret,LANGUAGE.filesnotfoundontheserver); - WindowPrompt(LANGUAGE.Downloadfinished,tempCnt,LANGUAGE.ok,0,0,0); - } - } - } - else - { - WindowPrompt(LANGUAGE.Nofilemissing,0,LANGUAGE.ok,0,0,0); - } - } - } - } else { - WindowPrompt(LANGUAGE.NoSDcardinserted, LANGUAGE.InsertaSDCardtodownloadimages, LANGUAGE.ok, 0,0,0); - } - DownloadBtn.ResetState(); - if (Settings.gameDisplay==list){gameBrowser.SetFocus(1);} - else if (Settings.gameDisplay==grid){gameGrid.SetFocus(1);} - else if (Settings.gameDisplay==carousel){gameCarousel.SetFocus(1);} - }//end download - - else if(settingsBtn.GetState() == STATE_CLICKED) - { if (Settings.gameDisplay==list){ - startat = gameBrowser.GetSelectedOption(); - offset = gameBrowser.GetOffset();} - else if (Settings.gameDisplay==grid){ - startat = gameGrid.GetSelectedOption(); - offset = gameGrid.GetOffset();} - else if (Settings.gameDisplay==carousel){ - startat = gameCarousel.GetSelectedOption(); - offset = gameCarousel.GetOffset();} - menu = MENU_SETTINGS; - break; - - } - - else if(favoriteBtn.GetState() == STATE_CLICKED) - { - Settings.fave=!Settings.fave; - if(isSdInserted()) { - cfg_save_global(); - } - __Menu_GetEntries(); - if (Settings.gameDisplay==list){ - gameBrowser.Reload(gameList, gameCnt);} - else if (Settings.gameDisplay==grid){ - gameGrid.Reload(gameList, gameCnt);} - else if (Settings.gameDisplay==carousel){ - gameCarousel.Reload(gameList, gameCnt);} - gamecntTxt.SetTextf("%s: %i",LANGUAGE.Games, gameCnt); - selectedold = 1; - favoriteBtn.ResetState(); - Settings.fave ? (favoriteBtn.SetImage(&favoriteBtnImg), favoriteBtn.SetAlpha(255)) : (favoriteBtn.SetImage(&favoriteBtnImg_g), favoriteBtn.SetAlpha(180)); - } - - else if(abcBtn.GetState() == STATE_CLICKED) - { - if(Settings.sort != all) { - Settings.sort=all; - if(isSdInserted()) { - cfg_save_global(); - } - __Menu_GetEntries(); - if (Settings.gameDisplay==list){ - gameBrowser.Reload(gameList, gameCnt);} - else if (Settings.gameDisplay==grid){ - gameGrid.Reload(gameList, gameCnt);} - else if (Settings.gameDisplay==carousel){ - gameCarousel.Reload(gameList, gameCnt);} - selectedold = 1; - abcBtn.SetImage(&abcBtnImg); - abcBtn.SetAlpha(255); - countBtn.SetImage(&countBtnImg_g); - countBtn.SetAlpha(180); - } - abcBtn.ResetState(); - } - - else if(countBtn.GetState() == STATE_CLICKED) - { - if(Settings.sort != pcount) { - Settings.sort=pcount; - if(isSdInserted()) { - cfg_save_global(); - } - __Menu_GetEntries(); - if (Settings.gameDisplay==list){ - gameBrowser.Reload(gameList, gameCnt);} - else if (Settings.gameDisplay==grid){ - gameGrid.Reload(gameList, gameCnt);} - else if (Settings.gameDisplay==carousel){ - gameCarousel.Reload(gameList, gameCnt);} - selectedold = 1; - abcBtn.SetImage(&abcBtnImg_g); - abcBtn.SetAlpha(180); - countBtn.SetImage(&countBtnImg); - countBtn.SetAlpha(255); - } - countBtn.ResetState(); - - } - - else if(listBtn.GetState() == STATE_CLICKED) { - if (Settings.gameDisplay!=list){ - if (Settings.gameDisplay==grid) { - mainWindow->Remove(&gameGrid); - gridBtn.SetImage(&gridBtnImg_g); - gridBtn.SetAlpha(180); - } - if (Settings.gameDisplay==carousel) { - mainWindow->Remove(&gameCarousel); - carouselBtn.SetImage(&carouselBtnImg_g); - carouselBtn.SetAlpha(180); - } - HaltGui(); - mainWindow->Remove(&w); - Settings.gameDisplay=list; - gameBrowser.Reload(gameList, gameCnt); // initialize before append - mainWindow->Append(&gameBrowser); - mainWindow->Append(&w); - ResumeGui(); - listBtn.SetImage(&listBtnImg); - listBtn.SetAlpha(255); - if(CFG.widescreen) - { - favoriteBtn.SetPosition(THEME.favorite_x, THEME.favorite_y); - abcBtn.SetPosition(THEME.abc_x, THEME.abc_y); - countBtn.SetPosition(THEME.count_x, THEME.count_y); - listBtn.SetPosition(THEME.list_x, THEME.list_y); - gridBtn.SetPosition(THEME.grid_x, THEME.grid_y); - carouselBtn.SetPosition(THEME.carousel_x, THEME.carousel_y); - } else { - favoriteBtn.SetPosition(THEME.favorite_x-20, THEME.favorite_y); - abcBtn.SetPosition(THEME.abc_x-12, THEME.abc_y); - countBtn.SetPosition(THEME.count_x-4, THEME.count_y); - listBtn.SetPosition(THEME.list_x+4, THEME.list_y); - gridBtn.SetPosition(THEME.grid_x+12, THEME.grid_y); - carouselBtn.SetPosition(THEME.carousel_x+20, THEME.carousel_y); - } - if((Settings.hddinfo == hr12)||(Settings.hddinfo == hr24)) { - clockTime.SetPosition(THEME.clock_x, THEME.clock_y); - clockTimeBack.SetPosition(THEME.clock_x, THEME.clock_y); - w.Append(&clockTime); - w.Append(&clockTimeBack); - } - w.Append(&favoriteBtn); - w.Append(&abcBtn); - w.Append(&countBtn); - w.Append(&listBtn); - w.Append(&gridBtn); - w.Append(&carouselBtn); - w.Append(&DownloadBtn); - if(isSdInserted()) { - cfg_save_global(); - } - } - listBtn.ResetState(); - } - - else if (gridBtn.GetState() == STATE_CLICKED) { - if (Settings.gameDisplay!=grid){ - if (Settings.gameDisplay==list) { - mainWindow->Remove(&gameBrowser); - if (GameIDTxt) w.Remove(GameIDTxt); - if (GameRegionTxt) w.Remove(GameRegionTxt); - w.Remove(&DownloadBtn); - listBtn.SetImage(&listBtnImg_g); - listBtn.SetAlpha(180); - } - if (Settings.gameDisplay==carousel) { - mainWindow->Remove(&gameCarousel); - carouselBtn.SetImage(&carouselBtnImg_g); - carouselBtn.SetAlpha(180); - } - HaltGui(); - mainWindow->Remove(&w); - Settings.gameDisplay=grid; - gameGrid.Reload(gameList, gameCnt); // initialize before append - mainWindow->Append(&gameGrid); - mainWindow->Append(&w); - ResumeGui(); - gridBtn.SetImage(&gridBtnImg); - gridBtn.SetAlpha(255); - if(CFG.widescreen) - { - favoriteBtn.SetPosition(THEME.favorite_x-THEME.sortBarOffset, THEME.favorite_y); - abcBtn.SetPosition(THEME.abc_x-THEME.sortBarOffset, THEME.abc_y); - countBtn.SetPosition(THEME.count_x-THEME.sortBarOffset, THEME.count_y); - listBtn.SetPosition(THEME.list_x-THEME.sortBarOffset, THEME.list_y); - gridBtn.SetPosition(THEME.grid_x-THEME.sortBarOffset, THEME.grid_y); - carouselBtn.SetPosition(THEME.carousel_x-THEME.sortBarOffset, THEME.carousel_y); - } else { - favoriteBtn.SetPosition(THEME.favorite_x-20-THEME.sortBarOffset, THEME.favorite_y); - abcBtn.SetPosition(THEME.abc_x-12-THEME.sortBarOffset, THEME.abc_y); - countBtn.SetPosition(THEME.count_x-4-THEME.sortBarOffset, THEME.count_y); - listBtn.SetPosition(THEME.list_x+4-THEME.sortBarOffset, THEME.list_y); - gridBtn.SetPosition(THEME.grid_x+12-THEME.sortBarOffset, THEME.grid_y); - carouselBtn.SetPosition(THEME.carousel_x+20-THEME.sortBarOffset, THEME.carousel_y); - } - if((Settings.hddinfo == hr12)||(Settings.hddinfo == hr24)) { - clockTime.SetPosition(THEME.clock_x, THEME.clock_y+3); - clockTimeBack.SetPosition(THEME.clock_x, THEME.clock_y+3); - w.Append(&clockTime); - w.Append(&clockTimeBack); - } - w.Append(&favoriteBtn); - w.Append(&abcBtn); - w.Append(&countBtn); - w.Append(&listBtn); - w.Append(&gridBtn); - w.Append(&carouselBtn); - if(isSdInserted()) { - cfg_save_global(); - } - } - gridBtn.ResetState(); - } - - else if (carouselBtn.GetState() == STATE_CLICKED) { - if (Settings.gameDisplay!=carousel){ - if (Settings.gameDisplay==list) - mainWindow->Remove(&gameBrowser); - if (GameIDTxt) w.Remove(GameIDTxt); - if (GameRegionTxt) w.Remove(GameRegionTxt); - w.Remove(&DownloadBtn); - listBtn.SetImage(&listBtnImg_g); - listBtn.SetAlpha(180); - if (Settings.gameDisplay==grid) - mainWindow->Remove(&gameGrid); - gridBtn.SetImage(&gridBtnImg_g); - gridBtn.SetAlpha(180); - HaltGui(); - mainWindow->Remove(&w); - Settings.gameDisplay=carousel; - gameCarousel.Reload(gameList, gameCnt); // initialize before append - mainWindow->Append(&gameCarousel); - mainWindow->Append(&w); - ResumeGui(); - carouselBtn.SetImage(&carouselBtnImg); - carouselBtn.SetAlpha(255); - if(CFG.widescreen) - { - favoriteBtn.SetPosition(THEME.favorite_x-THEME.sortBarOffset, THEME.favorite_y); - abcBtn.SetPosition(THEME.abc_x-THEME.sortBarOffset, THEME.abc_y); - countBtn.SetPosition(THEME.count_x-THEME.sortBarOffset, THEME.count_y); - listBtn.SetPosition(THEME.list_x-THEME.sortBarOffset, THEME.list_y); - gridBtn.SetPosition(THEME.grid_x-THEME.sortBarOffset, THEME.grid_y); - carouselBtn.SetPosition(THEME.carousel_x-THEME.sortBarOffset, THEME.carousel_y); - } else { - favoriteBtn.SetPosition(THEME.favorite_x-20-THEME.sortBarOffset, THEME.favorite_y); - abcBtn.SetPosition(THEME.abc_x-12-THEME.sortBarOffset, THEME.abc_y); - countBtn.SetPosition(THEME.count_x-4-THEME.sortBarOffset, THEME.count_y); - listBtn.SetPosition(THEME.list_x+4-THEME.sortBarOffset, THEME.list_y); - gridBtn.SetPosition(THEME.grid_x+12-THEME.sortBarOffset, THEME.grid_y); - carouselBtn.SetPosition(THEME.carousel_x+20-THEME.sortBarOffset, THEME.carousel_y); - } - if((Settings.hddinfo == hr12)||(Settings.hddinfo == hr24)) { - clockTime.SetPosition(THEME.clock_x, THEME.clock_y+3); - clockTimeBack.SetPosition(THEME.clock_x, THEME.clock_y+3); - w.Append(&clockTime); - w.Append(&clockTimeBack); - } - w.Append(&favoriteBtn); - w.Append(&abcBtn); - w.Append(&countBtn); - w.Append(&listBtn); - w.Append(&gridBtn); - w.Append(&carouselBtn); - if(isSdInserted()) { - cfg_save_global(); - } - } - carouselBtn.ResetState(); - } - - if (Settings.gameDisplay==grid){ - int selectimg; - selectimg = gameGrid.GetSelectedOption(); gameSelected = gameGrid.GetClickedOption(); } - - if (Settings.gameDisplay==carousel){ - int selectimg; - selectimg = gameCarousel.GetSelectedOption(); gameSelected = gameCarousel.GetClickedOption(); } - - if (Settings.gameDisplay==list) { - //Get selected game under cursor - int selectimg;//, promptnumber; - char ID[4]; - char IDfull[7]; - selectimg = gameBrowser.GetSelectedOption(); gameSelected = gameBrowser.GetClickedOption(); - - - if (gameSelected > 0) //if click occured - selectimg = gameSelected; - - if ((selectimg >= 0) && (selectimg < (s32) gameCnt)) - { - if (selectimg != selectedold) - { - selectedold = selectimg;//update displayed cover, game ID, and region if the selected game changes - struct discHdr *header = &gameList[selectimg]; - snprintf (ID,sizeof(ID),"%c%c%c", header->id[0], header->id[1], header->id[2]); - snprintf (IDfull,sizeof(IDfull),"%c%c%c%c%c%c", header->id[0], header->id[1], header->id[2],header->id[3], header->id[4], header->id[5]); - w.Remove(&DownloadBtn); - - if (GameIDTxt) - { - w.Remove(GameIDTxt); - delete GameIDTxt; - GameIDTxt = NULL; - } - if(GameRegionTxt) - { - w.Remove(GameRegionTxt); - delete GameRegionTxt; - GameRegionTxt = NULL; - } - - switch(header->id[3]) - { - case 'E': - sprintf(gameregion,"NTSC U"); - break; - - case 'J': - sprintf(gameregion,"NTSC J"); - break; - - case 'K': - sprintf(gameregion,"NTSC K"); - break; - - case 'P': - case 'D': - case 'F': - case 'X': - case 'S': - case 'Y': - sprintf(gameregion," PAL "); - break; - } - - //load game cover - if (cover) - { - delete cover; - cover = NULL; - } - - snprintf(imgPath, sizeof(imgPath), "%s%s.png", CFG.covers_path, IDfull); - cover = new GuiImageData(imgPath,0); //load short id - if (!cover->GetImage()) //if could not load the short id image - { - delete cover; - snprintf(imgPath, sizeof(imgPath), "%s%s.png", CFG.covers_path, ID); - cover = new GuiImageData(imgPath, 0); //load full id image - if (!cover->GetImage()) - { - delete cover; - snprintf(imgPath, sizeof(imgPath), "%snoimage.png", CFG.covers_path); - cover = new GuiImageData(imgPath, nocover_png); //load no image - } - } - - if (coverImg) - { - delete coverImg; - coverImg = NULL; - } - coverImg = new GuiImage(cover); - coverImg->SetWidescreen(CFG.widescreen); - - DownloadBtn.SetImage(coverImg);// put the new image on the download button - w.Append(&DownloadBtn); - - if ((Settings.sinfo == GameID) || (Settings.sinfo == Both)){ - GameIDTxt = new GuiText(IDfull, 22, (GXColor){THEME.info_r, THEME.info_g, THEME.info_b, 255}); - GameIDTxt->SetAlignment(ALIGN_LEFT, ALIGN_TOP); - GameIDTxt->SetPosition(THEME.id_x,THEME.id_y); - GameIDTxt->SetEffect(EFFECT_FADE, 20); - w.Append(GameIDTxt); - } - - if ((Settings.sinfo == GameRegion) || (Settings.sinfo == Both)){ - GameRegionTxt = new GuiText(gameregion, 22, (GXColor){THEME.info_r, THEME.info_g, THEME.info_b, 255}); - GameRegionTxt->SetAlignment(ALIGN_LEFT, ALIGN_TOP); - GameRegionTxt->SetPosition(THEME.region_x, THEME.region_y); - GameRegionTxt->SetEffect(EFFECT_FADE, 20); - w.Append(GameRegionTxt); - } - } - } - } - - if ((gameSelected >= 0) && (gameSelected < (s32)gameCnt)) - { - struct discHdr *header = &gameList[gameSelected]; - WBFS_GameSize(header->id, &size); - if (strlen(get_title(header)) < (MAX_CHARACTERS + 3)) { - sprintf(text, "%s", get_title(header)); - } - else { - strncpy(text, get_title(header), MAX_CHARACTERS); - text[MAX_CHARACTERS] = '\0'; - strncat(text, "...", 3); - } - - if (Settings.qboot == yes)//quickboot game - { - - wiilight(0); - //////////save game play count//////////////// - extern u8 favorite; - extern u16 count; - struct Game_NUM* game_num = CFG_get_game_num(header->id); - - if (game_num) - { - favorite = game_num->favorite; - count = game_num->count; - - }count+=1; - - if(isSdInserted()) { - if (CFG_save_game_num(header->id)) - { - //WindowPrompt(LANGUAGE.SuccessfullySaved, 0, LANGUAGE.ok, 0,0,0); - } - else - { - WindowPrompt(LANGUAGE.SaveFailed, 0, LANGUAGE.ok, 0,0,0); - } - } - ////////////end save play count////////////// - - struct Game_CFG* game_cfg = CFG_get_game_opt(header->id); - - if (game_cfg)//if there are saved settings for this game use them - { - iosChoice = game_cfg->ios; - } - else// otherwise use the global settings - { - if(Settings.cios == ios222) { - iosChoice = i222; - } else { - iosChoice = i249; - } - } - - int ios2; - switch(iosChoice) - { - case i249: - ios2 = 0; - break; - - case i222: - ios2 = 1; - break; - - default: - ios2 = 0; - break; - } - - // if we have used the network or cios222 we need to reload the disklist - if(networkisinitialized == 1 || ios2 == 1 || Settings.cios == ios222) { - - - if(ios2 == 1) { - - ret = Sys_IosReload(222); - - if(ret < 0) { - Wpad_Init(); - WPAD_SetDataFormat(WPAD_CHAN_ALL,WPAD_FMT_BTNS_ACC_IR); - WPAD_SetVRes(WPAD_CHAN_ALL, screenwidth, screenheight); - - WindowPrompt(LANGUAGE.YoudonthavecIOS,LANGUAGE.LoadingincIOS,LANGUAGE.ok, 0,0,0); - - Sys_IosReload(249); - ios2 = 0; - } - - } else { - - ret = Sys_IosReload(249); - - } - } - - /* Set USB mode */ - ret = Disc_SetUSB(header->id, ios2); - if (ret < 0) { - sprintf(text, "%s %i", LANGUAGE.Error,ret); - WindowPrompt( - LANGUAGE.FailedtosetUSB, - text, - LANGUAGE.ok,0,0,0); - } - else { - /* Open disc */ - ret = Disc_Open(); - if (ret < 0) { - sprintf(text, "%s %i",LANGUAGE.Error, ret); - WindowPrompt( - LANGUAGE.Failedtoboot, - text, - LANGUAGE.ok,0,0,0); - } - else { - menu = MENU_EXIT; - } - } - break; - } - bool returnHere = true;// prompt to start game - while (returnHere) - { - - returnHere = false; - if(Settings.wiilight != 2) wiilight(1); - choice = GameWindowPrompt(); - header = &gameList[gameSelected]; //reset header - - if(choice == 1) - { - - wiilight(0); - struct Game_CFG* game_cfg = CFG_get_game_opt(header->id); - if (game_cfg)//if there are saved settings for this game use them - { - iosChoice = game_cfg->ios; - } - else// otherwise use the global settings - { - if(Settings.cios == ios222) { - iosChoice = i222; - } else { - iosChoice = i249; - } - } - - int ios2; - switch(iosChoice) - { - case i249: - ios2 = 0; - break; - - case i222: - ios2 = 1; - break; - - default: - ios2 = 0; - break; - } - - // if we have used the network or cios222 we need to reload the disklist - if(networkisinitialized == 1 || ios2 == 1 || Settings.cios == ios222) { - - - if(ios2 == 1) { - - ret = Sys_IosReload(222); - - if(ret < 0) { - Wpad_Init(); - WPAD_SetDataFormat(WPAD_CHAN_ALL,WPAD_FMT_BTNS_ACC_IR); - WPAD_SetVRes(WPAD_CHAN_ALL, screenwidth, screenheight); - - WindowPrompt(LANGUAGE.YoudonthavecIOS,LANGUAGE.LoadingincIOS,LANGUAGE.ok, 0,0,0); - - Sys_IosReload(249); - ios2 = 0; - } - - } else { - - ret = Sys_IosReload(249); - - } - } - - - - /* Set USB mode */ - ret = Disc_SetUSB(header->id, ios2); - if (ret < 0) { - sprintf(text, "%s %i", LANGUAGE.Error, ret); - WindowPrompt( - LANGUAGE.FailedtosetUSB, - text, - LANGUAGE.ok,0,0,0); - } - else { - /* Open disc */ - ret = Disc_Open(); - if (ret < 0) { - sprintf(text, "%s %i",LANGUAGE.Error, ret); - WindowPrompt( - LANGUAGE.Failedtoboot, - text, - LANGUAGE.ok,0,0,0); - - } - else { - menu = MENU_EXIT; - } - } - } - else if (choice == 2) - { - wiilight(0); - if (GameSettings(header) == 1) //if deleted - { - menu = MENU_DISCLIST; - break; - } - returnHere = true; - } - - else if (choice == 3) //WBFS renaming - { - wiilight(0); - //enter new game title - char entered[60]; - snprintf(entered, sizeof(entered), "%s", get_title(header)); - entered[59] = '\0'; - int result = OnScreenKeyboard(entered, 60,0); - if (result == 1) { - WBFS_RenameGame(header->id, entered); - __Menu_GetEntries(); - menu = MENU_DISCLIST; - } - } - - - else if(choice == 0) - if (Settings.gameDisplay==list){gameBrowser.SetFocus(1);} - else if (Settings.gameDisplay==grid){gameGrid.SetFocus(1);} - else if (Settings.gameDisplay==carousel){gameCarousel.SetFocus(1);} - } - } - } - - HaltGui(); - if (Settings.gameDisplay==list)mainWindow->Remove(&gameBrowser); - else if (Settings.gameDisplay==grid)mainWindow->Remove(&gameGrid); - else if (Settings.gameDisplay==carousel)mainWindow->Remove(&gameCarousel); - mainWindow->Remove(&w); - ResumeGui(); - return menu; -} - -/**************************************************************************** - * MenuFormat - ***************************************************************************/ - -static int MenuFormat() -{ - int menu = MENU_NONE; - char imgPath[100]; - - OptionList options; - partitionEntry partitions[MAX_PARTITIONS]; - - u32 cnt, sector_size, selected = 2000; - int choice, ret; - char text[ISFS_MAXPATH]; - - s32 ret2; - ret2 = Partition_GetEntries(partitions, §or_size); - - //create the partitionlist - for (cnt = 0; cnt < MAX_PARTITIONS; cnt++) { - partitionEntry *entry = &partitions[cnt]; - - /* Calculate size in gigabytes */ - f32 size = entry->size * (sector_size / GB_SIZE); - - if (size) { - sprintf(options.name[cnt], "%s %d:",LANGUAGE.Partition, cnt+1); - sprintf (options.value[cnt],"%.2fGB", size); - } else { - sprintf(options.name[cnt], "%s %d:",LANGUAGE.Partition, cnt+1); - sprintf (options.value[cnt],LANGUAGE.Cantbeformated); - } - } - - options.length = cnt; - - GuiSound btnSoundOver(button_over_pcm, button_over_pcm_size, SOUND_PCM, vol); - GuiSound btnClick(button_click2_pcm, button_click2_pcm_size, SOUND_PCM, vol); - snprintf(imgPath, sizeof(imgPath), "%swiimote_poweroff.png", CFG.theme_path); - GuiImageData btnpwroff(imgPath, wiimote_poweroff_png); - snprintf(imgPath, sizeof(imgPath), "%swiimote_poweroff_over.png", CFG.theme_path); - GuiImageData btnpwroffOver(imgPath, wiimote_poweroff_over_png); - snprintf(imgPath, sizeof(imgPath), "%smenu_button.png", CFG.theme_path); - GuiImageData btnhome(imgPath, menu_button_png); - snprintf(imgPath, sizeof(imgPath), "%smenu_button_over.png", CFG.theme_path); - GuiImageData btnhomeOver(imgPath, menu_button_over_png); - GuiImageData battery(battery_png); - GuiImageData batteryRed(battery_red_png); - GuiImageData batteryBar(battery_bar_png); - - GuiTrigger trigA; - trigA.SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A); - GuiTrigger trigHome; - trigHome.SetButtonOnlyTrigger(-1, WPAD_BUTTON_HOME | WPAD_CLASSIC_BUTTON_HOME, 0); - - GuiImage poweroffBtnImg(&btnpwroff); - GuiImage poweroffBtnImgOver(&btnpwroffOver); - poweroffBtnImg.SetWidescreen(CFG.widescreen); - poweroffBtnImgOver.SetWidescreen(CFG.widescreen); - GuiButton poweroffBtn(&poweroffBtnImg,&poweroffBtnImgOver, 0, 3, THEME.power_x, THEME.power_y, &trigA, &btnSoundOver, &btnClick,1); - GuiImage exitBtnImg(&btnhome); - GuiImage exitBtnImgOver(&btnhomeOver); - exitBtnImg.SetWidescreen(CFG.widescreen); - exitBtnImgOver.SetWidescreen(CFG.widescreen); - GuiButton exitBtn(&exitBtnImg,&exitBtnImgOver, 0, 3, 0,-10, &trigA, &btnSoundOver, &btnClick,1); - exitBtn.SetTrigger(&trigHome); - - #ifdef HW_RVL - int i = 0, level; - char txt[3]; - GuiText * batteryTxt[4]; - GuiImage * batteryImg[4]; - GuiImage * batteryBarImg[4]; - GuiButton * batteryBtn[4]; - - for(i=0; i < 4; i++) - { - - if(i == 0) - sprintf(txt, "P%d", i+1); - else - sprintf(txt, "P%d", i+1); - - batteryTxt[i] = new GuiText(txt, 22, (GXColor){THEME.info_r, THEME.info_g, THEME.info_b, 255}); - batteryTxt[i]->SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE); - batteryImg[i] = new GuiImage(&battery); - batteryImg[i]->SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE); - batteryImg[i]->SetPosition(36, 0); - batteryImg[i]->SetTile(0); - batteryBarImg[i] = new GuiImage(&batteryBar); - batteryBarImg[i]->SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE); - batteryBarImg[i]->SetPosition(33, 0); - - batteryBtn[i] = new GuiButton(40, 20); - batteryBtn[i]->SetLabel(batteryTxt[i]); - batteryBtn[i]->SetImage(batteryBarImg[i]); - batteryBtn[i]->SetIcon(batteryImg[i]); - batteryBtn[i]->SetAlignment(ALIGN_LEFT, ALIGN_TOP); - batteryBtn[i]->SetRumble(false); - batteryBtn[i]->SetAlpha(70); - } - - batteryBtn[0]->SetPosition(THEME.battery1_x, THEME.battery1_y); - batteryBtn[1]->SetPosition(THEME.battery2_x, THEME.battery2_y); - batteryBtn[2]->SetPosition(THEME.battery3_x, THEME.battery3_y); - batteryBtn[3]->SetPosition(THEME.battery4_x, THEME.battery4_y); - #endif - - GuiOptionBrowser optionBrowser(THEME.selection_w, THEME.selection_h, &options, CFG.theme_path, bg_options_png, 1, 0); - optionBrowser.SetPosition(THEME.selection_x, THEME.selection_y); - optionBrowser.SetAlignment(ALIGN_LEFT, ALIGN_CENTRE); - optionBrowser.SetCol2Position(200); - - HaltGui(); - GuiWindow w(screenwidth, screenheight); - w.Append(&poweroffBtn); - w.Append(&exitBtn); - - if (THEME.showBattery) - { - #ifdef HW_RVL - w.Append(batteryBtn[0]); - w.Append(batteryBtn[1]); - w.Append(batteryBtn[2]); - w.Append(batteryBtn[3]); - #endif - } - - mainWindow->Append(&w); - mainWindow->Append(&optionBrowser); - - ResumeGui(); - - while(menu == MENU_NONE) - { - VIDEO_WaitVSync (); - - #ifdef HW_RVL - for(i=0; i < 4; i++) - { - if(WPAD_Probe(i, NULL) == WPAD_ERR_NONE) // controller connected - { - level = (userInput[i].wpad.battery_level / 100.0) * 4; - if(level > 4) level = 4; - batteryImg[i]->SetTile(level); - - if(level == 0) - batteryBarImg[i]->SetImage(&batteryRed); - else - batteryBarImg[i]->SetImage(&batteryBar); - - batteryBtn[i]->SetAlpha(255); - } - else // controller not connected - { - batteryImg[i]->SetTile(0); - batteryImg[i]->SetImage(&battery); - batteryBtn[i]->SetAlpha(70); - } - } - #endif - - selected = optionBrowser.GetClickedOption(); - - for (cnt = 0; cnt < MAX_PARTITIONS; cnt++) { - if (cnt == selected) { - partitionEntry *entry = &partitions[selected]; - if (entry->size) { - sprintf(text, "%s %d : %.2fGB",LANGUAGE.Partition, selected+1, entry->size * (sector_size / GB_SIZE)); - choice = WindowPrompt( - LANGUAGE.Doyouwanttoformat, - text, - LANGUAGE.Yes, - LANGUAGE.No,0,0); - if(choice == 1) { - ret = FormatingPartition(LANGUAGE.Formattingpleasewait, entry); - if (ret < 0) { - WindowPrompt(LANGUAGE.Error,LANGUAGE.Failedformating,LANGUAGE.Return,0,0,0); - menu = MENU_SETTINGS; - - } else { - WBFS_Open(); - sprintf(text, "%s %s", text,LANGUAGE.formated); - WindowPrompt(LANGUAGE.Success,text,LANGUAGE.ok,0,0,0); - menu = MENU_DISCLIST; - } - } - } - } - } - if (shutdown == 1) - Sys_Shutdown(); - if(reset == 1) - Sys_Reboot(); - - if(poweroffBtn.GetState() == STATE_CLICKED) - { - choice = WindowPrompt (LANGUAGE.ShutdownSystem,LANGUAGE.Areyousure,LANGUAGE.Yes,LANGUAGE.No,0,0); - if(choice == 1) - { - WPAD_Flush(0); - WPAD_Disconnect(0); - WPAD_Shutdown(); - Sys_Shutdown(); - } - - } else if(exitBtn.GetState() == STATE_CLICKED) - { - choice = WindowPrompt (LANGUAGE.ReturntoWiiMenu,LANGUAGE.Areyousure,LANGUAGE.Yes,LANGUAGE.No,0,0); - if(choice == 1) - { - ExitApp(); - SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0); - } - } - } - - - HaltGui(); - - #ifdef HW_RVL - for(i=0; i < 4; i++) - { - delete batteryTxt[i]; - delete batteryImg[i]; - delete batteryBarImg[i]; - delete batteryBtn[i]; - } - #endif - - mainWindow->Remove(&optionBrowser); - mainWindow->Remove(&w); - ResumeGui(); - return menu; -} - -/**************************************************************************** - * MenuSettings - ***************************************************************************/ -static int MenuSettings() -{ - int menu = MENU_NONE; - int ret; - int choice = 0; - - GuiSound btnSoundOver(button_over_pcm, button_over_pcm_size, SOUND_PCM, vol); - GuiSound btnClick(button_click2_pcm, button_click2_pcm_size, SOUND_PCM, vol); - - char imgPath[100]; - - snprintf(imgPath, sizeof(imgPath), "%sbutton_dialogue_box.png", CFG.theme_path); - GuiImageData btnOutline(imgPath, button_dialogue_box_png); - snprintf(imgPath, sizeof(imgPath), "%ssettings_background.png", CFG.theme_path); - GuiImageData settingsbg(imgPath, settings_background_png); - snprintf(imgPath, sizeof(imgPath), "%stab_bg1.png", CFG.theme_path); - GuiImageData tab1(imgPath, tab_bg1_png); - snprintf(imgPath, sizeof(imgPath), "%stab_bg2.png", CFG.theme_path); - GuiImageData tab2(imgPath, tab_bg2_png); - snprintf(imgPath, sizeof(imgPath), "%stab_bg3.png", CFG.theme_path); - GuiImageData tab3(imgPath, tab_bg3_png); - snprintf(imgPath, sizeof(imgPath), "%supdateRev.png", CFG.theme_path); - GuiImageData updateRevImgData(imgPath, updateRev_png); - - GuiTrigger trigA; - trigA.SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A); - GuiTrigger trigHome; - trigHome.SetButtonOnlyTrigger(-1, WPAD_BUTTON_HOME | WPAD_CLASSIC_BUTTON_HOME, 0); - GuiTrigger trigB; - trigB.SetButtonOnlyTrigger(-1, WPAD_BUTTON_B | WPAD_CLASSIC_BUTTON_B, PAD_BUTTON_B); - GuiTrigger trigL; - trigL.SetButtonOnlyTrigger(-1, WPAD_BUTTON_LEFT | WPAD_CLASSIC_BUTTON_LEFT, PAD_BUTTON_LEFT); - GuiTrigger trigR; - trigR.SetButtonOnlyTrigger(-1, WPAD_BUTTON_RIGHT | WPAD_CLASSIC_BUTTON_RIGHT, PAD_BUTTON_RIGHT); - GuiTrigger trigMinus; - trigMinus.SetButtonOnlyTrigger(-1, WPAD_BUTTON_MINUS | WPAD_CLASSIC_BUTTON_MINUS, 0); - GuiTrigger trigPlus; - trigPlus.SetButtonOnlyTrigger(-1, WPAD_BUTTON_PLUS | WPAD_CLASSIC_BUTTON_PLUS, 0); - - GuiText titleTxt(LANGUAGE.settings, 28, (GXColor){0, 0, 0, 255}); - titleTxt.SetAlignment(ALIGN_CENTRE, ALIGN_TOP); - titleTxt.SetPosition(0,40); - - GuiImage settingsbackground(&settingsbg); - GuiButton settingsbackgroundbtn(settingsbackground.GetWidth(), settingsbackground.GetHeight()); - settingsbackgroundbtn.SetAlignment(ALIGN_LEFT, ALIGN_TOP); - settingsbackgroundbtn.SetPosition(0, 0); - settingsbackgroundbtn.SetImage(&settingsbackground); - - GuiText backBtnTxt(LANGUAGE.Back , 22, (GXColor){THEME.prompttxt_r, THEME.prompttxt_g, THEME.prompttxt_b, 255}); //{0, 0, 0, 255}); - backBtnTxt.SetMaxWidth(btnOutline.GetWidth()-30); - GuiImage backBtnImg(&btnOutline); - if (Settings.wsprompt == yes){ - backBtnTxt.SetWidescreen(CFG.widescreen); - backBtnImg.SetWidescreen(CFG.widescreen);} - GuiButton backBtn(&backBtnImg,&backBtnImg, 2, 3, -180, 400, &trigA, &btnSoundOver, &btnClick,1); - backBtn.SetLabel(&backBtnTxt); - backBtn.SetTrigger(&trigB); - - GuiButton homo(1,1); - homo.SetTrigger(&trigHome); - homo.SetAlignment(ALIGN_LEFT, ALIGN_TOP); - homo.SetPosition(0,0); - - GuiImage tab1Img(&tab1); - GuiImage tab2Img(&tab2); - GuiImage tab3Img(&tab3); - GuiButton tabBtn(tab1.GetWidth(), tab1.GetHeight()); - tabBtn.SetAlignment(ALIGN_CENTRE, ALIGN_TOP); - tabBtn.SetPosition(-202, 90); - tabBtn.SetImage(&tab1Img); - - GuiButton page1Btn(40, 96); - page1Btn.SetAlignment(ALIGN_CENTRE, ALIGN_TOP); - page1Btn.SetPosition(-202, 90); - page1Btn.SetSoundOver(&btnSoundOver); - page1Btn.SetSoundClick(&btnClick); - page1Btn.SetTrigger(0, &trigA); - - GuiButton page2Btn(40, 96); - page2Btn.SetAlignment(ALIGN_CENTRE, ALIGN_TOP); - page2Btn.SetPosition(-202, 186); - page2Btn.SetSoundOver(&btnSoundOver); - page2Btn.SetSoundClick(&btnClick); - page2Btn.SetTrigger(0, &trigA); - page2Btn.SetTrigger(1, &trigR); - page2Btn.SetTrigger(2, &trigPlus); - - GuiButton page3Btn(40, 96); - page3Btn.SetAlignment(ALIGN_CENTRE, ALIGN_TOP); - page3Btn.SetPosition(-202, 282); - page3Btn.SetSoundOver(&btnSoundOver); - page3Btn.SetSoundClick(&btnClick); - page3Btn.SetTrigger(0, &trigA); - page3Btn.SetTrigger(1, &trigR); - page3Btn.SetTrigger(2, &trigPlus); - - const char * text = LANGUAGE.Unlock; - if (CFG.godmode == 1) - text = LANGUAGE.Lock; - GuiText lockBtnTxt(text, 22, (GXColor){THEME.prompttxt_r, THEME.prompttxt_g, THEME.prompttxt_b, 255}); - lockBtnTxt.SetMaxWidth(btnOutline.GetWidth()-30); - GuiImage lockBtnImg(&btnOutline); - lockBtnImg.SetWidescreen(CFG.widescreen); - GuiButton lockBtn(&lockBtnImg,&lockBtnImg, 2, 3, 180, 400, &trigA, &btnSoundOver, &btnClick,1); - lockBtn.SetLabel(&lockBtnTxt); - - GuiImage updateBtnImg(&updateRevImgData); - updateBtnImg.SetWidescreen(CFG.widescreen); - GuiButton updateBtn(&updateBtnImg,&updateBtnImg, 2, 3, 70, 400, &trigA, &btnSoundOver, &btnClick,1); - updateBtn.SetVisible(false); - updateBtn.SetClickable(false); - - GuiImageData logo(credits_button_png); - GuiImage logoImg(&logo); - GuiImageData logoOver(credits_button_over_png); - GuiImage logoImgOver(&logoOver); - btnLogo = new GuiButton(logoImg.GetWidth(), logoImg.GetHeight()); - btnLogo->SetAlignment(ALIGN_CENTRE, ALIGN_BOTTOM); - btnLogo->SetPosition(0, -35); - btnLogo->SetImage(&logoImg); - btnLogo->SetImageOver(&logoImgOver); - btnLogo->SetEffectGrow(); - btnLogo->SetSoundOver(&btnSoundOver); - btnLogo->SetSoundClick(&btnClick); - btnLogo->SetTrigger(&trigA); - btnLogo->SetUpdateCallback(WindowCredits); - - customOptionList options2(9); - GuiCustomOptionBrowser optionBrowser2(396, 280, &options2, CFG.theme_path, "bg_options_settings.png", bg_options_settings_png, 0, 150); - optionBrowser2.SetPosition(0, 90); - optionBrowser2.SetAlignment(ALIGN_CENTRE, ALIGN_TOP); - GuiWindow w(screenwidth, screenheight); - - int pageToDisplay = 1; - while ( pageToDisplay > 0) //set pageToDisplay to 0 to quit - { - menu = MENU_NONE; - if ( pageToDisplay == 1) - { - - options2.SetName(0, "%s",LANGUAGE.VideoMode); - options2.SetName(1, "%s",LANGUAGE.VIDTVPatch); - options2.SetName(2, "%s",LANGUAGE.Language); - - options2.SetName(3, "Ocarina"); - - options2.SetName(4,"%s", LANGUAGE.Display); - options2.SetName(5,"%s", LANGUAGE.Clock); //CLOCK - options2.SetName(6,"%s", LANGUAGE.Rumble); //RUMBLE - options2.SetName(7,"%s", LANGUAGE.Volume); - options2.SetName(8,"%s", LANGUAGE.Tooltips); - - HaltGui(); - w.Append(&settingsbackgroundbtn); - w.Append(&titleTxt); - w.Append(&backBtn); - w.Append(&lockBtn); - w.Append(&updateBtn); - w.Append(btnLogo); - w.Append(&homo); - //set triggers for tabs - page1Btn.RemoveTrigger(1); - page1Btn.RemoveTrigger(2); - page2Btn.RemoveTrigger(1); - page2Btn.RemoveTrigger(2); - page3Btn.RemoveTrigger(1); - page3Btn.RemoveTrigger(2); - page2Btn.SetTrigger(1, &trigPlus); - page2Btn.SetTrigger(2, &trigR); - page3Btn.SetTrigger(1, &trigMinus); - page3Btn.SetTrigger(2, &trigL); - - - mainWindow->Append(&w); - mainWindow->Append(&optionBrowser2); - mainWindow->Append(&tabBtn); - mainWindow->Append(&page2Btn); - mainWindow->Append(&page3Btn); - - - ResumeGui(); - } - else if ( pageToDisplay == 2 ) - { - page1Btn.RemoveTrigger(1); - page1Btn.RemoveTrigger(2); - page2Btn.RemoveTrigger(1); - page2Btn.RemoveTrigger(2); - page3Btn.RemoveTrigger(1); - page3Btn.RemoveTrigger(2); - page1Btn.SetTrigger(1, &trigMinus); - page1Btn.SetTrigger(2, &trigL); - page3Btn.SetTrigger(1, &trigPlus); - page3Btn.SetTrigger(2, &trigR); - - mainWindow->Append(&optionBrowser2); - mainWindow->Append(&tabBtn); - mainWindow->Append(&page1Btn); - mainWindow->Append(&page3Btn); - - options2.SetName(0,"%s", LANGUAGE.Password); - options2.SetName(1,"%s", LANGUAGE.BootStandard); - options2.SetName(2,"%s", LANGUAGE.FlipX); - options2.SetName(3,"%s", LANGUAGE.QuickBoot); - options2.SetName(4,"%s", LANGUAGE.PromptsButtons); - options2.SetName(5,"%s", LANGUAGE.Parentalcontrol); - options2.SetName(6,"%s", LANGUAGE.CoverPath); - options2.SetName(7,"%s", LANGUAGE.DiscimagePath); - options2.SetName(8,"%s", LANGUAGE.ThemePath); - } - else if ( pageToDisplay == 3 ) - { - page1Btn.RemoveTrigger(1); - page1Btn.RemoveTrigger(2); - page2Btn.RemoveTrigger(1); - page2Btn.RemoveTrigger(2); - page3Btn.RemoveTrigger(1); - page3Btn.RemoveTrigger(2); - page2Btn.SetTrigger(1, &trigMinus); - page2Btn.SetTrigger(2, &trigL); - page1Btn.SetTrigger(1, &trigPlus); - page1Btn.SetTrigger(2, &trigR); - - mainWindow->Append(&optionBrowser2); - mainWindow->Append(&tabBtn); - mainWindow->Append(&page1Btn); - mainWindow->Append(&page3Btn); - - - options2.SetName(0, "%s",LANGUAGE.Titlestxtpath); - options2.SetName(1, "%s",LANGUAGE.AppLanguage); - options2.SetName(2, "%s",LANGUAGE.keyboard); - options2.SetName(3, "%s",LANGUAGE.Unicodefix); - options2.SetName(4, "%s",LANGUAGE.Backgroundmusic); - options2.SetName(5, "%s",LANGUAGE.Wiilight); - options2.SetName(6, "%s",LANGUAGE.Updatepath); - options2.SetName(7, "%s",LANGUAGE.Patchcountrystrings); - options2.SetName(8, "%s",LANGUAGE.Defaultsettings); - - } - while(menu == MENU_NONE) - { - VIDEO_WaitVSync (); - - if ( pageToDisplay == 1 ) - { - if(Settings.video >= settings_video_max) - Settings.video = 0; - if(Settings.language >= settings_language_max) - Settings.language = 0; - if(Settings.ocarina >= settings_off_on_max) - Settings.ocarina = 0; - if(Settings.vpatch >= settings_off_on_max) - Settings.vpatch = 0; - if(Settings.sinfo >= settings_sinfo_max) - Settings.sinfo = 0; - if(Settings.hddinfo >= settings_clock_max) - Settings.hddinfo = 0; //CLOCK - if(Settings.rumble >= settings_rumble_max) - Settings.rumble = 0; //RUMBLE - if(Settings.volume >= settings_volume_max) - Settings.volume = 0; - if (Settings.tooltips >= settings_tooltips_max) - Settings.tooltips = 0; - - if (Settings.video == discdefault) options2.SetValue(0,"%s",LANGUAGE.DiscDefault); - else if (Settings.video == systemdefault) options2.SetValue(0,"%s",LANGUAGE.SystemDefault); - else if (Settings.video == patch) options2.SetValue(0,"%s",LANGUAGE.AutoPatch); - else if (Settings.video == pal50) options2.SetValue(0,"%s PAL50",LANGUAGE.Force); - else if (Settings.video == pal60) options2.SetValue(0,"%s PAL60",LANGUAGE.Force); - else if (Settings.video == ntsc) options2.SetValue(0,"%s NTSC",LANGUAGE.Force); - - if (Settings.vpatch == on) options2.SetValue(1,"%s",LANGUAGE.ON); - else if (Settings.vpatch == off) options2.SetValue(1,"%s",LANGUAGE.OFF); - - if (Settings.language == ConsoleLangDefault) options2.SetValue(2,"%s",LANGUAGE.ConsoleDefault); - else if (Settings.language == jap) options2.SetValue(2,"%s",LANGUAGE.Japanese); - else if (Settings.language == ger) options2.SetValue(2,"%s",LANGUAGE.German); - else if (Settings.language == eng) options2.SetValue(2,"%s",LANGUAGE.English); - else if (Settings.language == fren) options2.SetValue(2,"%s",LANGUAGE.French); - else if (Settings.language == esp) options2.SetValue(2,"%s",LANGUAGE.Spanish); - else if (Settings.language == it) options2.SetValue(2,"%s",LANGUAGE.Italian); - else if (Settings.language == dut) options2.SetValue(2,"%s",LANGUAGE.Dutch); - else if (Settings.language == schin) options2.SetValue(2,"%s",LANGUAGE.SChinese); - else if (Settings.language == tchin) options2.SetValue(2,"%s",LANGUAGE.TChinese); - else if (Settings.language == kor) options2.SetValue(2,"%s",LANGUAGE.Korean); - - if (Settings.ocarina == on) options2.SetValue(3,"%s",LANGUAGE.ON); - else if (Settings.ocarina == off) options2.SetValue(3,"%s",LANGUAGE.OFF); - - if (Settings.sinfo == GameID) options2.SetValue(4,"%s",LANGUAGE.GameID); - else if (Settings.sinfo == GameRegion) options2.SetValue(4,"%s",LANGUAGE.GameRegion); - else if (Settings.sinfo == Both) options2.SetValue(4,"%s",LANGUAGE.Both); - else if (Settings.sinfo == Neither) options2.SetValue(4,"%s",LANGUAGE.Neither); - - if (Settings.hddinfo == hr12) options2.SetValue(5,"12 %s",LANGUAGE.hour); - else if (Settings.hddinfo == hr24) options2.SetValue(5,"24 %s",LANGUAGE.hour); - else if (Settings.hddinfo == Off) options2.SetValue(5,"%s",LANGUAGE.OFF); - - if (Settings.rumble == RumbleOn) options2.SetValue(6,"%s",LANGUAGE.ON); - else if (Settings.rumble == RumbleOff) options2.SetValue(6,"%s",LANGUAGE.OFF); - - if (Settings.volume == v10) options2.SetValue(7,"10"); - else if (Settings.volume == v20) options2.SetValue(7,"20"); - else if (Settings.volume == v30) options2.SetValue(7,"30"); - else if (Settings.volume == v40) options2.SetValue(7,"40"); - else if (Settings.volume == v50) options2.SetValue(7,"50"); - else if (Settings.volume == v60) options2.SetValue(7,"60"); - else if (Settings.volume == v70) options2.SetValue(7,"70"); - else if (Settings.volume == v80) options2.SetValue(7,"80"); - else if (Settings.volume == v90) options2.SetValue(7,"90"); - else if (Settings.volume == v100) options2.SetValue(7,"100"); - else if (Settings.volume == v0) options2.SetValue(7,"%s",LANGUAGE.OFF); - - - if (Settings.tooltips == TooltipsOn) options2.SetValue(8,"%s",LANGUAGE.ON); - else if (Settings.tooltips == TooltipsOff) options2.SetValue(8,"%s",LANGUAGE.OFF); - - ret = optionBrowser2.GetClickedOption(); - - switch (ret) - { - case 0: - Settings.video++; - break; - case 1: - Settings.vpatch++; - break; - case 2: - Settings.language++; - break; - case 3: - Settings.ocarina++; - break; - case 4: // Game Code and Region - Settings.sinfo++; - break; - case 5: //CLOCK - Settings.hddinfo++; - break; - case 6: //Rumble - Settings.rumble++; - break; - case 7: - Settings.volume++; - break; - case 8: - Settings.tooltips++; - break; - } - } - - if ( pageToDisplay == 2 ) - { - if ( Settings.cios >= settings_cios_max) - Settings.cios = 0; - if ( Settings.xflip >= settings_xflip_max) - Settings.xflip = 0; - if ( Settings.qboot > 1 ) - Settings.qboot = 0; - if ( Settings.wsprompt > 1 ) - Settings.wsprompt = 0; - if (CFG.parentalcontrol > 3 ) - CFG.parentalcontrol = 0; - - - if ( CFG.godmode != 1) options2.SetValue(0, "********"); - else if (!strcmp("", Settings.unlockCode)) options2.SetValue(0, "%s",LANGUAGE.notset); - else options2.SetValue(0, Settings.unlockCode); - - if (CFG.godmode != 1) options2.SetValue(1, "********"); - else if (Settings.cios == ios249) options2.SetValue(1,"cIOS 249"); - else if (Settings.cios == ios222) options2.SetValue(1,"cIOS 222"); - - if (Settings.xflip == no) options2.SetValue(2,"%s/%s",LANGUAGE.Right,LANGUAGE.Next); - else if (Settings.xflip == yes) options2.SetValue(2,"%s/%s",LANGUAGE.Left,LANGUAGE.Prev); - else if (Settings.xflip == sysmenu) options2.SetValue(2,"%s", LANGUAGE.LikeSysMenu); - else if (Settings.xflip == wtf) options2.SetValue(2,"%s/%s",LANGUAGE.Right,LANGUAGE.Prev); - else if (Settings.xflip == disk3d) options2.SetValue(2,"DiskFlip"); - - if (Settings.qboot == no) options2.SetValue(3,"%s",LANGUAGE.No); - else if (Settings.qboot == yes) options2.SetValue(3,"%s",LANGUAGE.Yes); - - if (Settings.wsprompt == no) options2.SetValue(4,"%s",LANGUAGE.Normal); - else if (Settings.wsprompt == yes) options2.SetValue(4,"%s",LANGUAGE.WidescreenFix); - - if (CFG.godmode != 1) options2.SetValue(5, "********"); - else if(CFG.parentalcontrol == 0) options2.SetValue(5, "0"); - else if(CFG.parentalcontrol == 1) options2.SetValue(5, "1"); - else if(CFG.parentalcontrol == 2) options2.SetValue(5, "2"); - else if(CFG.parentalcontrol == 3) options2.SetValue(5, "3"); - - options2.SetValue(6, "%s", CFG.covers_path); - options2.SetValue(7, "%s", CFG.disc_path); - options2.SetValue(8, "%s", CFG.theme_path); - - ret = optionBrowser2.GetClickedOption(); - - switch (ret) - { - - case 0: // Modify Password - if ( CFG.godmode == 1) - { - mainWindow->Remove(&optionBrowser2); - mainWindow->Remove(&page1Btn); - mainWindow->Remove(&page2Btn); - mainWindow->Remove(&tabBtn); - mainWindow->Remove(&page3Btn); - w.Remove(&backBtn); - w.Remove(&lockBtn); - w.Remove(&updateBtn); - char entered[20] = ""; - strncpy(entered, Settings.unlockCode, sizeof(entered)); - int result = OnScreenKeyboard(entered, 20,0); - mainWindow->Append(&optionBrowser2); - mainWindow->Append(&tabBtn); - mainWindow->Append(&page1Btn); - mainWindow->Append(&page2Btn); - mainWindow->Append(&page3Btn); - w.Append(&backBtn); - w.Append(&lockBtn); - w.Append(&updateBtn); - if ( result == 1 ) - { - strncpy(Settings.unlockCode, entered, sizeof(Settings.unlockCode)); - WindowPrompt(LANGUAGE.PasswordChanged,LANGUAGE.Passwordhasbeenchanged,LANGUAGE.ok,0,0,0); - } - } - else - { - WindowPrompt(LANGUAGE.Passwordchange,LANGUAGE.Consoleshouldbeunlockedtomodifyit,LANGUAGE.ok,0,0,0); - } - break; - case 1: - if ( CFG.godmode == 1) - Settings.cios++; - break; - case 2: - Settings.xflip++; - break; - case 3: - Settings.qboot++; - break; - case 4: - Settings.wsprompt++; - break; - case 5: - if ( CFG.godmode == 1) - CFG.parentalcontrol++; - break; - case 6: - if ( CFG.godmode == 1) - { - mainWindow->Remove(&optionBrowser2); - mainWindow->Remove(&page1Btn); - mainWindow->Remove(&page2Btn); - mainWindow->Remove(&tabBtn); - mainWindow->Remove(&page3Btn); - w.Remove(&backBtn); - w.Remove(&lockBtn); - w.Remove(&updateBtn); - char entered[43] = ""; - strncpy(entered, CFG.covers_path, sizeof(entered)); - int result = OnScreenKeyboard(entered,43,4); - mainWindow->Append(&optionBrowser2); - mainWindow->Append(&page1Btn); - mainWindow->Append(&page2Btn); - mainWindow->Append(&tabBtn); - mainWindow->Append(&page3Btn); - w.Append(&backBtn); - w.Append(&lockBtn); - w.Append(&updateBtn); - if ( result == 1 ) - { - int len = (strlen(entered)-1); - if(entered[len] !='/') - strncat (entered, "/", 1); - strncpy(CFG.covers_path, entered, sizeof(CFG.covers_path)); - WindowPrompt(LANGUAGE.CoverpathChanged,0,LANGUAGE.ok,0,0,0); - if(!isSdInserted()) { - WindowPrompt(LANGUAGE.NoSDcardinserted, LANGUAGE.InsertaSDCardtosave, LANGUAGE.ok, 0,0,0); - } - } - } - else - { - WindowPrompt(LANGUAGE.Coverpathchange,LANGUAGE.Consoleshouldbeunlockedtomodifyit,LANGUAGE.ok,0,0,0); - } - break; - case 7: - if ( CFG.godmode == 1) - { - mainWindow->Remove(&optionBrowser2); - mainWindow->Remove(&page1Btn); - mainWindow->Remove(&page2Btn); - mainWindow->Remove(&tabBtn); - mainWindow->Remove(&page3Btn); - w.Remove(&backBtn); - w.Remove(&lockBtn); - w.Remove(&updateBtn); - char entered[43] = ""; - strncpy(entered, CFG.disc_path, sizeof(entered)); - int result = OnScreenKeyboard(entered, 43,4); - mainWindow->Append(&optionBrowser2); - mainWindow->Append(&page1Btn); - mainWindow->Append(&page2Btn); - mainWindow->Append(&tabBtn); - mainWindow->Append(&page3Btn); - w.Append(&backBtn); - w.Append(&lockBtn); - w.Append(&updateBtn); - if ( result == 1 ) - { - int len = (strlen(entered)-1); - if(entered[len] !='/') - strncat (entered, "/", 1); - strncpy(CFG.disc_path, entered, sizeof(CFG.disc_path)); - WindowPrompt(LANGUAGE.DiscpathChanged,0,LANGUAGE.ok,0,0,0); - if(!isSdInserted()) { - WindowPrompt(LANGUAGE.NoSDcardinserted, LANGUAGE.InsertaSDCardtosave, LANGUAGE.ok, 0,0,0); - } - } - } - else - { - WindowPrompt(LANGUAGE.Discpathchange,LANGUAGE.Consoleshouldbeunlockedtomodifyit,LANGUAGE.ok,0,0,0); - } - break; - case 8: - if ( CFG.godmode == 1) - { - mainWindow->Remove(&optionBrowser2); - mainWindow->Remove(&page1Btn); - mainWindow->Remove(&page2Btn); - mainWindow->Remove(&tabBtn); - mainWindow->Remove(&page3Btn); - w.Remove(&backBtn); - w.Remove(&lockBtn); - w.Remove(&updateBtn); - char entered[43] = ""; - strncpy(entered, CFG.theme_path, sizeof(entered)); - int result = OnScreenKeyboard(entered, 43,4); - mainWindow->Append(&optionBrowser2); - mainWindow->Append(&page1Btn); - mainWindow->Append(&page2Btn); - mainWindow->Append(&tabBtn); - mainWindow->Append(&page3Btn); - w.Append(&backBtn); - w.Append(&lockBtn); - w.Append(&updateBtn); - if ( result == 1 ) - { - int len = (strlen(entered)-1); - if(entered[len] !='/') - strncat (entered, "/", 1); - strncpy(CFG.theme_path, entered, sizeof(CFG.theme_path)); - WindowPrompt(LANGUAGE.ThemepathChanged,0,LANGUAGE.ok,0,0,0); - if(!isSdInserted()) { - WindowPrompt(LANGUAGE.NoSDcardinserted, LANGUAGE.InsertaSDCardtosave, LANGUAGE.ok, 0,0,0); - } else { - cfg_save_global(); - } - mainWindow->Remove(bgImg); - CFG_Load(); - CFG_LoadGlobal(); - menu = MENU_SETTINGS; - #ifdef HW_RVL - snprintf(imgPath, sizeof(imgPath), "%splayer1_point.png", CFG.theme_path); - pointer[0] = new GuiImageData(imgPath, player1_point_png); - snprintf(imgPath, sizeof(imgPath), "%splayer2_point.png", CFG.theme_path); - pointer[1] = new GuiImageData(imgPath, player2_point_png); - snprintf(imgPath, sizeof(imgPath), "%splayer3_point.png", CFG.theme_path); - pointer[2] = new GuiImageData(imgPath, player3_point_png); - snprintf(imgPath, sizeof(imgPath), "%splayer4_point.png", CFG.theme_path); - pointer[3] = new GuiImageData(imgPath, player4_point_png); - #endif - if (CFG.widescreen) - snprintf(imgPath, sizeof(imgPath), "%swbackground.png", CFG.theme_path); - else - snprintf(imgPath, sizeof(imgPath), "%sbackground.png", CFG.theme_path); - - background = new GuiImageData(imgPath, CFG.widescreen? wbackground_png : background_png); - - bgImg = new GuiImage(background); - mainWindow->Append(bgImg); - mainWindow->Append(&w); - - w.Append(&settingsbackgroundbtn); - w.Append(&titleTxt); - w.Append(&backBtn); - w.Append(&lockBtn); - w.Append(&updateBtn); - w.Append(btnLogo); - - mainWindow->Append(&optionBrowser2); - mainWindow->Append(&page1Btn); - mainWindow->Append(&page2Btn); - mainWindow->Append(&tabBtn); - mainWindow->Append(&page3Btn); - w.Append(&backBtn); - w.Append(&lockBtn); - w.Append(&updateBtn); - } - } - else - { - WindowPrompt(LANGUAGE.Themepathchange,LANGUAGE.Consoleshouldbeunlockedtomodifyit,LANGUAGE.ok,0,0,0); - } - break; - } - } - if (pageToDisplay == 3) - { - - if ( Settings.keyset >= settings_keyset_max) - Settings.keyset = 0; - if ( Settings.unicodefix > 2 ) - Settings.unicodefix = 0; - if ( Settings.wiilight > 2 ) - Settings.wiilight = 0; - if ( Settings.patchcountrystrings > 1) - Settings.patchcountrystrings = 0; - - options2.SetValue(0, "%s", CFG.titlestxt_path); - - options2.SetValue(1, "%s", CFG.language_path); - - if (Settings.keyset == us) options2.SetValue(2,"QWERTY"); - else if (Settings.keyset == dvorak) options2.SetValue(2,"DVORAK"); - else if (Settings.keyset == euro) options2.SetValue(2,"QWERTZ"); - else if (Settings.keyset == azerty) options2.SetValue(2,"AZERTY"); - - if (Settings.unicodefix == 0) options2.SetValue(3,"%s",LANGUAGE.OFF); - else if (Settings.unicodefix == 1) options2.SetValue(3,"%s",LANGUAGE.TChinese); - else if (Settings.unicodefix == 2) options2.SetValue(3,"%s",LANGUAGE.SChinese); - - if(!strcmp("notset", CFG.ogg_path) || !strcmp("",CFG.oggload_path)) - options2.SetValue(4, "%s", LANGUAGE.Standard); - else - options2.SetValue(4, "%s", CFG.ogg_path); - - if (Settings.wiilight == 0) options2.SetValue(5,"%s",LANGUAGE.OFF); - else if (Settings.wiilight == 1) options2.SetValue(5,"%s",LANGUAGE.ON); - else if (Settings.wiilight == 2) options2.SetValue(5,"%s",LANGUAGE.OnlyInstall); - - options2.SetValue(6, "%s", CFG.update_path); - - if (Settings.patchcountrystrings == 0) options2.SetValue(7,"%s",LANGUAGE.OFF); - else if (Settings.patchcountrystrings == 1) options2.SetValue(7,"%s",LANGUAGE.ON); - - options2.SetValue(8, " "); - - ret = optionBrowser2.GetClickedOption(); - - switch(ret) - { - case 0: - if ( CFG.godmode == 1) - { - mainWindow->Remove(&optionBrowser2); - mainWindow->Remove(&page1Btn); - mainWindow->Remove(&page2Btn); - mainWindow->Remove(&tabBtn); - mainWindow->Remove(&page3Btn); - w.Remove(&backBtn); - w.Remove(&lockBtn); - w.Remove(&updateBtn); - char entered[43] = ""; - strncpy(entered, CFG.titlestxt_path, sizeof(entered)); - int result = OnScreenKeyboard(entered,43,4); - mainWindow->Append(&optionBrowser2); - mainWindow->Append(&page1Btn); - mainWindow->Append(&page2Btn); - mainWindow->Append(&tabBtn); - mainWindow->Append(&page3Btn); - w.Append(&backBtn); - w.Append(&lockBtn); - w.Append(&updateBtn); - if ( result == 1 ) - { - int len = (strlen(entered)-1); - if(entered[len] !='/') - strncat (entered, "/", 1); - strncpy(CFG.titlestxt_path, entered, sizeof(CFG.titlestxt_path)); - WindowPrompt(LANGUAGE.TitlestxtpathChanged,0,LANGUAGE.ok,0,0,0); - if(isSdInserted()) { - cfg_save_global(); - CFG_Load(); - } else { - WindowPrompt(LANGUAGE.NoSDcardinserted, LANGUAGE.InsertaSDCardtosave, LANGUAGE.ok, 0,0,0); - } - } - } - else - { - WindowPrompt(LANGUAGE.Titlestxtpathchange,LANGUAGE.Consoleshouldbeunlockedtomodifyit,LANGUAGE.ok,0,0,0); - } - break; - case 1: // language file path - if ( CFG.godmode == 1) - { - mainWindow->Remove(&optionBrowser2); - mainWindow->Remove(&page1Btn); - mainWindow->Remove(&page2Btn); - mainWindow->Remove(&tabBtn); - mainWindow->Remove(&page3Btn); - w.Remove(&backBtn); - w.Remove(&lockBtn); - w.Remove(&updateBtn); - char entered[40] = ""; - strncpy(entered, CFG.language_path, sizeof(entered)); - int result = OnScreenKeyboard(entered, 40,0); - mainWindow->Append(&optionBrowser2); - mainWindow->Append(&tabBtn); - mainWindow->Append(&page1Btn); - mainWindow->Append(&page2Btn); - mainWindow->Append(&page3Btn); - w.Append(&backBtn); - w.Append(&lockBtn); - w.Append(&updateBtn); - if ( result == 1 ) - { strncpy(CFG.language_path, entered, sizeof(CFG.language_path)); - if(isSdInserted()) { - cfg_save_global(); - if(!checkfile(CFG.language_path)) { - WindowPrompt(LANGUAGE.Filenotfound,LANGUAGE.Loadingstandardlanguage,LANGUAGE.ok,0,0,0); - } - lang_default(); - CFG_Load(); - menu = MENU_SETTINGS; - pageToDisplay = 0; - } else { - WindowPrompt(LANGUAGE.NoSDcardinserted, LANGUAGE.InsertaSDCardtosave, LANGUAGE.ok, 0,0,0); - } - } - } - else - { - WindowPrompt(LANGUAGE.Langchange,LANGUAGE.Consoleshouldbeunlockedtomodifyit,LANGUAGE.ok,0,0,0); - } - break; - case 2: - Settings.keyset++; - break; - case 3: - Settings.unicodefix++; - break; - case 4: - if(isSdInserted()) - { - menu = MENU_OGG; - pageToDisplay = 0; - } - else - WindowPrompt(LANGUAGE.NoSDcardinserted, LANGUAGE.InsertaSDCardtousethatoption, LANGUAGE.ok, 0,0,0); - break; - case 5: - Settings.wiilight++; - break; - case 7: - Settings.patchcountrystrings++; - break; - case 6: - if ( CFG.godmode == 1) - { - mainWindow->Remove(&optionBrowser2); - mainWindow->Remove(&page1Btn); - mainWindow->Remove(&page2Btn); - mainWindow->Remove(&tabBtn); - mainWindow->Remove(&page3Btn); - w.Remove(&backBtn); - w.Remove(&lockBtn); - w.Remove(&updateBtn); - char entered[43] = ""; - strncpy(entered, CFG.update_path, sizeof(entered)); - int result = OnScreenKeyboard(entered,43,4); - mainWindow->Append(&optionBrowser2); - mainWindow->Append(&page1Btn); - mainWindow->Append(&page2Btn); - mainWindow->Append(&tabBtn); - mainWindow->Append(&page3Btn); - w.Append(&backBtn); - w.Append(&lockBtn); - w.Append(&updateBtn); - if ( result == 1 ) - { - int len = (strlen(entered)-1); - if(entered[len] !='/') - strncat (entered, "/", 1); - strncpy(CFG.update_path, entered, sizeof(CFG.update_path)); - WindowPrompt(LANGUAGE.Updatepathchanged,0,LANGUAGE.ok,0,0,0); - } - } - else - WindowPrompt(0,LANGUAGE.Consoleshouldbeunlockedtomodifyit,LANGUAGE.ok,0,0,0); - break; - case 8: - int choice = WindowPrompt(LANGUAGE.Areyousure, 0, LANGUAGE.Yes, LANGUAGE.Cancel, 0, 0); - if(choice == 1) - { - if(isSdInserted()) - remove("SD:/config/GXGlobal.cfg"); - lang_default(); - CFG_Load(); - DefaultSettings(); - menu = MENU_SETTINGS; - pageToDisplay = 0; - } - break; - } - } - - if(shutdown == 1) - Sys_Shutdown(); - if(reset == 1) - Sys_Reboot(); - - if(page1Btn.GetState() == STATE_CLICKED) - { - pageToDisplay = 1; - page1Btn.ResetState(); - tabBtn.SetImage(&tab1Img); - menu = MENU_NONE; - break; - } - - if(page2Btn.GetState() == STATE_CLICKED) - { - pageToDisplay = 2; - menu = MENU_NONE; - page2Btn.ResetState(); - tabBtn.SetImage(&tab2Img); - break; - } - - if(page3Btn.GetState() == STATE_CLICKED) - { - pageToDisplay = 3; - menu = MENU_NONE; - page3Btn.ResetState(); - tabBtn.SetImage(&tab3Img); - break; - } - - if(backBtn.GetState() == STATE_CLICKED) - { - //Add the procedure call to save the global configuration - if(isSdInserted()) { - cfg_save_global(); - } - menu = MENU_DISCLIST; - pageToDisplay = 0; - break; - } - - if(updateBtn.GetState() == STATE_CLICKED) { - if(isSdInserted() && CFG.godmode) { - mainWindow->Remove(&optionBrowser2); - mainWindow->Remove(&page1Btn); - mainWindow->Remove(&page2Btn); - mainWindow->Remove(&tabBtn); - mainWindow->Remove(&page3Btn); - w.Remove(btnLogo); - w.Remove(&backBtn); - w.Remove(&lockBtn); - w.Remove(&updateBtn); - int ret = ProgressUpdateWindow(); - if(ret < 0) { - WindowPrompt(LANGUAGE.Updatefailed,0,LANGUAGE.ok,0,0,0); - } - mainWindow->Append(&optionBrowser2); - mainWindow->Append(&page1Btn); - mainWindow->Append(&page2Btn); - mainWindow->Append(&tabBtn); - mainWindow->Append(&page3Btn); - w.Append(&backBtn); - w.Append(&lockBtn); - w.Append(&updateBtn); - w.Append(btnLogo); - } else { - WindowPrompt(LANGUAGE.NoSDcardinserted, LANGUAGE.InsertaSDCardtousethatoption, LANGUAGE.ok, 0,0,0); - } - updateBtn.ResetState(); - } - - if(lockBtn.GetState() == STATE_CLICKED) - { - if (!strcmp("", Settings.unlockCode)) - { - CFG.godmode = !CFG.godmode; - } - else if ( CFG.godmode == 0 ) - { - //password check to unlock Install,Delete and Format - mainWindow->Remove(&optionBrowser2); - mainWindow->Remove(&page1Btn); - mainWindow->Remove(&page2Btn); - mainWindow->Remove(&tabBtn); - mainWindow->Remove(&page3Btn); - w.Remove(&backBtn); - w.Remove(&lockBtn); - w.Remove(&updateBtn); - char entered[20] = ""; - int result = OnScreenKeyboard(entered, 20,0); - mainWindow->Append(&optionBrowser2); - mainWindow->Append(&tabBtn); - mainWindow->Append(&page1Btn); - mainWindow->Append(&page2Btn); - mainWindow->Append(&page3Btn); - w.Append(&backBtn); - w.Append(&lockBtn); - w.Append(&updateBtn); - mainWindow->Append(&tabBtn); - if ( result == 1 ) { - if (!strcmp(entered, Settings.unlockCode)) //if password correct - { - if (CFG.godmode == 0) { - WindowPrompt(LANGUAGE.CorrectPassword,LANGUAGE.InstallRenameandDeleteareunlocked,LANGUAGE.ok,0,0,0); - CFG.godmode = 1; - __Menu_GetEntries(); - menu = MENU_DISCLIST; - } - } - else - { - WindowPrompt(LANGUAGE.WrongPassword,LANGUAGE.USBLoaderisprotected,LANGUAGE.ok,0,0,0); - } - } - } - else - { - int choice = WindowPrompt (LANGUAGE.LockConsole,LANGUAGE.Areyousure,LANGUAGE.Yes,LANGUAGE.No,0,0); - if(choice == 1) { - WindowPrompt(LANGUAGE.ConsoleLocked,LANGUAGE.USBLoaderisprotected,LANGUAGE.ok,0,0,0); - CFG.godmode = 0; - __Menu_GetEntries(); - menu = MENU_DISCLIST; - } - } - if ( CFG.godmode == 1) - { - lockBtnTxt.SetText(LANGUAGE.Lock); - } - else - { - lockBtnTxt.SetText(LANGUAGE.Unlock); - } - lockBtn.ResetState(); - } - else if(homo.GetState() == STATE_CLICKED) - { - cfg_save_global(); - optionBrowser2.SetState(STATE_DISABLED); - s32 thetimeofbg = bgMusic->GetPlayTime(); - bgMusic->Stop(); - choice = WindowExitPrompt(LANGUAGE.ExitUSBISOLoader,0, LANGUAGE.BacktoLoader,LANGUAGE.WiiMenu,LANGUAGE.Back,0); - if(!strcmp("", CFG.oggload_path) || !strcmp("notset", CFG.ogg_path)) - { - bgMusic->Play(); - } - else - { - bgMusic->PlayOggFile(CFG.ogg_path); - } - bgMusic->SetPlayTime(thetimeofbg); - SetVolumeOgg(255*(vol/100.0)); - - if(choice == 3) - { - ExitApp(); - SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0); // Back to System Menu - } - else if (choice == 2) - { - ExitApp(); - if (*((u32*) 0x80001800)) exit(0); - // Channel Version - SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0); - } - else - { - homo.ResetState(); - } - } - if(CFG.godmode) { - updateBtn.SetVisible(true); - updateBtn.SetClickable(true); - } else { - updateBtn.SetVisible(false); - updateBtn.SetClickable(false); - } - if(settingsbackgroundbtn.GetState() == STATE_CLICKED) - { - optionBrowser2.SetFocus(1); - break; - } - } - } - HaltGui(); - delete btnLogo; - btnLogo = NULL; - mainWindow->Remove(&optionBrowser2); - mainWindow->Remove(&w); - ResumeGui(); - return menu; -} - - -/******************************************************************************** -*Game specific settings -*********************************************************************************/ -int GameSettings(struct discHdr * header) -{ - bool exit = false; - int ret; - int retVal = 0; - - char gameName[31]; - - if (strlen(get_title(header)) < (27 + 3)) { - sprintf(gameName, "%s", get_title(header)); - } - else { - strncpy(gameName, get_title(header), 27); - gameName[27] = '\0'; - strncat(gameName, "...", 3); - } - - customOptionList options3(7); - options3.SetName(0,"%s", LANGUAGE.VideoMode); - options3.SetName(1,"%s", LANGUAGE.VIDTVPatch); - options3.SetName(2,"%s", LANGUAGE.Language); - options3.SetName(3, "Ocarina"); - options3.SetName(4, "IOS"); - options3.SetName(5,"%s", LANGUAGE.addToFavorite); - options3.SetName(6,"%s", LANGUAGE.Defaultgamesettings); - - GuiSound btnSoundOver(button_over_pcm, button_over_pcm_size, SOUND_PCM, vol); - GuiSound btnClick(button_click2_pcm, button_click2_pcm_size, SOUND_PCM, vol); - - char imgPath[100]; - - snprintf(imgPath, sizeof(imgPath), "%sbutton_dialogue_box.png", CFG.theme_path); - GuiImageData btnOutline(imgPath, button_dialogue_box_png); - snprintf(imgPath, sizeof(imgPath), "%sgamesettings_background.png", CFG.theme_path); - GuiImageData settingsbg(imgPath, settings_background_png); - - GuiTrigger trigA; - trigA.SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A); - GuiTrigger trigHome; - trigHome.SetButtonOnlyTrigger(-1, WPAD_BUTTON_HOME | WPAD_CLASSIC_BUTTON_HOME, 0); - GuiTrigger trigB; - trigB.SetButtonOnlyTrigger(-1, WPAD_BUTTON_B | WPAD_CLASSIC_BUTTON_B, PAD_BUTTON_B); - - GuiText titleTxt(get_title(header), 28, (GXColor){0, 0, 0, 255}); - titleTxt.SetAlignment(ALIGN_CENTRE, ALIGN_TOP); - titleTxt.SetPosition(12,40); - titleTxt.SetMaxWidth(356, GuiText::SCROLL); - - GuiImage settingsbackground(&settingsbg); - GuiButton settingsbackgroundbtn(settingsbackground.GetWidth(), settingsbackground.GetHeight()); - settingsbackgroundbtn.SetAlignment(ALIGN_LEFT, ALIGN_TOP); - settingsbackgroundbtn.SetPosition(0, 0); - settingsbackgroundbtn.SetImage(&settingsbackground); - - GuiText saveBtnTxt(LANGUAGE.Save, 22, (GXColor){THEME.prompttxt_r, THEME.prompttxt_g, THEME.prompttxt_b, 255}); //{0, 0, 0, 255}); - saveBtnTxt.SetMaxWidth(btnOutline.GetWidth()-30); - GuiImage saveBtnImg(&btnOutline); - if (Settings.wsprompt == yes){ - saveBtnTxt.SetWidescreen(CFG.widescreen); - saveBtnImg.SetWidescreen(CFG.widescreen);} - GuiButton saveBtn(&saveBtnImg,&saveBtnImg, 2, 3, -180, 400, &trigA, &btnSoundOver, &btnClick,1); - saveBtn.SetScale(0.9); - saveBtn.SetLabel(&saveBtnTxt); - - GuiText cancelBtnTxt(LANGUAGE.Back, 22, (GXColor){THEME.prompttxt_r, THEME.prompttxt_g, THEME.prompttxt_b, 255}); //{0, 0, 0, 255}); - cancelBtnTxt.SetMaxWidth(btnOutline.GetWidth()-30); - GuiImage cancelBtnImg(&btnOutline); - if (Settings.wsprompt == yes){ - cancelBtnTxt.SetWidescreen(CFG.widescreen); - cancelBtnImg.SetWidescreen(CFG.widescreen);} - GuiButton cancelBtn(&cancelBtnImg,&cancelBtnImg, 2, 3, 180, 400, &trigA, &btnSoundOver, &btnClick,1); - cancelBtn.SetScale(0.9); - cancelBtn.SetLabel(&cancelBtnTxt); - cancelBtn.SetTrigger(&trigB); - - GuiText deleteBtnTxt(LANGUAGE.Uninstall, 22, (GXColor){THEME.prompttxt_r, THEME.prompttxt_g, THEME.prompttxt_b, 255}); //{0, 0, 0, 255}); - deleteBtnTxt.SetMaxWidth(btnOutline.GetWidth()-30); - GuiImage deleteBtnImg(&btnOutline); - if (Settings.wsprompt == yes){ - deleteBtnTxt.SetWidescreen(CFG.widescreen); - deleteBtnImg.SetWidescreen(CFG.widescreen);} - GuiButton deleteBtn(&deleteBtnImg,&deleteBtnImg, 2, 3, 0, 400, &trigA, &btnSoundOver, &btnClick,1); - deleteBtn.SetScale(0.9); - deleteBtn.SetLabel(&deleteBtnTxt); - - GuiCustomOptionBrowser optionBrowser3(396, 280, &options3, CFG.theme_path, "bg_options_gamesettings.png", bg_options_settings_png, 0, 200); - optionBrowser3.SetPosition(0, 90); - optionBrowser3.SetAlignment(ALIGN_CENTRE, ALIGN_TOP); - - HaltGui(); - GuiWindow w(screenwidth, screenheight); - w.Append(&settingsbackgroundbtn); - w.Append(&titleTxt); - w.Append(&deleteBtn); - w.Append(&saveBtn); - w.Append(&cancelBtn); - - mainWindow->Append(&w); - mainWindow->Append(&optionBrowser3); - - ResumeGui(); - - struct Game_CFG* game_cfg = CFG_get_game_opt(header->id); - - if (game_cfg)//if there are saved settings for this game use them - { - videoChoice = game_cfg->video; - languageChoice = game_cfg->language; - ocarinaChoice = game_cfg->ocarina; - viChoice = game_cfg->vipatch; - iosChoice = game_cfg->ios; - parentalcontrolChoice = game_cfg->parentalcontrol; - } - else// otherwise use the global settings - { - videoChoice = Settings.video; - languageChoice = Settings.language; - ocarinaChoice = Settings.ocarina; - viChoice = Settings.vpatch; - if(Settings.cios == ios222) { - iosChoice = i222; - } else { - iosChoice = i249; - } - parentalcontrolChoice = 0; - } - - while(!exit) - { - - VIDEO_WaitVSync (); - - if (videoChoice == discdefault) options3.SetValue(0,"%s",LANGUAGE.DiscDefault); - else if (videoChoice == systemdefault) options3.SetValue(0,"%s",LANGUAGE.SystemDefault); - else if (videoChoice == patch) options3.SetValue(0,"%s",LANGUAGE.AutoPatch); - else if (videoChoice == pal50) options3.SetValue(0,"%s PAL50",LANGUAGE.Force); - else if (videoChoice == pal60) options3.SetValue(0,"%s PAL60",LANGUAGE.Force); - else if (videoChoice == ntsc) options3.SetValue(0,"%s NTSC",LANGUAGE.Force); - - if (viChoice == on) options3.SetValue(1,"%s",LANGUAGE.ON); - else if (viChoice == off) options3.SetValue(1,"%s",LANGUAGE.OFF); - - if (languageChoice == ConsoleLangDefault) options3.SetValue(2,"%s",LANGUAGE.ConsoleDefault); - else if (languageChoice == jap) options3.SetValue(2,"%s",LANGUAGE.Japanese); - else if (languageChoice == ger) options3.SetValue(2,"%s",LANGUAGE.German); - else if (languageChoice == eng) options3.SetValue(2,"%s",LANGUAGE.English); - else if (languageChoice == fren) options3.SetValue(2,"%s",LANGUAGE.French); - else if (languageChoice == esp) options3.SetValue(2,"%s",LANGUAGE.Spanish); - else if (languageChoice == it) options3.SetValue(2,"%s",LANGUAGE.Italian); - else if (languageChoice == dut) options3.SetValue(2,"%s",LANGUAGE.Dutch); - else if (languageChoice == schin) options3.SetValue(2,"%s",LANGUAGE.SChinese); - else if (languageChoice == tchin) options3.SetValue(2,"%s",LANGUAGE.TChinese); - else if (languageChoice == kor) options3.SetValue(2,"%s",LANGUAGE.Korean); - - if (ocarinaChoice == on) options3.SetValue(3,"%s",LANGUAGE.ON); - else if (ocarinaChoice == off) options3.SetValue(3,"%s",LANGUAGE.OFF); - - if (iosChoice == i249) options3.SetValue(4,"249"); - else if (iosChoice == i222) options3.SetValue(4,"222"); - - if (parentalcontrolChoice == 0) options3.SetValue(5,"0 (Always)"); - else if (parentalcontrolChoice == 1) options3.SetValue(5,"1"); - else if (parentalcontrolChoice == 2) options3.SetValue(5,"2"); - else if (parentalcontrolChoice == 3) options3.SetValue(5,"3 (Mature)"); - - - if(shutdown == 1) - Sys_Shutdown(); - if(reset == 1) - Sys_Reboot(); - - options3.SetValue(6," "); - - ret = optionBrowser3.GetClickedOption(); - - switch (ret) - { - case 0: - videoChoice = (videoChoice + 1) % CFG_VIDEO_COUNT; - break; - case 1: - viChoice = (viChoice + 1) % 2; - break; - case 2: - languageChoice = (languageChoice + 1) % CFG_LANG_COUNT; - break; - case 3: - ocarinaChoice = (ocarinaChoice + 1) % 2; - break; - case 4: - iosChoice = (iosChoice + 1) % 2; - break; - case 5: - parentalcontrolChoice = (parentalcontrolChoice + 1) % 4; - break; - case 6: - int choice = WindowPrompt(LANGUAGE.Areyousure,0,LANGUAGE.Yes,LANGUAGE.Cancel,0,0); - if(choice == 1) { - videoChoice = discdefault; - viChoice = off; - languageChoice = ConsoleLangDefault; - ocarinaChoice = off; - if(Settings.cios == ios222) { - iosChoice = i222; - } else { - iosChoice = i249; - } - parentalcontrolChoice = 0; - CFG_forget_game_opt(header->id); - } - break; - } - - if(saveBtn.GetState() == STATE_CLICKED) - { - - if(isSdInserted()) { - if (CFG_save_game_opt(header->id)) - { - WindowPrompt(LANGUAGE.SuccessfullySaved, 0, LANGUAGE.ok, 0,0,0); - } - else - { - WindowPrompt(LANGUAGE.SaveFailed, 0, LANGUAGE.ok, 0,0,0); - } - } else { - WindowPrompt(LANGUAGE.NoSDcardinserted, LANGUAGE.InsertaSDCardtosave, LANGUAGE.ok, 0,0,0); - } - - saveBtn.ResetState(); - optionBrowser3.SetFocus(1); - } - - if (cancelBtn.GetState() == STATE_CLICKED) - { - exit = true; - break; - } - - if (deleteBtn.GetState() == STATE_CLICKED) - { - int choice = WindowPrompt( - LANGUAGE.Doyoureallywanttodelete, - gameName, - LANGUAGE.Yes,LANGUAGE.Cancel,0,0); - - if (choice == 1) - { - ret = WBFS_RemoveGame(header->id); - if (ret < 0) - { - WindowPrompt( - LANGUAGE.Cantdelete, - gameName, - LANGUAGE.ok,0,0,0); - } - else { - __Menu_GetEntries(); - WindowPrompt( - LANGUAGE.Successfullydeleted, - gameName, - LANGUAGE.ok,0,0,0); - retVal = 1; - } - break; - } - else if (choice == 0) - { - deleteBtn.ResetState(); - optionBrowser3.SetFocus(1); - } - - } - } - - HaltGui(); - mainWindow->Remove(&optionBrowser3); - mainWindow->Remove(&w); - ResumeGui(); - return retVal; -} - - - -/**************************************************************************** - * MenuCheck - ***************************************************************************/ -static int MenuCheck() -{ - int menu = MENU_NONE; - int i = 0; - int choice; - s32 ret2; - OptionList options; - options.length = i; - partitionEntry partitions[MAX_PARTITIONS]; - - VIDEO_WaitVSync (); - - ret2 = WBFS_Init(WBFS_DEVICE_USB); - if (ret2 < 0) - { - //initialize WiiMote for Prompt - Wpad_Init(); - WPAD_SetDataFormat(WPAD_CHAN_ALL,WPAD_FMT_BTNS_ACC_IR); - WPAD_SetVRes(WPAD_CHAN_ALL, screenwidth, screenheight); - ret2 = WindowPrompt(LANGUAGE.NoUSBDevicefound, - LANGUAGE.Doyouwanttoretryfor30secs, - "cIOS249", "cIOS222", - LANGUAGE.BacktoWiiMenu, 0); - //shutdown SD - SDCard_deInit(); - if(ret2 == 1) { - Settings.cios = ios249; - } else if(ret2 == 2) { - Settings.cios = ios222; - } else { - ExitApp(); - SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0); - } - //shutdown WiiMote before IOS Reload - WPAD_Flush(0); - WPAD_Disconnect(0); - WPAD_Shutdown(); - - SDCard_Init(); - ret2 = DiscWait(LANGUAGE.NoUSBDevice, LANGUAGE.WaitingforUSBDevice, 0, 0, 1); - PAD_Init(); - Wpad_Init(); - WPAD_SetDataFormat(WPAD_CHAN_ALL,WPAD_FMT_BTNS_ACC_IR); - WPAD_SetVRes(WPAD_CHAN_ALL, screenwidth, screenheight); - SDCard_Init(); - } - if (ret2 < 0) { - SDCard_Init(); - WindowPrompt (LANGUAGE.Error,LANGUAGE.USBDevicenotfound, LANGUAGE.ok, 0,0,0); - SDCard_deInit(); - ExitApp(); - SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0); - } else { - PAD_Init(); - Wpad_Init(); - WPAD_SetDataFormat(WPAD_CHAN_ALL,WPAD_FMT_BTNS_ACC_IR); - WPAD_SetVRes(WPAD_CHAN_ALL, screenwidth, screenheight); - SDCard_Init(); - } - - ret2 = Disc_Init(); - if (ret2 < 0) { - SDCard_Init(); - WindowPrompt (LANGUAGE.Error,LANGUAGE.CouldnotinitializeDIPmodule,LANGUAGE.ok, 0,0,0); - SDCard_deInit(); - ExitApp(); - SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0); - } - - ret2 = WBFS_Open(); - if (ret2 < 0) { - SDCard_Init(); - choice = WindowPrompt(LANGUAGE.NoWBFSpartitionfound, - LANGUAGE.Youneedtoformatapartition, - LANGUAGE.Format, - LANGUAGE.Return,0,0); - SDCard_deInit(); - if(choice == 0) - { - ExitApp(); - SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0); - - } else { - /* Get partition entries */ - u32 sector_size; - ret2 = Partition_GetEntries(partitions, §or_size); - if (ret2 < 0) { - SDCard_Init(); - WindowPrompt (LANGUAGE.Nopartitionsfound,0, LANGUAGE.Restart, 0,0,0); - SDCard_deInit(); - ExitApp(); - SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0); - - } - menu = MENU_FORMAT; - - } - } - - if(shutdown == 1) - Sys_Shutdown(); - if(reset == 1) - Sys_Reboot(); - //Spieleliste laden - __Menu_GetEntries(); - - if(menu == MENU_NONE) - menu = MENU_DISCLIST; - - return menu; -} -/**************************************************************************** - * MenuOGG - ***************************************************************************/ -int MenuOGG() -{ - int menu = MENU_NONE, cnt = 0; - int ret = 0, choice = 0; - int scrollon, nothingchanged = 0; - - GuiSound btnSoundOver(button_over_pcm, button_over_pcm_size, SOUND_PCM, vol); - GuiSound btnClick(button_click2_pcm, button_click2_pcm_size, SOUND_PCM, vol); - - char imgPath[100]; - - snprintf(imgPath, sizeof(imgPath), "%sbutton_dialogue_box.png", CFG.theme_path); - GuiImageData btnOutline(imgPath, button_dialogue_box_png); - snprintf(imgPath, sizeof(imgPath), "%ssettings_background.png", CFG.theme_path); - GuiImageData settingsbg(imgPath, settings_background_png); - - GuiTrigger trigA; - trigA.SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A); - GuiTrigger trigB; - trigB.SetButtonOnlyTrigger(-1, WPAD_BUTTON_B | WPAD_CLASSIC_BUTTON_B, PAD_BUTTON_B); - GuiTrigger trigMinus; - trigMinus.SetButtonOnlyTrigger(-1, WPAD_BUTTON_MINUS | WPAD_CLASSIC_BUTTON_MINUS, 0); - GuiTrigger trigPlus; - trigPlus.SetButtonOnlyTrigger(-1, WPAD_BUTTON_PLUS | WPAD_CLASSIC_BUTTON_PLUS, 0); - - char fullpath[150]; - char shortpath[35]; - int countoggs = GetFiles(CFG.oggload_path); - - if(!strcmp("", CFG.oggload_path)) { - sprintf(shortpath, "%s", LANGUAGE.Standard); - } else if (strlen(CFG.oggload_path) < (27 + 3)) { - sprintf(shortpath, "%s", CFG.oggload_path); - } - else { - strncpy(shortpath, CFG.oggload_path, 27); - shortpath[27] = '\0'; - strncat(shortpath, "...", 3); - } - - GuiText titleTxt(shortpath, 24, (GXColor){0, 0, 0, 255}); - titleTxt.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE); - titleTxt.SetPosition(0,0); - GuiButton pathBtn(300, 50); - pathBtn.SetAlignment(ALIGN_CENTRE, ALIGN_TOP); - pathBtn.SetPosition(0,28); - pathBtn.SetLabel(&titleTxt); - pathBtn.SetSoundOver(&btnSoundOver); - pathBtn.SetSoundClick(&btnClick); - pathBtn.SetTrigger(&trigA); - pathBtn.SetEffectGrow(); - - GuiImage oggmenubackground(&settingsbg); - oggmenubackground.SetAlignment(ALIGN_LEFT, ALIGN_TOP); - oggmenubackground.SetPosition(0, 0); - - GuiText backBtnTxt(LANGUAGE.Back , 22, (GXColor){THEME.prompttxt_r, THEME.prompttxt_g, THEME.prompttxt_b, 255}); - backBtnTxt.SetMaxWidth(btnOutline.GetWidth()-30); - GuiImage backBtnImg(&btnOutline); - if (Settings.wsprompt == yes){ - backBtnTxt.SetWidescreen(CFG.widescreen); - backBtnImg.SetWidescreen(CFG.widescreen); - } - GuiButton backBtn(btnOutline.GetWidth(), btnOutline.GetHeight()); - backBtn.SetAlignment(ALIGN_CENTRE, ALIGN_TOP); - backBtn.SetPosition(-180, 400); - backBtn.SetLabel(&backBtnTxt); - backBtn.SetImage(&backBtnImg); - backBtn.SetSoundOver(&btnSoundOver); - backBtn.SetSoundClick(&btnClick); - backBtn.SetTrigger(&trigA); - backBtn.SetTrigger(&trigB); - backBtn.SetEffectGrow(); - - customOptionList options2(countoggs); - - for (cnt = 0; cnt < countoggs; cnt++) { - char tmp[30]; - snprintf(tmp , 30, "%s", alldirfiles[cnt]); - options2.SetValue(cnt, "%s", tmp); - options2.SetName(cnt,"%i.", cnt+1); - } - // options2.length = cnt; - - if(cnt < 9) { - scrollon = 0; - } else { - scrollon = 1; - } - - GuiCustomOptionBrowser optionBrowser4(396, 280, &options2, CFG.theme_path, "bg_options_settings.png", bg_options_settings_png, scrollon, 55); - optionBrowser4.SetPosition(0, 90); - optionBrowser4.SetAlignment(ALIGN_CENTRE, ALIGN_TOP); - - int songPlaying=0; - - snprintf(imgPath, sizeof(imgPath), "%sarrow_next.png", CFG.theme_path); - GuiImageData next(imgPath, arrow_next_png); - snprintf(imgPath, sizeof(imgPath), "%sarrow_previous.png", CFG.theme_path); - GuiImageData prev(imgPath, arrow_previous_png); - snprintf(imgPath, sizeof(imgPath), "%smp3_stop.png", CFG.theme_path); - GuiImageData stop(imgPath, mp3_stop_png); - snprintf(imgPath, sizeof(imgPath), "%smp3_pause.png", CFG.theme_path); - GuiImageData pause(imgPath, mp3_pause_png); - snprintf(imgPath, sizeof(imgPath), "%sstartgame_arrow_right.png", CFG.theme_path); - GuiImageData play(imgPath, startgame_arrow_right_png); - - GuiImage nextBtnImg(&next); - GuiButton nextBtn(next.GetWidth(), next.GetHeight()); - nextBtn.SetAlignment(ALIGN_CENTRE, ALIGN_TOP); - nextBtn.SetPosition(130, 400); - nextBtn.SetImage(&nextBtnImg); - nextBtn.SetSoundOver(&btnSoundOver); - nextBtn.SetSoundClick(&btnClick); - nextBtn.SetTrigger(&trigA); - nextBtn.SetEffectGrow(); - - GuiImage prevBtnImg(&prev); - prevBtnImg.SetWidescreen(CFG.widescreen); - GuiButton prevBtn(prev.GetWidth(), prev.GetHeight()); - prevBtn.SetAlignment(ALIGN_CENTRE, ALIGN_TOP); - prevBtn.SetPosition(-60, 400); - prevBtn.SetImage(&prevBtnImg); - prevBtn.SetSoundOver(&btnSoundOver); - prevBtn.SetSoundClick(&btnClick); - prevBtn.SetTrigger(&trigA); - prevBtn.SetEffectGrow(); - - GuiImage playBtnImg(&play); - playBtnImg.SetWidescreen(CFG.widescreen); - GuiButton playBtn(play.GetWidth(), play.GetHeight()); - playBtn.SetAlignment(ALIGN_CENTRE, ALIGN_TOP); - playBtn.SetPosition(72, 400); - playBtn.SetImage(&playBtnImg); - playBtn.SetSoundOver(&btnSoundOver); - playBtn.SetSoundClick(&btnClick); - playBtn.SetTrigger(&trigA); - playBtn.SetTrigger(&trigPlus); - playBtn.SetEffectGrow(); - - GuiImage stopBtnImg(&stop); - stopBtnImg.SetWidescreen(CFG.widescreen); - GuiButton stopBtn(stop.GetWidth(), stop.GetHeight()); - stopBtn.SetAlignment(ALIGN_CENTRE, ALIGN_TOP); - stopBtn.SetPosition(17, 400); - stopBtn.SetImage(&stopBtnImg); - stopBtn.SetSoundOver(&btnSoundOver); - stopBtn.SetSoundClick(&btnClick); - stopBtn.SetTrigger(&trigA); - stopBtn.SetTrigger(&trigMinus); - stopBtn.SetEffectGrow(); - - HaltGui(); - GuiWindow w(screenwidth, screenheight); - w.Append(&oggmenubackground); - w.Append(&pathBtn); - w.Append(&backBtn); - w.Append(&playBtn); - w.Append(&nextBtn); - w.Append(&prevBtn); - w.Append(&stopBtn); - mainWindow->Append(&w); - mainWindow->Append(&optionBrowser4); - - ResumeGui(); - - while(menu == MENU_NONE) - { - - if (backBtn.GetState() == STATE_CLICKED) { - if(nothingchanged == 1 && countoggs > 0) { - if(!strcmp("", CFG.oggload_path) || !strcmp("notset", CFG.ogg_path)) { - bgMusic->Play(); - } else { - bgMusic->PlayOggFile(CFG.ogg_path); - } - } - menu = MENU_SETTINGS; - break; - } - - if (pathBtn.GetState() == STATE_CLICKED) { - mainWindow->Remove(&optionBrowser4); - w.Remove(&backBtn); - w.Remove(&pathBtn); - w.Remove(&playBtn); - w.Remove(&nextBtn); - w.Remove(&prevBtn); - w.Remove(&stopBtn); - char entered[43] = ""; - strncpy(entered, CFG.oggload_path, sizeof(entered)); - int result = OnScreenKeyboard(entered,43,0); - mainWindow->Append(&optionBrowser4); - w.Append(&pathBtn); - w.Append(&backBtn); - w.Append(&playBtn); - w.Append(&nextBtn); - w.Append(&prevBtn); - w.Append(&stopBtn); - if ( result == 1 ) { - int len = (strlen(entered)-1); - if(entered[len] !='/') - strncat (entered, "/", 1); - strncpy(CFG.oggload_path, entered, sizeof(CFG.oggload_path)); - WindowPrompt(LANGUAGE.Backgroundmusicpath,0,LANGUAGE.ok,0,0,0); - if(isSdInserted()) { - if(!strcmp("", CFG.oggload_path)) { - sprintf(CFG.ogg_path, "notset"); - bgMusic->Play(); - } - cfg_save_global(); - menu = MENU_OGG; - break; - } else { - WindowPrompt(LANGUAGE.NoSDcardinserted, LANGUAGE.InsertaSDCardtosave, LANGUAGE.ok, 0,0,0); - } - } - if(countoggs > 0) { - optionBrowser4.SetFocus(1); - } - pathBtn.ResetState(); - } - - ret = optionBrowser4.GetClickedOption(); - - if(ret>=0) { - choice = WindowPrompt(LANGUAGE.Setasbackgroundmusic,alldirfiles[ret],LANGUAGE.Yes,LANGUAGE.No,0,0); - if(choice == 1) { - snprintf(fullpath,150,"%s%s",CFG.oggload_path,alldirfiles[ret]); - choice = bgMusic->PlayOggFile(fullpath); - if(choice < 0) { - WindowPrompt(LANGUAGE.Notasupportedformat, LANGUAGE.Loadingstandardmusic, LANGUAGE.ok, 0,0,0); - sprintf(CFG.ogg_path, "notset"); - bgMusic->Play(); - SetVolumeOgg(255*(vol/100.0)); - } else { - snprintf(CFG.ogg_path, sizeof(CFG.ogg_path), "%s", fullpath); - cfg_save_global(); - SetVolumeOgg(255*(vol/100.0)); - nothingchanged = 0; - } - } - optionBrowser4.SetFocus(1); - } - - if (playBtn.GetState() == STATE_CLICKED && countoggs > 0) { - if(countoggs > 0) { - ret = optionBrowser4.GetSelectedOption(); - songPlaying=ret; - snprintf(fullpath, 150,"%s%s", CFG.oggload_path,alldirfiles[ret]); - choice = bgMusic->PlayOggFile(fullpath); - if(choice < 0) { - WindowPrompt(LANGUAGE.Notasupportedformat, LANGUAGE.Loadingstandardmusic, LANGUAGE.ok, 0,0,0); - if(!strcmp("", CFG.oggload_path) || !strcmp("notset", CFG.ogg_path)) { - bgMusic->Play(); - } else { - bgMusic->PlayOggFile(CFG.ogg_path); - } - } - SetVolumeOgg(255*(vol/100.0)); - songPlaying=ret; - nothingchanged = 1; - optionBrowser4.SetFocus(1); - } - playBtn.ResetState(); - } - - if(nextBtn.GetState() == STATE_CLICKED){ - if(countoggs > 0) { - songPlaying++; - if (songPlaying>(countoggs - 1)){songPlaying=0;} - snprintf(fullpath,150,"%s%s", CFG.oggload_path,alldirfiles[songPlaying]); - choice = bgMusic->PlayOggFile(fullpath); - if(choice < 0) { - WindowPrompt(LANGUAGE.Notasupportedformat, LANGUAGE.Loadingstandardmusic, LANGUAGE.ok, 0,0,0); - if(!strcmp("", CFG.oggload_path) || !strcmp("notset", CFG.ogg_path)) { - bgMusic->Play(); - } else { - bgMusic->PlayOggFile(CFG.ogg_path); - } - } - nothingchanged = 1; - optionBrowser4.SetFocus(1); - } - SetVolumeOgg(255*(vol/100.0)); - nextBtn.ResetState(); - } - if(prevBtn.GetState() == STATE_CLICKED) { - if(countoggs > 0) { - songPlaying--; - if (songPlaying<0){songPlaying=(countoggs - 1);} - snprintf(fullpath,150,"%s%s", CFG.oggload_path,alldirfiles[songPlaying]); - choice = bgMusic->PlayOggFile(fullpath); - if(choice < 0) { - WindowPrompt(LANGUAGE.Notasupportedformat, LANGUAGE.Loadingstandardmusic, LANGUAGE.ok, 0,0,0); - if(!strcmp("", CFG.oggload_path) || !strcmp("notset", CFG.ogg_path)) { - bgMusic->Play(); - } else { - bgMusic->PlayOggFile(CFG.ogg_path); - } - } - nothingchanged = 1; - optionBrowser4.SetFocus(1); - } - SetVolumeOgg(255*(vol/100.0)); - prevBtn.ResetState(); - } - if(stopBtn.GetState() == STATE_CLICKED) { - if(countoggs > 0) { - StopOgg(); - nothingchanged = 1; - optionBrowser4.SetFocus(1); - } - stopBtn.ResetState(); - } - } - - HaltGui(); - mainWindow->Remove(&optionBrowser4); - mainWindow->Remove(&w); - ResumeGui(); - - return menu; -} - -/**************************************************************************** - * MainMenu - ***************************************************************************/ -int MainMenu(int menu) -{ - - int currentMenu = menu; - char imgPath[100]; - - #ifdef HW_RVL - snprintf(imgPath, sizeof(imgPath), "%splayer1_point.png", CFG.theme_path); - pointer[0] = new GuiImageData(imgPath, player1_point_png); - snprintf(imgPath, sizeof(imgPath), "%splayer2_point.png", CFG.theme_path); - pointer[1] = new GuiImageData(imgPath, player2_point_png); - snprintf(imgPath, sizeof(imgPath), "%splayer3_point.png", CFG.theme_path); - pointer[2] = new GuiImageData(imgPath, player3_point_png); - snprintf(imgPath, sizeof(imgPath), "%splayer4_point.png", CFG.theme_path); - pointer[3] = new GuiImageData(imgPath, player4_point_png); - #endif - - mainWindow = new GuiWindow(screenwidth, screenheight); - - if (CFG.widescreen) - snprintf(imgPath, sizeof(imgPath), "%swbackground.png", CFG.theme_path); - else - snprintf(imgPath, sizeof(imgPath), "%sbackground.png", CFG.theme_path); - - background = new GuiImageData(imgPath, CFG.widescreen? wbackground_png : background_png); - - bgImg = new GuiImage(background); - mainWindow->Append(bgImg); - - GuiTrigger trigA; - trigA.SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A); - - ResumeGui(); - - bgMusic = new GuiSound(bg_music_ogg, bg_music_ogg_size, SOUND_OGG, vol); - bgMusic->SetVolume(vol); - bgMusic->SetLoop(1); //loop music - // startup music - if(!strcmp("", CFG.oggload_path) || !strcmp("notset", CFG.ogg_path)) { - bgMusic->Play(); - } else { - bgMusic->PlayOggFile(CFG.ogg_path); - } - - while(currentMenu != MENU_EXIT) - { - SetVolumeOgg(255*(vol/100.0)); - - switch (currentMenu) - { - case MENU_CHECK: - currentMenu = MenuCheck(); - break; - case MENU_FORMAT: - currentMenu = MenuFormat(); - break; - case MENU_INSTALL: - currentMenu = MenuInstall(); - break; - case MENU_SETTINGS: - currentMenu = MenuSettings(); - break; - case MENU_DISCLIST: - currentMenu = MenuDiscList(); - break; - case MENU_OGG: - currentMenu = MenuOGG(); - break; - default: // unrecognized menu - currentMenu = MenuCheck(); - break; - } - - switch (Settings.volume) - { - case v10: - vol = 10; - break; - case v20: - vol = 20; - break; - case v30: - vol = 30; - break; - case v40: - vol = 40; - break; - case v50: - vol = 50; - break; - case v60: - vol = 60; - break; - case v70: - vol = 70; - break; - case v80: - vol = 80; - break; - case v90: - vol = 90; - break; - case v100: - vol = 100; - break; - case v0: - vol = 0; - break; - default: - vol = 80; - break; - } - } - - - bgMusic->Stop(); - delete bgMusic; - delete background; - delete bgImg; - delete mainWindow; - delete pointer[0]; - delete pointer[1]; - delete pointer[2]; - delete pointer[3]; - - delete cover; - delete coverImg; - - mainWindow = NULL; - - ExitApp(); - - struct discHdr *header = &gameList[gameSelected]; - struct Game_CFG* game_cfg = CFG_get_game_opt(header->id); - - if (game_cfg) { - - videoChoice = game_cfg->video; - languageChoice = game_cfg->language; - ocarinaChoice = game_cfg->ocarina; - viChoice = game_cfg->vipatch; - - } else { - - videoChoice = Settings.video; - languageChoice = Settings.language; - ocarinaChoice = Settings.ocarina; - viChoice = Settings.vpatch; - } - - - switch(languageChoice) - { - case ConsoleLangDefault: - configbytes[0] = 0xCD; - break; - - case jap: - configbytes[0] = 0x00; - break; - - case eng: - configbytes[0] = 0x01; - break; - - case ger: - configbytes[0] = 0x02; - break; - - case fren: - configbytes[0] = 0x03; - break; - - case esp: - configbytes[0] = 0x04; - break; - - case it: - configbytes[0] = 0x05; - break; - - case dut: - configbytes[0] = 0x06; - break; - - case schin: - configbytes[0] = 0x07; - break; - - case tchin: - configbytes[0] = 0x08; - break; - - case kor: - configbytes[0] = 0x09; - break; - //wenn nicht genau klar ist welches - default: - configbytes[0] = 0xCD; - break; - } - - u8 videoselected = 0; - - switch(videoChoice) - { - case discdefault: - videoselected = 0; - break; - - case pal50: - videoselected = 1; - break; - - case pal60: - videoselected = 2; - break; - - case ntsc: - videoselected = 3; - break; - - case systemdefault: - - videoselected = 4; - break; - - case patch: - - videoselected = 5; - break; - - default: - videoselected = 0; - break; - } - - u32 cheat = 0; - switch(ocarinaChoice) - { - case on: - cheat = 1; - break; - - case off: - cheat = 0; - break; - - default: - cheat = 1; - break; - } - - u8 vipatch = 0; - switch(viChoice) - { - case on: - vipatch = 1; - break; - - case off: - vipatch = 0; - break; - - default: - vipatch = 0; - break; - } - - int ret = 0; - ret = Disc_WiiBoot(videoselected, cheat, vipatch, Settings.patchcountrystrings); - if (ret < 0) { - ExitApp(); - SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0); - } - - return 0; -} diff --git a/source/menu.h b/source/menu.h deleted file mode 100644 index 47b1a0f2..00000000 --- a/source/menu.h +++ /dev/null @@ -1,31 +0,0 @@ -/**************************************************************************** - * libwiigui Template - * Tantric 2009 - * - * menu.h - * Menu flow routines - handles all menu logic - ***************************************************************************/ - -#ifndef _MENU_H_ -#define _MENU_H_ - -#include - -void InitGUIThreads(); -int MainMenu (int menuitem); -void wiilight(int enable); -int GameSettings(struct discHdr *); -enum -{ - MENU_EXIT = -1, - MENU_NONE, - MENU_SETTINGS, - MENU_DISCLIST, - MENU_FORMAT, - MENU_INSTALL, - MENU_CHECK, - MENU_GAME_SETTINGS, - MENU_OGG -}; - -#endif diff --git a/source/oggplayer.c b/source/oggplayer.c deleted file mode 100644 index b709857b..00000000 --- a/source/oggplayer.c +++ /dev/null @@ -1,391 +0,0 @@ -/* - Copyright (c) 2008 Francisco Muoz 'Hermes' - All rights reserved. - - Redistribution and use in source and binary forms, with or without modification, are - permitted provided that the following conditions are met: - - - Redistributions of source code must retain the above copyright notice, this list of - conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, this list - of conditions and the following disclaimer in the documentation and/or other - materials provided with the distribution. - - The names of the contributors may not be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY - EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL - THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF - THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include "oggplayer.h" -#include -#include -#include - -/* OGG control */ - -#define READ_SAMPLES 4096 // samples that it must read before to send -#define MAX_PCMOUT 4096 // minimum size to read ogg samples -typedef struct -{ - OggVorbis_File vf; - vorbis_info *vi; - int current_section; - - // OGG file operation - int fd; - int mode; - int eof; - int flag; - int volume; - int seek_time; - - /* OGG buffer control */ - short pcmout[2][READ_SAMPLES + MAX_PCMOUT * 2]; /* take 4k out of the data segment, not the stack */ - int pcmout_pos; - int pcm_indx; - -} private_data_ogg; - -static private_data_ogg private_ogg; - -// OGG thread control - -#define STACKSIZE 8192 - -static u8 oggplayer_stack[STACKSIZE]; -static lwpq_t oggplayer_queue; -static lwp_t h_oggplayer; -static int ogg_thread_running = 0; - -static void ogg_add_callback(int voice) -{ - if (ogg_thread_running <= 0) - { - SND_StopVoice(0); - return; - } - - if (private_ogg.flag & 128) - return; // Ogg is paused - - if (private_ogg.pcm_indx >= READ_SAMPLES) - { - if (SND_AddVoice(0, - (void *) private_ogg.pcmout[private_ogg.pcmout_pos], - private_ogg.pcm_indx << 1) == 0) - { - private_ogg.pcmout_pos ^= 1; - private_ogg.pcm_indx = 0; - private_ogg.flag = 0; - LWP_ThreadSignal(oggplayer_queue); - } - } - else - { - if (private_ogg.flag & 64) - { - private_ogg.flag &= ~64; - LWP_ThreadSignal(oggplayer_queue); - } - } -} - -static void * ogg_player_thread(private_data_ogg * priv) -{ - int first_time = 1; - - ogg_thread_running = 0; - //init - LWP_InitQueue(&oggplayer_queue); - - priv[0].vi = ov_info(&priv[0].vf, -1); - - SND_Pause(0); - - priv[0].pcm_indx = 0; - priv[0].pcmout_pos = 0; - priv[0].eof = 0; - priv[0].flag = 0; - priv[0].current_section = 0; - - ogg_thread_running = 1; - - while (!priv[0].eof) - { - long ret; - if (ogg_thread_running <= 0) - break; - - if (priv[0].flag) - LWP_ThreadSleep(oggplayer_queue); // wait only when i have samples to send - - if (ogg_thread_running <= 0) - break; - - if (priv[0].flag == 0) // wait to all samples are sended - { - if (SND_TestPointer(0, priv[0].pcmout[priv[0].pcmout_pos]) - && SND_StatusVoice(0) != SND_UNUSED) - { - priv[0].flag |= 64; - continue; - } - if (priv[0].pcm_indx < READ_SAMPLES) - { - priv[0].flag = 3; - - if (priv[0].seek_time >= 0) - { - ov_time_seek(&priv[0].vf, priv[0].seek_time); - priv[0].seek_time = -1; - } - - ret - = ov_read( - &priv[0].vf, - (void *) &priv[0].pcmout[priv[0].pcmout_pos][priv[0].pcm_indx], - MAX_PCMOUT,/*0,2,1,*/&priv[0].current_section); - priv[0].flag &= 192; - if (ret == 0) - { - /* EOF */ - if (priv[0].mode & 1) - ov_time_seek(&priv[0].vf, 0); // repeat - else - priv[0].eof = 1; // stops - // - } - else if (ret < 0) - { - /* error in the stream. Not a problem, just reporting it in - case we (the app) cares. In this case, we don't. */ - if (ret != OV_HOLE) - { - if (priv[0].mode & 1) - ov_time_seek(&priv[0].vf, 0); // repeat - else - priv[0].eof = 1; // stops - } - } - else - { - /* we don't bother dealing with sample rate changes, etc, but - you'll have to*/ - priv[0].pcm_indx += ret >> 1; //get 16 bits samples - } - } - else - priv[0].flag = 1; - } - - if (priv[0].flag == 1) - { - if (SND_StatusVoice(0) == SND_UNUSED || first_time) - { - first_time = 0; - if (priv[0].vi->channels == 2) - { - SND_SetVoice(0, VOICE_STEREO_16BIT, priv[0].vi->rate, 0, - (void *) priv[0].pcmout[priv[0].pcmout_pos], - priv[0].pcm_indx << 1, priv[0].volume, - priv[0].volume, ogg_add_callback); - priv[0].pcmout_pos ^= 1; - priv[0].pcm_indx = 0; - priv[0].flag = 0; - } - else - { - SND_SetVoice(0, VOICE_MONO_16BIT, priv[0].vi->rate, 0, - (void *) priv[0].pcmout[priv[0].pcmout_pos], - priv[0].pcm_indx << 1, priv[0].volume, - priv[0].volume, ogg_add_callback); - priv[0].pcmout_pos ^= 1; - priv[0].pcm_indx = 0; - priv[0].flag = 0; - } - } - else - { - // if(priv[0].pcm_indx==0) priv[0].flag=0; // all samples sended - } - - } - - } - ov_clear(&priv[0].vf); - priv[0].fd = -1; - priv[0].pcm_indx = 0; - ogg_thread_running = 0; - - return 0; -} - -void StopOgg() -{ - SND_StopVoice(0); - if (ogg_thread_running > 0) - { - ogg_thread_running = -2; - LWP_ThreadSignal(oggplayer_queue); - LWP_JoinThread(h_oggplayer, NULL); - - while (((volatile int) ogg_thread_running) != 0) - { - ;;; - } - } -} - -int PlayOgg(int fd, int time_pos, int mode) -{ - StopOgg(); - - ogg_thread_running = 0; - - private_ogg.fd = fd; - private_ogg.mode = mode; - private_ogg.eof = 0; - private_ogg.volume = 127; - private_ogg.flag = 0; - private_ogg.seek_time = -1; - - if (time_pos > 0) - private_ogg.seek_time = time_pos; - - if (fd < 0) - { - private_ogg.fd = -1; - return -1; - } - if (ov_open((void *) &private_ogg.fd, &private_ogg.vf, NULL, 0) < 0) - { - mem_close(private_ogg.fd); // mem_close() can too close files from devices - private_ogg.fd = -1; - ogg_thread_running = -1; - return -1; - } - - if (LWP_CreateThread(&h_oggplayer, (void *) ogg_player_thread, - &private_ogg, oggplayer_stack, STACKSIZE, 80) == -1) - { - ogg_thread_running = -1; - ov_clear(&private_ogg.vf); - private_ogg.fd = -1; - return -1; - } - LWP_ThreadSignal(oggplayer_queue); - while (((volatile int) ogg_thread_running) == 0) - { - ;;; - } - return 0; -} - - -int PlayOggFromFile(char * path, int loop) { - - StopOgg(); - u32 filesize = 0; - char * bufferogg = NULL; - size_t resultogg; - - FILE * pFile; - pFile = fopen (path, "rb"); - - //Check that pFile exist - if (pFile==NULL){ - return -1; - } - - // get file size: - fseek (pFile , 0 , SEEK_END); - filesize = ftell (pFile); - rewind (pFile); - - // allocate memory to contain the whole file: - bufferogg = (char*) malloc (sizeof(char)*filesize); - if (bufferogg == NULL) {fputs (" Memory error",stderr); exit (2);} - - // copy the file into the buffer: - resultogg = fread (bufferogg,1,filesize,pFile); - if (resultogg != filesize) {fputs (" Reading error",stderr); exit (3);} - - fclose (pFile); - - if (loop) - return PlayOgg(mem_open((char *)bufferogg, filesize), 0, OGG_INFINITE_TIME); - else - return PlayOgg(mem_open((char *)bufferogg, filesize), 0, OGG_ONE_TIME); -} - - -void PauseOgg(int pause) -{ - if (pause) - { - private_ogg.flag |= 128; - } - else - { - if (private_ogg.flag & 128) - { - private_ogg.flag |= 64; - private_ogg.flag &= ~128; - if (ogg_thread_running > 0) - { - LWP_ThreadSignal(oggplayer_queue); - // while(((volatile int )private_ogg.flag)!=1 && ((volatile int )ogg_thread_running)>0) {;;;} - } - } - - } -} - -int StatusOgg() -{ - if (ogg_thread_running <= 0) - return -1; // Error - - if (private_ogg.eof) - return 255; // EOF - - if (private_ogg.flag & 128) - return 2; // paused - return 1; // running -} - -void SetVolumeOgg(int volume) -{ - private_ogg.volume = volume; - SND_Pause(0); - - SND_ChangeVolumeVoice(0, volume, volume); -} - -s32 GetTimeOgg() -{ - int ret; - if (ogg_thread_running <= 0) - return 0; - if (private_ogg.fd < 0) - return 0; - ret = ((s32) ov_time_tell(&private_ogg.vf)); - if (ret < 0) - ret = 0; - - return ret; -} - -void SetTimeOgg(s32 time_pos) -{ - if (time_pos >= 0) - private_ogg.seek_time = time_pos; -} diff --git a/source/oggplayer.h b/source/oggplayer.h deleted file mode 100644 index 7478263f..00000000 --- a/source/oggplayer.h +++ /dev/null @@ -1,176 +0,0 @@ -/* - Copyright (c) 2008 Francisco Muoz 'Hermes' - All rights reserved. - - Redistribution and use in source and binary forms, with or without modification, are - permitted provided that the following conditions are met: - - - Redistributions of source code must retain the above copyright notice, this list of - conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, this list - of conditions and the following disclaimer in the documentation and/or other - materials provided with the distribution. - - The names of the contributors may not be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY - EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL - THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF - THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef __OGGPLAYER_H__ -#define __OGGPLAYER_H__ - -#include -#include "tremor/ivorbiscodec.h" -#include "tremor/ivorbisfile.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -#define OGG_ONE_TIME 0 -#define OGG_INFINITE_TIME 1 - -#define OGG_STATUS_RUNNING 1 -#define OGG_STATUS_ERR -1 -#define OGG_STATUS_PAUSED 2 -#define OGG_STATUS_EOF 255 - -/*------------------------------------------------------------------------------------------------------------------------------------------------------*/ -/* Player OGG functions */ -/*------------------------------------------------------------------------------------------------------------------------------------------------------*/ - -/* int PlayOgg(int fd, int time_pos, int mode); - - Play an Ogg file. This file can be loaded from memory (mem_open(void *ogg, int size_ogg)) or from device with open("device:file.ogg",O_RDONLY,0); - - NOTE: The file is closed by the player when you call PlayOgg(), StopOgg() or if it fail. - - -- Params --- - - fd: file descriptor from open() or mem_open() - - time_pos: initial time position in the file (in milliseconds). For example, use 30000 to advance 30 seconds - - mode: Use OGG_ONE_TIME or OGG_INFINITE_TIME. When you use OGG_ONE_TIME the sound stops and StatusOgg() return OGG_STATUS_EOF - - return: 0- Ok, -1 Error - - */ - -int PlayOgg(int fd, int time_pos, int mode); - -/*------------------------------------------------------------------------------------------------------------------------------------------------------*/ -/* int PlayOgg(char * path, int loop); - Just give the function the full device+path to OGG to play it - loop = 1 for Loop and 0 for one time playing -*/ -int PlayOggFromFile(char * path, int loop); -/*------------------------------------------------------------------------------------------------------------------------------------------------------*/ - -/* void StopOgg(); - - Stop an Ogg file. - - NOTE: The file is closed and the player thread is released - - -- Params --- - - - */ - -void StopOgg(); - -/*------------------------------------------------------------------------------------------------------------------------------------------------------*/ - -/* void PauseOgg(int pause); - - Pause an Ogg file. - - -- Params --- - - pause: 0 -> continue, 1-> pause - - */ - -void PauseOgg(int pause); - -/*------------------------------------------------------------------------------------------------------------------------------------------------------*/ - -/* int StatusOgg(); - - Return the Ogg status - - -- Params --- - - - return: OGG_STATUS_RUNNING - OGG_STATUS_ERR -> not initialized? - OGG_STATUS_PAUSED - OGG_STATUS_EOF -> player stopped by End Of File - - */ - -int StatusOgg(); - -/*------------------------------------------------------------------------------------------------------------------------------------------------------*/ - -/* void SetVolumeOgg(int volume); - - Set the Ogg playing volume. - NOTE: it change the volume of voice 0 (used for the Ogg player) - - -- Params --- - - volume: 0 to 255 (max) - - */ - -void SetVolumeOgg(int volume); - -/*------------------------------------------------------------------------------------------------------------------------------------------------------*/ - -/* s32 GetTimeOgg(); - - Return the Ogg time from the starts of the file - - -- Params --- - - return: 0 -> Ok or error condition (you must ignore this value) - >0 -> time in milliseconds from the starts - - */ - -s32 GetTimeOgg(); - -/*------------------------------------------------------------------------------------------------------------------------------------------------------*/ - -/* void SetTimeOgg(s32 time_pos); - - Set the time position - - NOTE: The file is closed by the player when you call PlayOgg(), StopOgg() or if it fail. - - -- Params --- - - time_pos: time position in the file (in milliseconds). For example, use 30000 to advance 30 seconds - - */ - -void SetTimeOgg(s32 time_pos); - -/*------------------------------------------------------------------------------------------------------------------------------------------------------*/ - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/source/partition.c b/source/partition.c deleted file mode 100644 index 32dc5711..00000000 --- a/source/partition.c +++ /dev/null @@ -1,51 +0,0 @@ -#include -#include -#include - -#include "partition.h" -#include "usbstorage.h" -#include "utils.h" - -/* 'partition table' structure */ -typedef struct { - /* Zero bytes */ - u8 padding[446]; - - /* Partition table entries */ - partitionEntry entries[MAX_PARTITIONS]; -} ATTRIBUTE_PACKED partitionTable; - - -s32 Partition_GetEntries(partitionEntry *outbuf, u32 *outval) -{ - static partitionTable table ATTRIBUTE_ALIGN(32); - - u32 cnt, sector_size; - s32 ret; - - /* Get sector size */ - ret = USBStorage_GetCapacity(§or_size); - if (ret < 0) - return ret; - - /* Read partition table */ - ret = USBStorage_ReadSectors(0, 1, &table); - if (ret < 0) - return ret; - - /* Swap endianess */ - for (cnt = 0; cnt < 4; cnt++) { - partitionEntry *entry = &table.entries[cnt]; - - entry->sector = swap32(entry->sector); - entry->size = swap32(entry->size); - } - - /* Set partition entries */ - memcpy(outbuf, table.entries, sizeof(table.entries)); - - /* Set sector size */ - *outval = sector_size; - - return 0; -} diff --git a/source/partition.h b/source/partition.h deleted file mode 100644 index cc8807de..00000000 --- a/source/partition.h +++ /dev/null @@ -1,40 +0,0 @@ -#ifndef _PARTITION_H_ -#define _PARTITION_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif - -/* 'partition entry' structure */ -typedef struct { - /* Boot indicator */ - u8 boot; - - /* Starting CHS */ - u8 start[3]; - - /* Partition type */ - u8 type; - - /* Ending CHS */ - u8 end[3]; - - /* Partition sector */ - u32 sector; - - /* Partition size */ - u32 size; -} ATTRIBUTE_PACKED partitionEntry; - -/* Constants */ -#define MAX_PARTITIONS 4 - -/* Prototypes */ -s32 Partition_GetEntries(partitionEntry *, u32 *); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/source/patchcode.c b/source/patchcode.c deleted file mode 100644 index 51a6a1bc..00000000 --- a/source/patchcode.c +++ /dev/null @@ -1,359 +0,0 @@ -/* - * Copyright (C) 2008 Nuke (wiinuke@gmail.com) - * - * this file is part of GeckoOS for USB Gecko - * http://www.usbgecko.com - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#include -#include -#include -#include -#include "geckomenu.h" -#include "apploader.h" -#include "patchcode.h" -#include "fwrite_patch.h" - -extern void patchhook(u32 address, u32 len); -extern void patchhook2(u32 address, u32 len); -extern void patchhook3(u32 address, u32 len); -extern void patchhook4(u32 address, u32 len); -extern void multidolpatchone(u32 address, u32 len); -extern void multidolpatchtwo(u32 address, u32 len); - -extern void regionfreejap(u32 address, u32 len); -extern void regionfreeusa(u32 address, u32 len); -extern void regionfreepal(u32 address, u32 len); - -extern void removehealthcheck(u32 address, u32 len); - -extern void copyflagcheck1(u32 address, u32 len); -extern void copyflagcheck2(u32 address, u32 len); -extern void copyflagcheck3(u32 address, u32 len); -extern void copyflagcheck4(u32 address, u32 len); -extern void copyflagcheck5(u32 address, u32 len); - -extern void patchupdatecheck(u32 address, u32 len); - -extern void movedvdhooks(u32 address, u32 len); - - -extern void patchhookdol(u32 address, u32 len); -extern void langvipatch(u32 address, u32 len, u8 langbyte); -extern void vipatch(u32 address, u32 len); -extern u32 regionfreeselect; - -static const u32 viwiihooks[4] = { - 0x7CE33B78,0x38870034,0x38A70038,0x38C7004C -}; - -static const u32 multidolpatch1[2] = { - 0x3C03FFB4,0x28004F43 -}; - -static const u32 healthcheckhook[2] = { - 0x41810010,0x881D007D -}; - -static const u32 updatecheckhook[3] = { - 0x80650050,0x80850054,0xA0A50058 -}; - -static const u32 multidolpatch2[2] = { - 0x3F608000, 0x807B0018 -}; - -static const u32 recoveryhooks[3] = { - 0xA00100AC,0x5400073E,0x2C00000F -}; - -static const u32 nocopyflag1[3] = { - 0x540007FF, 0x4182001C, 0x80630068 -}; - -static const u32 nocopyflag2[3] = { - 0x540007FF, 0x41820024, 0x387E12E2 -}; - -// this one is for the GH3 and VC saves -//static const u32 nocopyflag3[5] = { -// 0x2C030000, 0x40820010, 0x88010020, 0x28000002, 0x41820234 -//}; - -static const u32 nocopyflag3[5] = { - 0x2C030000, 0x41820200,0x48000058,0x38610100 -}; -// this removes the display warning for no copy VC and GH3 saves -static const u32 nocopyflag4[4] = { - 0x80010008, 0x2C000000, 0x4182000C, 0x3BE00001 -}; - -static const u32 nocopyflag5[3] = { - 0x801D0024,0x540007FF,0x41820024 -}; - -static const u32 movedvdpatch[3] = { - 0x2C040000, 0x41820120, 0x3C608109 -}; - - - -static const u32 regionfreehooks[5] = { - 0x7C600774, 0x2C000001, 0x41820030,0x40800010,0x2C000000 -}; - -static const u32 fwritepatch[8] = { - 0x9421FFD0,0x7C0802A6,0x90010034,0xBF210014,0x7C9B2378,0x7CDC3378,0x7C7A1B78,0x7CB92B78 // bushing fwrite -}; - -static const u32 kpadhooks[4] = { - 0x9A3F005E,0x38AE0080,0x389FFFFC,0x7E0903A6 -}; - -static const u32 kpadoldhooks[6] = { - 0x801D0060, 0x901E0060, 0x801D0064, 0x901E0064, 0x801D0068, 0x901E0068 -}; - -static const u32 joypadhooks[4] = { - 0x3AB50001, 0x3A73000C, 0x2C150004, 0x3B18000C -}; - -static const u32 langpatch[3] = { - 0x7C600775, 0x40820010, 0x38000000 -}; - -static const u32 vipatchcode[3] = { - 0x4182000C,0x4180001C,0x48000018 -}; - -static const u32 wpadlibogc[5] = { -// 0x38A00140, 0x7C095878, 0x7D600078, 0x901F0010,0x913F0014 -// 0x7FA00124, 0x8001001C, 0x83810008, 0x83A1000C,0x7C0803A6 - 0x90A402E0,0x806502E4,0x908502E4,0x2C030000,0x906402E4 -}; - -void dogamehooks(void *addr, u32 len) -{ - void *addr_start = addr; - void *addr_end = addr+len; - - while(addr_start < addr_end) - { - - switch(hooktype) - { - - case 0: - - break; - - case 1: - if(memcmp(addr_start, viwiihooks, sizeof(viwiihooks))==0){ - // printf("\n\n\n"); - // printf("found at address %x\n", addr_start); - // sleep(2); - patchhook((u32)addr_start, len); - patched = 1; - hooktype = 1; - } - break; - -/* - case 2: - if(memcmp(addr_start, kpadhooks, sizeof(kpadhooks))==0){ - patchhook((u32)addr_start, len); - patched = 1; - } - - if(memcmp(addr_start, kpadoldhooks, sizeof(kpadoldhooks))==0){ - patchhook((u32)addr_start, len); - patched = 1; - } - break; - - case 3: - if(memcmp(addr_start, joypadhooks, sizeof(joypadhooks))==0){ - patchhook((u32)addr_start, len); - patched = 1; - } - break; - - case 4: - if(memcmp(addr_start, recoveryhooks, sizeof(recoveryhooks))==0){ - patchhook3((u32)addr_start, len); - } - break; -*/ - case 2: - - if(memcmp(addr_start, viwiihooks, sizeof(viwiihooks))==0){ - patchhook2((u32)addr_start, len); - } - - break; - -/* - case 6: - // jap region free - if(memcmp(addr_start, regionfreehooks, sizeof(regionfreehooks))==0){ - regionfreejap((u32)addr_start, len); - } - - // usa region free - if(memcmp(addr_start, regionfreehooks, sizeof(regionfreehooks))==0){ - regionfreeusa((u32)addr_start, len); - } - - // pal region free - if(memcmp(addr_start, regionfreehooks, sizeof(regionfreehooks))==0){ - regionfreepal((u32)addr_start, len); - } - - // skip disc update - if(memcmp(addr_start, updatecheckhook, sizeof(updatecheckhook))==0){ - patchupdatecheck((u32)addr_start, len); - } - break; - - - case 7: - if(memcmp(addr_start, healthcheckhook, sizeof(healthcheckhook))==0){ - removehealthcheck((u32)addr_start, len); - } - break; - - // no copy flags - case 8: - // Remove the actual flag so can copy back - if(memcmp(addr_start, nocopyflag5, sizeof(nocopyflag5))==0){ - copyflagcheck5((u32)addr_start, len); - } - - - if(memcmp(addr_start, nocopyflag1, sizeof(nocopyflag1))==0){ - copyflagcheck1((u32)addr_start, len); - } - - if(memcmp(addr_start, nocopyflag2, sizeof(nocopyflag2))==0){ - copyflagcheck2((u32)addr_start, len); - } - - // no VC and GH3 save - if(memcmp(addr_start, nocopyflag3, sizeof(nocopyflag2))==0){ - copyflagcheck3((u32)addr_start, len); - } - // no VC and GH3 save display remove - if(memcmp(addr_start, nocopyflag4, sizeof(nocopyflag4))==0){ - copyflagcheck4((u32)addr_start, len); - } - - break; - - case 9: - if(memcmp(addr_start, movedvdpatch, sizeof(movedvdpatch))==0){ - movedvdhooks((u32)addr_start, len); - } - break; -*/ - // multidol - case 3: - - if(memcmp(addr_start, multidolpatch1, sizeof(multidolpatch1))==0){ - multidolpatchone((u32)addr_start, len); - } - if(memcmp(addr_start, multidolpatch2, sizeof(multidolpatch2))==0){ - multidolpatchtwo((u32)addr_start, len); - } - break; - } - addr_start += 4; - } -} - -// Not used yet, for patching DOL once loaded into memory and befor execution -void patchdol(void *addr, u32 len) -{ - - void *addr_start = addr; - void *addr_end = addr+len; - - while(addr_start < addr_end) - { - if(memcmp(addr_start, wpadlibogc, sizeof(wpadlibogc))==0) { - // printf("\n\n\n"); - // printf("found at address %x\n", addr_start); - // sleep(10); - // patchhookdol((u32)addr_start, len); - patched = 1; - break; - } - addr_start += 4; - } -} - -void langpatcher(void *addr, u32 len) -{ - - void *addr_start = addr; - void *addr_end = addr+len; - - while(addr_start < addr_end) - { - - if(memcmp(addr_start, langpatch, sizeof(langpatch))==0) { - if(configbytes[0] != 0xCD){ - langvipatch((u32)addr_start, len, configbytes[0]); - } - } - addr_start += 4; - } -} - -void patchdebug(void *addr, u32 len) -{ - - void *addr_start = addr; - void *addr_end = addr+len; - - while(addr_start < addr_end) - { - - if(memcmp(addr_start, fwritepatch, sizeof(fwritepatch))==0) { - - memcpy(addr_start,fwrite_patch_bin,fwrite_patch_bin_len); - // apply patch - } - addr_start += 4; - } -} - -void vidolpatcher(void *addr, u32 len) -{ - - void *addr_start = addr; - void *addr_end = addr+len; - - while(addr_start < addr_end) - { - if(memcmp(addr_start, vipatchcode, sizeof(vipatchcode))==0) { - vipatch((u32)addr_start, len); - } - addr_start += 4; - } -} - - diff --git a/source/patchcode.h b/source/patchcode.h deleted file mode 100644 index 381fcaa9..00000000 --- a/source/patchcode.h +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (C) 2008 Nuke (wiinuke@gmail.com) - * - * this file is part of GeckoOS for USB Gecko - * http://www.usbgecko.com - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#ifndef __PATCHCODE_H__ -#define __PATCHCODE_H__ -#ifdef __cplusplus -extern "C" -{ -#endif -// Globals -u32 hooktype; -int patched; -u8 configbytes[2]; -u32 regionfree; - -// Function prototypes -void dogamehooks(void *addr, u32 len); -void langpatcher(void *addr, u32 len); -void vidolpatcher(void *addr, u32 len); -void patchdebug(void *addr, u32 len); - - - -#ifdef __cplusplus -} -#endif - -#endif // __PATCHCODE_H__ diff --git a/source/patchhook.S b/source/patchhook.S deleted file mode 100644 index bddd9b7c..00000000 --- a/source/patchhook.S +++ /dev/null @@ -1,508 +0,0 @@ - - # (c) Nuke www.usbgecko.com. Licensed under GPL V2 -.text -#include "ppc.h" - - -.globl patchhook # r3 address -patchhook: - mtctr r4 - lis r6, 0x4E80 - ori r6, r6, 0x0020 # blr -findblr: - lwz r5, 0(r3) - cmpw r6, r5 - beq writebranch - addi r3, r3, 4 # next word - bdnz findblr # loop length - b exit # stop unhooked game hanging - -writebranch: - lis r4, 0x8000 # 800018A0 hook location (source) - ori r4, r4, 0x18A8 - subf r4, r3, r4 # subtract r3 from r4 and place in r4 - lis r5, 0x3FF - ori r5, r5, 0xFFFF # 0x3FFFFFF - and r4, r4, r5 - lis r5, 0x4800 # 0x48000000 - or r4, r4, r5 - stw r4, 0(r3) # result in r3 - dcbf r0, r3 # data cache block flush - icbi r0, r3 -exit: - blr # return - -.globl patchhook2 # r3 address -patchhook2: - mtctr r4 - lis r6, 0x4E80 - ori r6, r6, 0x0020 # blr -findblr2: - lwz r5, 0(r3) - cmpw r6, r5 - beq writebranch2 - addi r3, r3, 4 # next word - bdnz findblr2 # loop length - b exit2 # stop unhooked game hanging - -writebranch2: - lis r4, 0x8000 # 81700000 our temp patcher - ori r4, r4, 0x18a8 - subf r4, r3, r4 # subtract r3 from r4 and place in r4 - lis r5, 0x3FF - ori r5, r5, 0xFFFF # 0x3FFFFFF - and r4, r4, r5 - lis r5, 0x4800 # 0x48000000 - or r4, r4, r5 - stw r4, 0(r3) # result in r3 - dcbf r0, r3 # data cache block flush - icbi r0, r3 -exit2: - blr # return - -.globl patchhook3 # r3 address -patchhook3: - mtctr r4 - lis r6, 0x4BFF - ori r6, r6, 0xE955 # blr -findbne: - lwz r5, 0(r3) - cmpw r6, r5 - beq writebl - addi r3, r3, 4 # next word - bdnz findbne # loop length - b exit3 # stop unhooked game hanging - -writebl: - lis r4, 0x4BFF # 81700000 our temp patcher - ori r4, r4, 0xEA91 - stw r4, 0(r3) # result in r3 - dcbf r0, r3 # data cache block flush - icbi r0, r3 -exit3: - blr # return - -.globl patchhook4 # r3 address -patchhook4: - mtctr r4 - lis r6, 0x4082 - ori r6, r6, 0x001C # blr -findregion: - lwz r5, 0(r3) - cmpw r6, r5 - beq writebr - addi r3, r3, 4 # next word - bdnz findregion # loop length - b exit4 # stop unhooked game hanging - -writebr: - lis r4, 0x4800 - ori r4, r4, 0x001C - stw r4, 0(r3) # result in r3 - dcbf r0, r3 # data cache block flush - icbi r0, r3 -exit4: - blr # return - -.globl multidolpatchone # r3 address -multidolpatchone: - mtctr r4 - lis r6, 0x3800 - ori r6, r6, 0x0001 # (li r0,1) -findmulti: - lwz r5, 0(r3) - cmpw r6, r5 - beq writemulti - subi r3, r3, 4 # go back - bdnz findmulti # loop length - b exit5 # stop unhooked game hanging - -writemulti: - lis r4, 0x8170 # 81700000 - ori r4, r4, 0x0020 - subf r18, r3, r4 # subf r18,(source),(dest) - lis r6, 0x4800 - ori r6,r6,1 - rlwimi r6,r18,0,6,29 - stw r6,0(r3) - stw r6,0(r19) - stw r3,4(r19) - dcbf r0, r3 - sync - icbi r0, r3 - isync -exit5: - blr # return - -.globl multidolpatchtwo # r3 address -multidolpatchtwo: - mtctr r4 - lis r6, 0x3F60 - ori r6, r6, 0x8000 # (lis r27,-32768) -findmulti2: - lwz r5, 0(r3) - cmpw r6, r5 - beq writemulti2 - addi r3, r3, 4 # go forward - bdnz findmulti2 # loop length - b exit6 # stop unhooked game hanging - -writemulti2: - lis r4, 0x8170 # 81700020 - ori r4, r4, 0x0000 - subf r18, r3, r4 # subf r18,(source),(dest) - lis r6, 0x4800 - ori r6,r6,1 - rlwimi r6,r18,0,6,29 - stw r6,0(r3) - stw r6,0(r19) - stw r3,4(r19) - dcbf r0, r3 - sync - icbi r0, r3 - isync -exit6: - blr # return - -.globl langvipatch # r3 address, r4 len, r5 lang byte -langvipatch: - mtctr r4 - lis r6, 0x8861 - ori r6, r6, 0x0008 # lbz r3, 8(sp) -findlang: - lwz r7, 0(r3) - cmpw r6, r7 - beq patchlang - addi r3, r3, 4 # next word - bdnz findlang # loop length - b exitlang # stop unhooked game hanging - -patchlang: - - lis r4, 0x3860 # 0x38600001 li %r3, 1 # eng - add r4, r4, r5 -gofinal: - stw r4, 0(r3) # result in r3 - dcbf r0, r3 # data cache block flush - icbi r0, r3 -exitlang: - blr # return - -.globl vipatch # r3 address -vipatch: - mtctr r4 - lis r6, 0x5400 - ori r6, r6, 0xFFFE -findvi: - lwz r5, 0(r3) - cmpw r6, r5 - beq patchvi - addi r3, r3, 4 # next word - bdnz findvi # loop length - b exitvi # stop unhooked game hanging - -patchvi: - lis r4, 0x8000 - ori r4, r4, 0x0003 - lbz r5, 0(r4) - cmpwi r5, 0x45 # USA - beq patchusa - cmpwi r5, 0x4A - beq patchjap2 # JAP - b exitvi -patchjap2: - lis r4, 0x3800 - ori r4, r4, 0x0001 - b gofinal2 -patchusa: - lis r4, 0x3800 - ori r4, r4, 0x0000 -gofinal2: - stw r4, 0(r3) # result in r3 - dcbf r0, r3 # data cache block flush - icbi r0, r3 -exitvi: - blr # return - -.globl regionfreejap # r3 address -regionfreejap: - mtctr r4 - lis r6, 0x2C1B - ori r6, r6, 0x0000 # blr -findjap: - lwz r5, 0(r3) - cmpw r6, r5 - beq writenop - addi r3, r3, 4 # next word - bdnz findjap # loop length - b exitjap # stop unhooked game hanging - -writenop: - addi r3, r3, 4 # next word - lis r4, 0x6000 # nop - ori r4, r4, 0x0000 - stw r4, 0(r3) # result in r3 - dcbf r0, r3 # data cache block flush - icbi r0, r3 -exitjap: - blr # return - -.globl regionfreeusa # r3 address -regionfreeusa: - mtctr r4 - lis r6, 0x281B - ori r6, r6, 0x0001 # blr -findusa: - lwz r5, 0(r3) - cmpw r6, r5 - beq writenop1 - addi r3, r3, 4 # next word - bdnz findusa # loop length - b exitusa # stop unhooked game hanging - -writenop1: - addi r3, r3, 4 # next word - lis r4, 0x6000 # nop - ori r4, r4, 0x0000 - stw r4, 0(r3) # result in r3 - dcbf r0, r3 # data cache block flush - icbi r0, r3 -exitusa: - blr # return - -.globl regionfreepal # r3 address -regionfreepal: - mtctr r4 - lis r6, 0x281B - ori r6, r6, 0x0002 # blr -findpal: - lwz r5, 0(r3) - cmpw r6, r5 - beq writenop2 - addi r3, r3, 4 # next word - bdnz findpal # loop length - b exitpal # stop unhooked game hanging - -writenop2: - addi r3, r3, 4 # next word - lis r4, 0x6000 # nop - ori r4, r4, 0x0000 - stw r4, 0(r3) # result in r3 - dcbf r0, r3 # data cache block flush - icbi r0, r3 - - lis r6, 0x4082 - ori r6, r6, 0x001C # bne loc_81377A2C -findextra: #this is just the bne to b patch - lwz r5, 0(r3) - cmpw r6, r5 - beq writeb - addi r3, r3, 4 # next word - bdnz findextra # loop length - b exitpal # stop unhooked game hanging - -writeb: - addi r3, r3, 4 # next word - lis r4, 0x4800 - ori r4, r4, 0x001c # b loc_81377A2C - stw r4, 0(r3) # result in r3 - dcbf r0, r3 # data cache block flush - icbi r0, r3 -exitpal: - blr # return - -.globl removehealthcheck # r3 address -removehealthcheck: - mtctr r4 - lis r6, 0x4182 - ori r6, r6, 0x004C # blr -findhe: - lwz r5, 0(r3) - cmpw r6, r5 - beq writebhe - addi r3, r3, 4 # next word - bdnz findhe # loop length - b exithe # stop unhooked game hanging - -writebhe: - lis r4, 0x6000 - ori r4, r4, 0x0000 - stw r4, 0(r3) # result in r3 - dcbf r0, r3 # data cache block flush - icbi r0, r3 -exithe: - blr # return - - - -.globl patchupdatecheck # r3 address -patchupdatecheck: - mtctr r4 - lis r6, 0x4082 - ori r6, r6, 0x0020 # blr -finduc: - lwz r5, 0(r3) - cmpw r6, r5 - beq writenopuc - addi r3, r3, 4 # next word - bdnz finduc # loop length - b exituc # stop unhooked game hanging - -writenopuc: - lis r4, 0x6000 - ori r4, r4, 0x0000 - stw r4, 0(r3) # result in r3 - dcbf r0, r3 # data cache block flush - icbi r0, r3 -exituc: - blr # return - - - - -.globl copyflagcheck1 # r3 address -copyflagcheck1: - mtctr r4 - lis r6, 0x5400 - ori r6, r6, 0x07FF -findncf1: - lwz r5, 0(r3) - cmpw r6, r5 - beq writencf1 - subi r3, r3, 4 # next word - bdnz findncf1 # loop length - b exitncf1 # stop unhooked game hanging - -writencf1: - lis r4, 0x7C00 - ori r4, r4, 0x0000 - stw r4, 0(r3) # result in r3 - dcbf r0, r3 # data cache block flush - icbi r0, r3 -exitncf1: - blr # return - -.globl copyflagcheck2 # r3 address -copyflagcheck2: - mtctr r4 - lis r6, 0x5400 - ori r6, r6, 0x07FF -findncf2: - lwz r5, 0(r3) - cmpw r6, r5 - beq writencf2 - subi r3, r3, 4 # next word - bdnz findncf2 # loop length - b exitncf2 # stop unhooked game hanging - -writencf2: - lis r4, 0x7C00 - ori r4, r4, 0x0000 - stw r4, 0(r3) # result in r3 - dcbf r0, r3 # data cache block flush - icbi r0, r3 -exitncf2: - blr # return - - -.globl copyflagcheck3 # r3 address -copyflagcheck3: -findncf3: - addi r3, r3, 20 # go back one dword (4 bytes) - lwz r5, 0(r3) -writencf3: - lis r4, 0x3860 - ori r4, r4, 0x0001 # li r3,1 - stw r4, 0(r3) # result in r3 - dcbf r0, r3 # data cache block flush - icbi r0, r3 -exitncf3: - blr # return - - -.globl copyflagcheck4 # r3 address -copyflagcheck4: - mtctr r4 - lis r6, 0x3BE0 - ori r6, r6, 0x0001 # li r31,1 -findncf4: - lwz r5, 0(r3) - cmpw r6, r5 - beq writencf4 - addi r3, r3, 4 # next word - bdnz findncf4 # loop length - b exitncf4 # stop unhooked game hanging - -writencf4: - lis r4, 0x3BE0 - ori r4, r4, 0x0000 # change this to 3BE00000 (li r31,0) - stw r4, 0(r3) # result in r3 - dcbf r0, r3 # data cache block flush - icbi r0, r3 -exitncf4: - blr # return - -.globl copyflagcheck5 # r3 address -copyflagcheck5: - mtctr r4 - lis r6, 0x4182 - ori r6, r6, 0x0024 # beq loc_8134AA60 -findncf5: - lwz r5, 0(r3) - cmpw r6, r5 - beq writencf5 - addi r3, r3, 4 # next word - bdnz findncf5 # loop length - b exitncf5 # stop unhooked game hanging - -writencf5: - #addi r3, r3, 8 # skip 2 - - lis r4, 0x801D - ori r4, r4, 0x0024 # change to 801D0024 (lwz r0,36(r29)) - stw r4, 0(r3) - dcbf r0, r3 - icbi r0, r3 - - addi r3, r3, 4 # next word - - lis r4, 0x5400 - ori r4, r4, 0x003C # change to 5400003C (rlwinm r0,r0,0,0,30) - stw r4, 0(r3) - dcbf r0, r3 - icbi r0, r3 - - addi r3, r3, 4 # next word - - lis r4, 0x901D - ori r4, r4, 0x0024 # change to 901D0024 (stw r0,36(r29)) - stw r4, 0(r3) - dcbf r0, r3 - icbi r0, r3 - - addi r3, r3, 4 # next word - - lis r4, 0x4800 - ori r4, r4, 0x0018 # change to 48000018 (b 0x8134aa60) - stw r4, 0(r3) - dcbf r0, r3 - icbi r0, r3 -exitncf5: - blr # return - -.globl movedvdhooks # r3 address -movedvdhooks: - lis r6, 0x4182 - ori r6, r6, 0x0120 # beq loc_813A7938 -findmd1: - addi r3, r3, 4 # next word - lwz r5, 0(r3) -writemd1: - lis r4, 0x6000 - ori r4, r4, 0x0000 # nop - stw r4, 0(r3) # result in r3 - dcbf r0, r3 # data cache block flush - icbi r0, r3 -exitmd1: - blr # return - diff --git a/source/ppc.h b/source/ppc.h deleted file mode 100644 index ae90eb10..00000000 --- a/source/ppc.h +++ /dev/null @@ -1,83 +0,0 @@ - - -/* Condition Register Bit Fields */ - -#define cr0 0 -#define cr1 1 -#define cr2 2 -#define cr3 3 -#define cr4 4 -#define cr5 5 -#define cr6 6 -#define cr7 7 - - -/* General Purpose Registers */ - -#define r0 0 -#define r1 1 -#define r2 2 -#define r3 3 -#define r4 4 -#define r5 5 -#define r6 6 -#define r7 7 -#define r8 8 -#define r9 9 -#define r10 10 -#define r11 11 -#define r12 12 -#define r13 13 -#define r14 14 -#define r15 15 -#define r16 16 -#define r17 17 -#define r18 18 -#define r19 19 -#define r20 20 -#define r21 21 -#define r22 22 -#define r23 23 -#define r24 24 -#define r25 25 -#define r26 26 -#define r27 27 -#define r28 28 -#define r29 29 -#define r30 30 -#define r31 31 - -/* Define Floating Point Registers */ - -#define f0 0 -#define f1 1 -#define f2 2 -#define f3 3 -#define f4 4 -#define f5 5 -#define f6 6 -#define f7 7 -#define f8 8 -#define f9 9 -#define f10 10 -#define f11 11 -#define f12 12 -#define f13 13 -#define f14 14 -#define f15 15 -#define f16 16 -#define f17 17 -#define f18 18 -#define f19 19 -#define f20 20 -#define f21 21 -#define f22 22 -#define f23 23 -#define f24 24 -#define f25 25 -#define f26 26 -#define f27 27 -#define f28 28 -#define f29 29 -#define f30 30 -#define f31 31 diff --git a/source/sdhc.c b/source/sdhc.c deleted file mode 100644 index 9fc27701..00000000 --- a/source/sdhc.c +++ /dev/null @@ -1,159 +0,0 @@ -#include -#include -#include -#include - -#include "sdhc.h" - -/* IOCTL comamnds */ -#define IOCTL_SDHC_INIT 0x01 -#define IOCTL_SDHC_READ 0x02 -#define IOCTL_SDHC_WRITE 0x03 -#define IOCTL_SDHC_ISINSERTED 0x04 - -#define SDHC_HEAPSIZE 0x8000 - -/* Variables */ -static char fs[] ATTRIBUTE_ALIGN(32) = "/dev/sdio/sdhc"; - -static s32 hid = -1, fd = -1; -static u32 sector_size = SDHC_SECTOR_SIZE; - - -bool SDHC_Init(void) -{ - s32 ret; - - /* Already open */ - if (fd > 0) - return true; - - /* Create heap */ - if (hid < 0) { - hid = iosCreateHeap(SDHC_HEAPSIZE); - if (hid < 0) - goto err; - } - - /* Open SDHC device */ - fd = IOS_Open(fs, 0); - if (fd < 0) - goto err; - - /* Initialize SDHC */ - ret = IOS_IoctlvFormat(hid, fd, IOCTL_SDHC_INIT, ":"); - if (ret) - goto err; - - return true; - -err: - /* Close SDHC device */ - if (fd > 0) { - IOS_Close(fd); - fd = -1; - } - - return false; -} - -bool SDHC_Close(void) -{ - /* Close SDHC device */ - if (fd > 0) { - IOS_Close(fd); - fd = -1; - } - - return true; -} - -bool SDHC_IsInserted(void) -{ - s32 ret; - - /* Check if SD card is inserted */ - ret = IOS_IoctlvFormat(hid, fd, IOCTL_SDHC_ISINSERTED, ":"); - - return (!ret) ? true : false; -} - -bool SDHC_ReadSectors(u32 sector, u32 count, void *buffer) -{ - void *buf = (void *)buffer; - u32 len = (sector_size * count); - - s32 ret; - - /* Device not opened */ - if (fd < 0) - return false; - - /* Buffer not aligned */ - if ((u32)buffer & 0x1F) { - /* Allocate memory */ - buf = iosAlloc(hid, len); - if (!buf) - return false; - } - - /* Read data */ - ret = IOS_IoctlvFormat(hid, fd, IOCTL_SDHC_READ, "ii:d", sector, count, buf, len); - - /* Copy data */ - if (buf != buffer) { - memcpy(buffer, buf, len); - iosFree(hid, buf); - } - - return (!ret) ? true : false; -} - -bool SDHC_WriteSectors(u32 sector, u32 count, void *buffer) -{ - void *buf = (void *)buffer; - u32 len = (sector_size * count); - - s32 ret; - - /* Device not opened */ - if (fd < 0) - return false; - - /* Buffer not aligned */ - if ((u32)buffer & 0x1F) { - /* Allocate memory */ - buf = iosAlloc(hid, len); - if (!buf) - return false; - - /* Copy data */ - memcpy(buf, buffer, len); - } - - /* Read data */ - ret = IOS_IoctlvFormat(hid, fd, IOCTL_SDHC_WRITE, "ii:d", sector, count, buf, len); - - /* Free memory */ - if (buf != buffer) - iosFree(hid, buf); - - return (!ret) ? true : false; -} - -bool SDHC_ClearStatus(void) -{ - return true; -} - - -const DISC_INTERFACE __io_sdhc = { - DEVICE_TYPE_WII_SD, - FEATURE_MEDIUM_CANREAD | FEATURE_MEDIUM_CANWRITE | FEATURE_WII_SD, - (FN_MEDIUM_STARTUP)&SDHC_Init, - (FN_MEDIUM_ISINSERTED)&SDHC_IsInserted, - (FN_MEDIUM_READSECTORS)&SDHC_ReadSectors, - (FN_MEDIUM_WRITESECTORS)&SDHC_WriteSectors, - (FN_MEDIUM_CLEARSTATUS)&SDHC_ClearStatus, - (FN_MEDIUM_SHUTDOWN)&SDHC_Close -}; diff --git a/source/sdhc.h b/source/sdhc.h deleted file mode 100644 index 9f6f3c56..00000000 --- a/source/sdhc.h +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef _SDHC_H_ -#define _SDHC_H_ - -/* Constants */ -#define SDHC_SECTOR_SIZE 0x200 - -#ifdef __cplusplus -extern "C" -{ -#endif - -/* Prototypes */ -bool SDHC_Init(void); -bool SDHC_Close(void); -bool SDHC_ReadSectors(u32, u32, void *); -bool SDHC_WriteSectors(u32, u32, void *); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/source/sounds/bg_music.ogg b/source/sounds/bg_music.ogg deleted file mode 100644 index a22a73ae..00000000 Binary files a/source/sounds/bg_music.ogg and /dev/null differ diff --git a/source/sounds/button_click.pcm b/source/sounds/button_click.pcm deleted file mode 100644 index de3d55e3..00000000 Binary files a/source/sounds/button_click.pcm and /dev/null differ diff --git a/source/sounds/button_click2.pcm b/source/sounds/button_click2.pcm deleted file mode 100644 index 113b4321..00000000 Binary files a/source/sounds/button_click2.pcm and /dev/null differ diff --git a/source/sounds/button_over.pcm b/source/sounds/button_over.pcm deleted file mode 100644 index 64f519cf..00000000 Binary files a/source/sounds/button_over.pcm and /dev/null differ diff --git a/source/sounds/credits_music.ogg b/source/sounds/credits_music.ogg deleted file mode 100644 index 4010c41c..00000000 Binary files a/source/sounds/credits_music.ogg and /dev/null differ diff --git a/source/sounds/menuin.ogg b/source/sounds/menuin.ogg deleted file mode 100644 index 65ea7d73..00000000 Binary files a/source/sounds/menuin.ogg and /dev/null differ diff --git a/source/sounds/menuout.ogg b/source/sounds/menuout.ogg deleted file mode 100644 index e66f574c..00000000 Binary files a/source/sounds/menuout.ogg and /dev/null differ diff --git a/source/stub.S b/source/stub.S deleted file mode 100644 index 14468da7..00000000 --- a/source/stub.S +++ /dev/null @@ -1,6 +0,0 @@ - .rodata - - .globl data1 - .balign 32 -data1: - .incbin "../source/data1" diff --git a/source/sys.c b/source/sys.c deleted file mode 100644 index 39b6371d..00000000 --- a/source/sys.c +++ /dev/null @@ -1,139 +0,0 @@ -#include -#include - -#include "sys.h" -#include "wpad.h" -#include "wdvd.h" -#include "usbstorage.h" -#include "disc.h" -#include "wbfs.h" -#include "video.h" -#include "fatmounter.h" - -/* Constants */ -#define CERTS_LEN 0x280 - -/* Variables */ -static const char certs_fs[] ATTRIBUTE_ALIGN(32) = "/sys/cert.sys"; -u8 shutdown = 0; -u8 reset = 0; - -void __Sys_ResetCallback(void) -{ - /* Reboot console */ - reset = 1; -} - -void __Sys_PowerCallback(void) -{ - /* Poweroff console */ - shutdown = 1; -} - - -void Sys_Init(void) -{ - /* Initialize video subsytem */ - //VIDEO_Init(); - - /* Set RESET/POWER button callback */ - SYS_SetResetCallback(__Sys_ResetCallback); - SYS_SetPowerCallback(__Sys_PowerCallback); -} - -void Sys_Reboot(void) -{ - /* Restart console */ - STM_RebootSystem(); -} - -int Sys_IosReload(int IOS) -{ - s32 ret; - - SDCard_deInit(); - USBDevice_deInit(); - - WPAD_Flush(0); - WPAD_Disconnect(0); - WPAD_Shutdown(); - - WDVD_Close(); - - USBStorage_Deinit(); - - __IOS_ShutdownSubsystems(); - - ret = IOS_ReloadIOS(IOS); - - if(ret < 0) { - return ret; - } - - PAD_Init(); - Wpad_Init(); - WPAD_SetDataFormat(WPAD_CHAN_ALL,WPAD_FMT_BTNS_ACC_IR); - WPAD_SetVRes(WPAD_CHAN_ALL, screenwidth, screenheight); - - if(IOS == 249 || IOS == 222) { - ret = WBFS_Init(WBFS_DEVICE_USB); - ret = Disc_Init(); - ret = WBFS_Open(); - } - - return ret; - -} - -void Sys_Shutdown(void) -{ - Wpad_Disconnect(); - - /* Poweroff console */ - if(CONF_GetShutdownMode() == CONF_SHUTDOWN_IDLE) { - s32 ret; - - /* Set LED mode */ - ret = CONF_GetIdleLedMode(); - if(ret >= 0 && ret <= 2) - STM_SetLedMode(ret); - - /* Shutdown to idle */ - STM_ShutdownToIdle(); - } else { - /* Shutdown to standby */ - STM_ShutdownToStandby(); - } -} - -void Sys_LoadMenu(void) -{ - /* Return to the Wii system menu */ - SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0); -} - -s32 Sys_GetCerts(signed_blob **certs, u32 *len) -{ - static signed_blob certificates[CERTS_LEN] ATTRIBUTE_ALIGN(32); - - s32 fd, ret; - - /* Open certificates file */ - fd = IOS_Open(certs_fs, 1); - if (fd < 0) - return fd; - - /* Read certificates */ - ret = IOS_Read(fd, certificates, sizeof(certificates)); - - /* Close file */ - IOS_Close(fd); - - /* Set values */ - if (ret > 0) { - *certs = certificates; - *len = sizeof(certificates); - } - - return ret; -} diff --git a/source/sys.h b/source/sys.h deleted file mode 100644 index 74d7fb62..00000000 --- a/source/sys.h +++ /dev/null @@ -1,20 +0,0 @@ -#ifndef _SYS_H_ -#define _SYS_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif -/* Prototypes */ -void Sys_Init(void); -void Sys_Reboot(void); -void Sys_Shutdown(void); -void Sys_LoadMenu(void); -int Sys_IosReload(int IOS); -s32 Sys_GetCerts(signed_blob **, u32 *); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/source/updater.c b/source/updater.c deleted file mode 100644 index 625e2cc9..00000000 --- a/source/updater.c +++ /dev/null @@ -1,116 +0,0 @@ -#include -#include -#include -#include - -#include "http.h" - -static s32 connection; - -s32 network_request(const char * request) -{ - char buf[1024]; - char *ptr = NULL; - - u32 cnt, size; - s32 ret; - - /* Send request */ - ret = net_send(connection, request, strlen(request), 0); - if (ret < 0) - return ret; - - /* Clear buffer */ - memset(buf, 0, sizeof(buf)); - - /* Read HTTP header */ - for (cnt = 0; !strstr(buf, "\r\n\r\n"); cnt++) - if (net_recv(connection, buf + cnt, 1, 0) <= 0) - return -1; - - /* HTTP request OK? */ - if (!strstr(buf, "HTTP/1.1 200 OK")) - return -1; - /* Retrieve content size */ - ptr = strstr(buf, "Content-Length:"); - if (!ptr) - return -1; - - sscanf(ptr, "Content-Length: %u", &size); - return size; -} - -s32 network_read(void *buf, u32 len) -{ - s32 read = 0, ret; - - /* Data to be read */ - while (read < len) { - /* Read network data */ - ret = net_read(connection, buf + read, len - read); - if (ret < 0) - return ret; - - /* Read finished */ - if (!ret) - break; - - /* Increment read variable */ - read += ret; - } - - return read; -} - -s32 downloadrev(const char * url) { - - //Check if the url starts with "http://", if not it is not considered a valid url - if(strncmp(url, "http://", strlen("http://")) != 0) - { - //printf("URL '%s' doesn't start with 'http://'\n", url); - return -1; - } - - //Locate the path part of the url by searching for '/' past "http://" - char *path = strchr(url + strlen("http://"), '/'); - - //At the very least the url has to end with '/', ending with just a domain is invalid - if(path == NULL) - { - //printf("URL '%s' has no PATH part\n", url); - return -1; - } - - //Extract the domain part out of the url - int domainlength = path - url - strlen("http://"); - - if(domainlength == 0) - { - //printf("No domain part in URL '%s'\n", url); - return -1; - } - - char domain[domainlength + 1]; - strncpy(domain, url + strlen("http://"), domainlength); - domain[domainlength] = '\0'; - - connection = GetConnection(domain); - if(connection < 0) { - return -1; - } - - //Form a nice request header to send to the webserver - char* headerformat = "GET %s HTTP/1.1\r\nHost: %s\r\nConnection: close\r\n\r\n";; - char header[strlen(headerformat) + strlen(domain) + strlen(path)]; - sprintf(header, headerformat, path, domain); - - s32 filesize = network_request(header); - - return filesize; -} - -void CloseConnection() { - - net_close(connection); - -} diff --git a/source/updater.h b/source/updater.h deleted file mode 100644 index 7863d5f5..00000000 --- a/source/updater.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef _UPDATER_H_ -#define _UPDATER_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif - -s32 network_request(const char * request); -s32 network_read(void *buf, u32 len); -s32 downloadrev(const char * url); -void CloseConnection(); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/source/usbstorage.c b/source/usbstorage.c deleted file mode 100644 index de46e74d..00000000 --- a/source/usbstorage.c +++ /dev/null @@ -1,186 +0,0 @@ -/*------------------------------------------------------------- - -usbstorage_starlet.c -- USB mass storage support, inside starlet -Copyright (C) 2009 Kwiirk - -If this driver is linked before libogc, this will replace the original -usbstorage driver by svpe from libogc -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any -damages arising from the use of this software. - -Permission is granted to anyone to use this software for any -purpose, including commercial applications, and to alter it and -redistribute it freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you -must not claim that you wrote the original software. If you use -this software in a product, an acknowledgment in the product -documentation would be appreciated but is not required. - -2. Altered source versions must be plainly marked as such, and -must not be misrepresented as being the original software. - -3. This notice may not be removed or altered from any source -distribution. - --------------------------------------------------------------*/ - -#include -#include -#include -#include - -/* IOCTL commands */ -#define UMS_BASE (('U'<<24)|('M'<<16)|('S'<<8)) -#define USB_IOCTL_UMS_INIT (UMS_BASE+0x1) -#define USB_IOCTL_UMS_GET_CAPACITY (UMS_BASE+0x2) -#define USB_IOCTL_UMS_READ_SECTORS (UMS_BASE+0x3) -#define USB_IOCTL_UMS_WRITE_SECTORS (UMS_BASE+0x4) -#define USB_IOCTL_UMS_READ_STRESS (UMS_BASE+0x5) -#define USB_IOCTL_UMS_SET_VERBOSE (UMS_BASE+0x6) - -#define UMS_HEAPSIZE 0x8000 - -/* Variables */ -static char fs[] ATTRIBUTE_ALIGN(32) = "/dev/usb/ehc"; - -static s32 hid = -1, fd = -1; -static u32 sector_size; - - -inline s32 __USBStorage_isMEM2Buffer(const void *buffer) -{ - u32 high_addr = ((u32)buffer) >> 24; - - return (high_addr == 0x90) || (high_addr == 0xD0); -} - - -s32 USBStorage_GetCapacity(u32 *_sector_size) -{ - if (fd > 0) { - s32 ret; - - ret = IOS_IoctlvFormat(hid, fd, USB_IOCTL_UMS_GET_CAPACITY, ":i", §or_size); - - if (ret && _sector_size) - *_sector_size = sector_size; - - return ret; - } - - return IPC_ENOENT; -} - -s32 USBStorage_Init(void) -{ - s32 ret; - - /* Already open */ - if (fd > 0) - return 0; - - /* Create heap */ - if (hid < 0) { - hid = iosCreateHeap(UMS_HEAPSIZE); - if (hid < 0) - return IPC_ENOMEM; - } - - /* Open USB device */ - fd = IOS_Open(fs, 0); - if (fd < 0) - return fd; - - /* Initialize USB storage */ - IOS_IoctlvFormat(hid, fd, USB_IOCTL_UMS_INIT, ":"); - - /* Get device capacity */ - ret = USBStorage_GetCapacity(NULL); - if (!ret) - goto err; - - return 0; - -err: - /* Close USB device */ - if (fd > 0) { - IOS_Close(fd); - fd = -1; - } - - return -1; -} - -void USBStorage_Deinit(void) -{ - /* Close USB device */ - if (fd > 0) { - IOS_Close(fd); - fd = -1; - } -} - -s32 USBStorage_ReadSectors(u32 sector, u32 numSectors, void *buffer) -{ - void *buf = (void *)buffer; - u32 len = (sector_size * numSectors); - - s32 ret; - - /* Device not opened */ - if (fd < 0) - return fd; - - /* MEM1 buffer */ - if (!__USBStorage_isMEM2Buffer(buffer)) { - /* Allocate memory */ - buf = iosAlloc(hid, len); - if (!buf) - return IPC_ENOMEM; - } - - /* Read data */ - ret = IOS_IoctlvFormat(hid, fd, USB_IOCTL_UMS_READ_SECTORS, "ii:d", sector, numSectors, buf, len); - - /* Copy data */ - if (buf != buffer) { - memcpy(buffer, buf, len); - iosFree(hid, buf); - } - - return ret; -} - -s32 USBStorage_WriteSectors(u32 sector, u32 numSectors, const void *buffer) -{ - void *buf = (void *)buffer; - u32 len = (sector_size * numSectors); - - s32 ret; - - /* Device not opened */ - if (fd < 0) - return fd; - - /* MEM1 buffer */ - if (!__USBStorage_isMEM2Buffer(buffer)) { - /* Allocate memory */ - buf = iosAlloc(hid, len); - if (!buf) - return IPC_ENOMEM; - - /* Copy data */ - memcpy(buf, buffer, len); - } - - /* Write data */ - ret = IOS_IoctlvFormat(hid, fd, USB_IOCTL_UMS_WRITE_SECTORS, "ii:d", sector, numSectors, buf, len); - - /* Free memory */ - if (buf != buffer) - iosFree(hid, buf); - - return ret; -} diff --git a/source/usbstorage.h b/source/usbstorage.h deleted file mode 100644 index ed6fc2e2..00000000 --- a/source/usbstorage.h +++ /dev/null @@ -1,19 +0,0 @@ -#ifndef _USBSTORAGE_H_ -#define _USBSTORAGE_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif -/* Prototypes */ -s32 USBStorage_GetCapacity(u32 *); -s32 USBStorage_Init(void); -void USBStorage_Deinit(void); -s32 USBStorage_ReadSectors(u32, u32, void *); -s32 USBStorage_WriteSectors(u32, u32, void *); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/source/utils.c b/source/utils.c deleted file mode 100644 index a29f37e3..00000000 --- a/source/utils.c +++ /dev/null @@ -1,8 +0,0 @@ -#include -#include - - -u32 swap32(u32 x) -{ - return (x >> 24) | ((x << 8) & 0x00FF0000UL) | ((x >> 8) & 0x0000FF00UL) | (x << 24); -} diff --git a/source/utils.h b/source/utils.h deleted file mode 100644 index 3a4862bf..00000000 --- a/source/utils.h +++ /dev/null @@ -1,15 +0,0 @@ -#ifndef _UTILS_H_ -#define _UTILS_H_ - -/* Constants */ -#define KB_SIZE 1024.0 -#define MB_SIZE 1048576.0 -#define GB_SIZE 1073741824.0 - -/* Macros */ -#define round_up(x,n) (-(-(x) & -(n))) - -/* Prototypes */ -u32 swap32(u32); - -#endif diff --git a/source/video.cpp b/source/video.cpp index 714bec3c..0c2deb22 100644 --- a/source/video.cpp +++ b/source/video.cpp @@ -12,12 +12,7 @@ #include #include #include -#include - -#include "input.h" -#include "libwiigui/gui.h" - -#include "cfg.h" +#include #define DEFAULT_FIFO_SIZE 256 * 1024 static unsigned int *xfb[2] = { NULL, NULL }; // Double buffered @@ -25,42 +20,6 @@ static int whichfb = 0; // Switch static GXRModeObj *vmode; // Menu video mode static unsigned char gp_fifo[DEFAULT_FIFO_SIZE] ATTRIBUTE_ALIGN (32); static Mtx GXmodelView2D; -int screenheight; -int screenwidth; -u32 frameCount = 0; - -/**************************************************************************** - * UpdatePadsCB - * - * called by postRetraceCallback in InitGCVideo - scans gcpad and wpad - ***************************************************************************/ -static void -UpdatePadsCB () -{ - frameCount++; - #ifdef HW_RVL - WPAD_ScanPads(); - #endif - PAD_ScanPads(); - - for(int i=3; i >= 0; i--) - { - #ifdef HW_RVL - memcpy(&userInput[i].wpad, WPAD_Data(i), sizeof(WPADData)); - #endif - - userInput[i].chan = i; - userInput[i].pad.btns_d = PAD_ButtonsDown(i); - userInput[i].pad.btns_u = PAD_ButtonsUp(i); - userInput[i].pad.btns_h = PAD_ButtonsHeld(i); - userInput[i].pad.stickX = PAD_StickX(i); - userInput[i].pad.stickY = PAD_StickY(i); - userInput[i].pad.substickX = PAD_SubStickX(i); - userInput[i].pad.substickY = PAD_SubStickY(i); - userInput[i].pad.triggerL = PAD_TriggerL(i); - userInput[i].pad.triggerR = PAD_TriggerR(i); - } -} /**************************************************************************** * StartGX @@ -167,18 +126,8 @@ InitVideo () VIDEO_Init(); vmode = VIDEO_GetPreferredMode(NULL); // get default video mode - // widescreen fix - if(CFG.widescreen) - { - vmode->viWidth = VI_MAX_WIDTH_PAL-12; - vmode->viXOrigin = ((VI_MAX_WIDTH_PAL - vmode->viWidth) / 2) + 2; - } - VIDEO_Configure (vmode); - screenheight = 480; - screenwidth = vmode->fbWidth; - // Allocate the video buffers xfb[0] = (u32 *) MEM_K0_TO_K1 (SYS_AllocateFramebuffer (vmode)); xfb[1] = (u32 *) MEM_K0_TO_K1 (SYS_AllocateFramebuffer (vmode)); @@ -191,9 +140,6 @@ InitVideo () VIDEO_ClearFrameBuffer (vmode, xfb[1], COLOR_BLACK); VIDEO_SetNextFramebuffer (xfb[0]); - // video callback - VIDEO_SetPostRetraceCallback ((VIRetraceCallback)UpdatePadsCB); - VIDEO_SetBlack (FALSE); VIDEO_Flush (); VIDEO_WaitVSync (); @@ -264,7 +210,6 @@ void Menu_DrawImg(f32 xpos, f32 ypos, f32 zpos, u16 width, u16 height, u8 data[] guMtxScaleApply(m1,m1,scaleX,scaleY,1.0); Vector axis = (Vector) {0 , 0, 1 }; guMtxRotAxisDeg (m2, &axis, degrees); -// guMtxConcat(m2,m1,m); guMtxConcat(m1,m2,m); guMtxTransApply(m,m, xpos+width+0.5,ypos+height+0.5,zpos); @@ -292,132 +237,4 @@ void Menu_DrawImg(f32 xpos, f32 ypos, f32 zpos, u16 width, u16 height, u8 data[] GX_SetTevOp (GX_TEVSTAGE0, GX_PASSCLR); GX_SetVtxDesc (GX_VA_TEX0, GX_NONE); -} - -/**************************************************************************** - * Menu_DrawRectangle - * - * Draws a rectangle at the specified coordinates using GX - ***************************************************************************/ -void Menu_DrawRectangle(f32 x, f32 y, f32 width, f32 height, GXColor color, u8 filled) -{ - u8 fmt; - long n; - int i; - f32 x2 = x+width; - f32 y2 = y+height; - Vector v[] = {{x,y,0.0f}, {x2,y,0.0f}, {x2,y2,0.0f}, {x,y2,0.0f}, {x,y,0.0f}}; - - if(!filled) - { - fmt = GX_LINESTRIP; - n = 5; - } - else - { - fmt = GX_TRIANGLEFAN; - n = 4; - } - - GX_Begin(fmt, GX_VTXFMT0, n); - for(i=0; i -#include - -#include "sys.h" -#include "video2.h" - -/* Video variables */ -static void *framebuffer = NULL; -static GXRModeObj *vmode = NULL; - - -void Con_Init(u32 x, u32 y, u32 w, u32 h) -{ - /* Create console in the framebuffer */ - CON_InitEx(vmode, x, y, w, h); -} - -void Con_Clear(void) -{ - /* Clear console */ - printf("\x1b[2J"); - fflush(stdout); -} - -void Con_ClearLine(void) -{ - s32 cols, rows; - u32 cnt; - - printf("\r"); - fflush(stdout); - - /* Get console metrics */ - CON_GetMetrics(&cols, &rows); - - /* Erase line */ - for (cnt = 1; cnt < cols; cnt++) { - printf(" "); - fflush(stdout); - } - - printf("\r"); - fflush(stdout); -} - -void Con_FgColor(u32 color, u8 bold) -{ - /* Set foreground color */ - printf("\x1b[%u;%um", color + 30, bold); - fflush(stdout); -} - -void Con_BgColor(u32 color, u8 bold) -{ - /* Set background color */ - printf("\x1b[%u;%um", color + 40, bold); - fflush(stdout); -} - -void Con_FillRow(u32 row, u32 color, u8 bold) -{ - s32 cols, rows; - u32 cnt; - - /* Set color */ - printf("\x1b[%u;%um", color + 40, bold); - fflush(stdout); - - /* Get console metrics */ - CON_GetMetrics(&cols, &rows); - - /* Save current row and col */ - printf("\x1b[s"); - fflush(stdout); - - /* Move to specified row */ - printf("\x1b[%u;0H", row); - fflush(stdout); - - /* Fill row */ - for (cnt = 0; cnt < cols; cnt++) { - printf(" "); - fflush(stdout); - } - - /* Load saved row and col */ - printf("\x1b[u"); - fflush(stdout); - - /* Set default color */ - Con_BgColor(0, 0); - Con_FgColor(7, 1); -} - -void Video_Configure(GXRModeObj *rmode) -{ - /* Configure the video subsystem */ - VIDEO_Configure(rmode); - - /* Setup video */ - VIDEO_SetBlack(FALSE); - VIDEO_Flush(); - VIDEO_WaitVSync(); - - if (rmode->viTVMode & VI_NON_INTERLACE) - VIDEO_WaitVSync(); -} - -void Video_SetMode(void) -{ - /* Select preferred video mode */ - vmode = VIDEO_GetPreferredMode(NULL); - - /* Allocate memory for the framebuffer */ - framebuffer = MEM_K0_TO_K1(SYS_AllocateFramebuffer(vmode)); - - /* Configure the video subsystem */ - VIDEO_Configure(vmode); - - /* Setup video */ - VIDEO_SetNextFramebuffer(framebuffer); - VIDEO_SetBlack(FALSE); - VIDEO_Flush(); - VIDEO_WaitVSync(); - - if (vmode->viTVMode & VI_NON_INTERLACE) - VIDEO_WaitVSync(); - - /* Clear the screen */ - Video_Clear(COLOR_BLACK); -} - -void Video_Clear(s32 color) -{ - VIDEO_ClearFrameBuffer(vmode, framebuffer, color); -} diff --git a/source/video2.h b/source/video2.h deleted file mode 100644 index 01c5b04e..00000000 --- a/source/video2.h +++ /dev/null @@ -1,25 +0,0 @@ -#ifndef _VIDEO2_H_ -#define _VIDEO2_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif - -/* Prototypes */ -void Con_Init(u32, u32, u32, u32); -void Con_Clear(void); -void Con_ClearLine(void); -void Con_FgColor(u32, u8); -void Con_BgColor(u32, u8); -void Con_FillRow(u32, u32, u8); - -void Video_Configure(GXRModeObj *); -void Video_SetMode(void); -void Video_Clear(s32); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/source/wbfs.c b/source/wbfs.c deleted file mode 100644 index f612a8ae..00000000 --- a/source/wbfs.c +++ /dev/null @@ -1,531 +0,0 @@ -#include -#include -#include -#include -#include - -#include "sdhc.h" -#include "usbstorage.h" -#include "utils.h" -#include "video.h" -#include "wdvd.h" -#include "wbfs.h" - -#include "libwbfs/libwbfs.h" - -/* Constants */ -#define MAX_NB_SECTORS 32 - -/* WBFS HDD */ -static wbfs_t *hdd = NULL; - -/* WBFS callbacks */ -static rw_sector_callback_t readCallback = NULL; -static rw_sector_callback_t writeCallback = NULL; - -/* Variables */ - -static u32 nb_sectors, sector_size; -void __WBFS_Spinner(s32 x, s32 max) -{ - static time_t start; - static u32 expected; - - f32 percent, size; - u32 d, h, m, s; - - /* First time */ - if (!x) { - start = time(0); - expected = 300; - } - - /* Elapsed time */ - d = time(0) - start; - - if (x != max) { - /* Expected time */ - if (d) - expected = (expected * 3 + d * max / x) / 4; - - /* Remaining time */ - d = (expected > d) ? (expected - d) : 0; - } - - /* Calculate time values */ - h = d / 3600; - m = (d / 60) % 60; - s = d % 60; - - /* Calculate percentage/size */ - percent = (x * 100.0) / max; - size = (hdd->wii_sec_sz / GB_SIZE) * max; - - //Con_ClearLine(); - - /* Show progress */ - if (x != max) { - printf(" %.2f%% of %.2fGB (%c) ETA: %d:%02d:%02d\r", percent, size, "/|\\-"[(x / 10) % 4], h, m, s); - fflush(stdout); - } else - printf(" %.2fGB copied in %d:%02d:%02d\n", size, h, m, s); -} - -wbfs_t *GetHddInfo(void) -{ - return hdd; -} - -s32 __WBFS_ReadDVD(void *fp, u32 lba, u32 len, void *iobuf) -{ - void *buffer = NULL; - - u64 offset; - u32 mod, size; - s32 ret; - - /* Calculate offset */ - offset = ((u64)lba) << 2; - - /* Calcualte sizes */ - mod = len % 32; - size = len - mod; - - /* Read aligned data */ - if (size) { - ret = WDVD_UnencryptedRead(iobuf, size, offset); - if (ret < 0) - goto out; - } - - /* Read non-aligned data */ - if (mod) { - /* Allocate memory */ - buffer = memalign(32, 0x20); - if (!buffer) - return -1; - - /* Read data */ - ret = WDVD_UnencryptedRead(buffer, 0x20, offset + size); - if (ret < 0) - goto out; - - /* Copy data */ - memcpy(iobuf + size, buffer, mod); - } - - /* Success */ - ret = 0; - -out: - /* Free memory */ - if (buffer) - free(buffer); - - return ret; -} - -s32 __WBFS_ReadUSB(void *fp, u32 lba, u32 count, void *iobuf) -{ - u32 cnt = 0; - s32 ret; - - /* Do reads */ - while (cnt < count) { - void *ptr = ((u8 *)iobuf) + (cnt * sector_size); - u32 sectors = (count - cnt); - - /* Read sectors is too big */ - if (sectors > MAX_NB_SECTORS) - sectors = MAX_NB_SECTORS; - - /* USB read */ - ret = USBStorage_ReadSectors(lba + cnt, sectors, ptr); - if (ret < 0) - return ret; - - /* Increment counter */ - cnt += sectors; - } - - return 0; -} - -s32 __WBFS_WriteUSB(void *fp, u32 lba, u32 count, void *iobuf) -{ - u32 cnt = 0; - s32 ret; - - /* Do writes */ - while (cnt < count) { - void *ptr = ((u8 *)iobuf) + (cnt * sector_size); - u32 sectors = (count - cnt); - - /* Write sectors is too big */ - if (sectors > MAX_NB_SECTORS) - sectors = MAX_NB_SECTORS; - - /* USB write */ - ret = USBStorage_WriteSectors(lba + cnt, sectors, ptr); - if (ret < 0) - return ret; - - /* Increment counter */ - cnt += sectors; - } - - return 0; -} - -s32 __WBFS_ReadSDHC(void *fp, u32 lba, u32 count, void *iobuf) -{ - u32 cnt = 0; - s32 ret; - - /* Do reads */ - while (cnt < count) { - void *ptr = ((u8 *)iobuf) + (cnt * sector_size); - u32 sectors = (count - cnt); - - /* Read sectors is too big */ - if (sectors > MAX_NB_SECTORS) - sectors = MAX_NB_SECTORS; - - /* SDHC read */ - ret = SDHC_ReadSectors(lba + cnt, sectors, ptr); - if (!ret) - return -1; - - /* Increment counter */ - cnt += sectors; - } - - return 0; -} - -s32 __WBFS_WriteSDHC(void *fp, u32 lba, u32 count, void *iobuf) -{ - u32 cnt = 0; - s32 ret; - - /* Do writes */ - while (cnt < count) { - void *ptr = ((u8 *)iobuf) + (cnt * sector_size); - u32 sectors = (count - cnt); - - /* Write sectors is too big */ - if (sectors > MAX_NB_SECTORS) - sectors = MAX_NB_SECTORS; - - /* SDHC write */ - ret = SDHC_WriteSectors(lba + cnt, sectors, ptr); - if (!ret) - return -1; - - /* Increment counter */ - cnt += sectors; - } - - return 0; -} - -s32 WBFS_Init(u32 device) -{ - s32 ret; - - switch (device) { - case WBFS_DEVICE_USB: - /* Initialize USB storage */ - ret = USBStorage_Init(); - if (ret >= 0) { - /* Setup callbacks */ - readCallback = __WBFS_ReadUSB; - writeCallback = __WBFS_WriteUSB; - /* Device info */ - /* Get USB capacity */ - nb_sectors = USBStorage_GetCapacity(§or_size); - if (!nb_sectors) - return -1; - } - else - return ret; - break; - case WBFS_DEVICE_SDHC: - /* Initialize SDHC */ - ret = SDHC_Init(); - - if (ret) { - /* Setup callbacks */ - readCallback = __WBFS_ReadSDHC; - writeCallback = __WBFS_WriteSDHC; - - /* Device info */ - nb_sectors = 0; - sector_size = SDHC_SECTOR_SIZE; - } - else - return -1; - break; - } - - return 0; -} -//s32 WBFS_Init(void) -//{ -// s32 ret; -// -// /* Initialize USB storage */ -// ret = USBStorage_Init(); -// if (ret < 0) -// return ret; -// -// /* Get USB capacity */ -// nb_sectors = USBStorage_GetCapacity(§or_size); -// if (!nb_sectors) -// return -1; -// -// return 0; -//} - -/* -s32 WBFS_Init(u32 device, u32 timeout) -{ - u32 cnt; - s32 ret; - - // Wrong timeout - if (!timeout) - return -1; - - // Try to mount device - for (cnt = 0; cnt < timeout; cnt++) { - switch (device) { - case WBFS_DEVICE_USB: { - // Initialize USB storage - ret = USBStorage_Init(); - - if (ret >= 0) { - // Setup callbacks - readCallback = __WBFS_ReadUSB; - writeCallback = __WBFS_WriteUSB; - - // Device info - nb_sectors = USBStorage_GetCapacity(§or_size); - - goto out; - } - } - - case WBFS_DEVICE_SDHC: { - // Initialize SDHC - ret = SDHC_Init(); - - if (ret) { - // Setup callbacks - readCallback = __WBFS_ReadSDHC; - writeCallback = __WBFS_WriteSDHC; - - // Device info - nb_sectors = 0; - sector_size = SDHC_SECTOR_SIZE; - - goto out; - } else - ret = -1; - } - - default: - return -1; - } - - // Sleep 1 second - sleep(1); - } - -out: - return ret; -} -*/ - -s32 WBFS_Open(void) -{ - /* Close hard disk */ - if (hdd) - wbfs_close(hdd); - - /* Open hard disk */ - hdd = wbfs_open_hd(readCallback, writeCallback, NULL, sector_size, nb_sectors, 0); - if (!hdd) - return -1; - - return 0; -} - -s32 WBFS_Close(void) - -{ - /* Close hard disk */ - if (hdd) - wbfs_close(hdd); - - return 0; -} - -s32 WBFS_Format(u32 lba, u32 size) -{ - wbfs_t *partition = NULL; - - /* Reset partition */ - partition = wbfs_open_partition(readCallback, writeCallback, NULL, sector_size, size, lba, 1); - if (!partition) - return -1; - - /* Free memory */ - wbfs_close(partition); - - return 0; -} - -s32 WBFS_GetCount(u32 *count) -{ - /* No device open */ - if (!hdd) - return -1; - - /* Get list length */ - *count = wbfs_count_discs(hdd); - - return 0; -} - -s32 WBFS_GetHeaders(void *outbuf, u32 cnt, u32 len) -{ - u32 idx, size; - s32 ret; - - /* No device open */ - if (!hdd) - return -1; - - for (idx = 0; idx < cnt; idx++) { - u8 *ptr = ((u8 *)outbuf) + (idx * len); - - /* Get header */ - ret = wbfs_get_disc_info(hdd, idx, ptr, len, &size); - if (ret < 0) - return ret; - } - - return 0; -} - -s32 WBFS_CheckGame(u8 *discid) -{ - wbfs_disc_t *disc = NULL; - - /* Try to open game disc */ - disc = wbfs_open_disc(hdd, discid); - if (disc) { - /* Close disc */ - wbfs_close_disc(disc); - - return 1; - } - - return 0; -} - -s32 WBFS_AddGame(void) -{ - s32 ret; - - /* No device open */ - if (!hdd) - return -1; - - /* Add game to device */ - ret = wbfs_add_disc(hdd, __WBFS_ReadDVD, NULL, __WBFS_Spinner, ALL_PARTITIONS, 0); - if (ret < 0) - return ret; - - return 0; -} - -s32 WBFS_RemoveGame(u8 *discid) -{ - s32 ret; - - /* No device open */ - if (!hdd) - return -1; - - /* Remove game from USB device */ - ret = wbfs_rm_disc(hdd, discid); - if (ret < 0) - return ret; - - return 0; -} - -s32 WBFS_GameSize(u8 *discid, f32 *size) -{ - wbfs_disc_t *disc = NULL; - - u32 sectors; - - /* No device open */ - if (!hdd) - return -1; - - /* Open disc */ - disc = wbfs_open_disc(hdd, discid); - if (!disc) - return -2; - - /* Get game size in sectors */ - sectors = wbfs_sector_used(hdd, disc->header); - - /* Close disc */ - wbfs_close_disc(disc); - - /* Copy value */ - *size = (hdd->wbfs_sec_sz / GB_SIZE) * sectors; - - return 0; -} - -s32 WBFS_DiskSpace(f32 *used, f32 *free) -{ - f32 ssize; - u32 cnt; - - /* No device open */ - if (!hdd) - return -1; - - /* Count used blocks */ - cnt = wbfs_count_usedblocks(hdd); - - /* Sector size in GB */ - ssize = hdd->wbfs_sec_sz / GB_SIZE; - - /* Copy values */ - *free = ssize * cnt; - *used = ssize * (hdd->n_wbfs_sec - cnt); - - return 0; -} - -s32 WBFS_RenameGame(u8 *discid, const void *newname) -{ - s32 ret; - - /* No USB device open */ - if (!hdd) - return -1; - ret = wbfs_ren_disc(hdd, discid,(u8*)newname); - if (ret < 0) - return ret; - - return 0; -} diff --git a/source/wbfs.h b/source/wbfs.h deleted file mode 100644 index 13ef6481..00000000 --- a/source/wbfs.h +++ /dev/null @@ -1,41 +0,0 @@ -#ifndef _WBFS_H_ -#define _WBFS_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif - -#include "libwbfs/libwbfs.h" -/* Device list */ -enum { - WBFS_DEVICE_USB = 1, /* USB device */ - WBFS_DEVICE_SDHC /* SDHC device */ -}; - -/* Macros */ -#define WBFS_MIN_DEVICE 1 -#define WBFS_MAX_DEVICE 2 - -/* Prototypes */ - -s32 WBFS_Init(u32); -s32 WBFS_Open(void); -s32 WBFS_Close(void); -s32 WBFS_Format(u32, u32); -s32 WBFS_GetCount(u32 *); -s32 WBFS_GetHeaders(void *, u32, u32); -s32 __WBFS_ReadDVD(void *fp, u32 lba, u32 len, void *iobuf); -wbfs_t *GetHddInfo(void); -s32 WBFS_CheckGame(u8 *); -s32 WBFS_AddGame(void); -s32 WBFS_RemoveGame(u8 *); -s32 WBFS_GameSize(u8 *, f32 *); -s32 WBFS_DiskSpace(f32 *, f32 *); -s32 WBFS_RenameGame(u8 *, const void *); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/source/wdvd.c b/source/wdvd.c deleted file mode 100644 index 352ae5ba..00000000 --- a/source/wdvd.c +++ /dev/null @@ -1,338 +0,0 @@ -#include -#include -#include -#include - -/* Constants */ -#define IOCTL_DI_READID 0x70 -#define IOCTL_DI_READ 0x71 -#define IOCTL_DI_WAITCVRCLOSE 0x79 -#define IOCTL_DI_GETCOVER 0x88 -#define IOCTL_DI_RESET 0x8A -#define IOCTL_DI_OPENPART 0x8B -#define IOCTL_DI_CLOSEPART 0x8C -#define IOCTL_DI_UNENCREAD 0x8D -#define IOCTL_DI_SEEK 0xAB -#define IOCTL_DI_STOPLASER 0xD2 -#define IOCTL_DI_OFFSET 0xD9 -#define IOCTL_DI_STOPMOTOR 0xE3 -#define IOCTL_DI_SETUSBMODE 0xF4 -#define IOCTL_DI_SETWBFSMODE 0xfe -#define IOCTL_DI_DISABLERESET 0xF6 - -/* Variables */ -static u32 inbuf[8] ATTRIBUTE_ALIGN(32); -static u32 outbuf[8] ATTRIBUTE_ALIGN(32); - -static const char di_fs[] ATTRIBUTE_ALIGN(32) = "/dev/di"; -static s32 di_fd = -1; - - -s32 WDVD_Init(void) -{ - /* Open "/dev/di" */ - if (di_fd < 0) { - di_fd = IOS_Open(di_fs, 0); - if (di_fd < 0) - return di_fd; - } - - return 0; -} - -s32 WDVD_Close(void) -{ - /* Close "/dev/di" */ - if (di_fd >= 0) { - IOS_Close(di_fd); - di_fd = -1; - } - - return 0; -} - -s32 WDVD_GetHandle(void) -{ - /* Return di handle */ - return di_fd; -} - -s32 WDVD_Reset(void) -{ - s32 ret; - - memset(inbuf, 0, sizeof(inbuf)); - - /* Reset drive */ - inbuf[0] = IOCTL_DI_RESET << 24; - inbuf[1] = 1; - - ret = IOS_Ioctl(di_fd, IOCTL_DI_RESET, inbuf, sizeof(inbuf), outbuf, sizeof(outbuf)); - if (ret < 0) - return ret; - - return (ret == 1) ? 0 : -ret; -} - -s32 WDVD_ReadDiskId(void *id) -{ - s32 ret; - - memset(inbuf, 0, sizeof(inbuf)); - - /* Read disc ID */ - inbuf[0] = IOCTL_DI_READID << 24; - - ret = IOS_Ioctl(di_fd, IOCTL_DI_READID, inbuf, sizeof(inbuf), outbuf, sizeof(outbuf)); - if (ret < 0) - return ret; - - if (ret == 1) { - memcpy(id, outbuf, sizeof(dvddiskid)); - return 0; - } - - return -ret; -} - -s32 WDVD_Seek(u64 offset) -{ - s32 ret; - - memset(inbuf, 0, sizeof(inbuf)); - - /* Drive seek */ - inbuf[0] = IOCTL_DI_SEEK << 24; - inbuf[1] = (u32)(offset >> 2); - - ret = IOS_Ioctl(di_fd, IOCTL_DI_SEEK, inbuf, sizeof(inbuf), outbuf, sizeof(outbuf)); - if (ret < 0) - return ret; - - return (ret == 1) ? 0 : -ret; - -} - -s32 WDVD_Offset(u64 offset) -{ - u32 *off = (u32 *)((void *)&offset); - s32 ret; - - memset(inbuf, 0, sizeof(inbuf)); - - /* Set offset */ - inbuf[0] = IOCTL_DI_OFFSET << 24; - inbuf[1] = (off[0]) ? 1: 0; - inbuf[2] = (off[1] >> 2); - - ret = IOS_Ioctl(di_fd, IOCTL_DI_OFFSET, inbuf, sizeof(inbuf), outbuf, sizeof(outbuf)); - if (ret < 0) - return ret; - - return (ret == 1) ? 0 : -ret; -} - -s32 WDVD_StopLaser(void) -{ - s32 ret; - - memset(inbuf, 0, sizeof(inbuf)); - - /* Stop laser */ - inbuf[0] = IOCTL_DI_STOPLASER << 24; - - ret = IOS_Ioctl(di_fd, IOCTL_DI_STOPLASER, inbuf, sizeof(inbuf), outbuf, sizeof(outbuf)); - if (ret < 0) - return ret; - - return (ret == 1) ? 0 : -ret; -} - -s32 WDVD_StopMotor(void) -{ - s32 ret; - - memset(inbuf, 0, sizeof(inbuf)); - - /* Stop motor */ - inbuf[0] = IOCTL_DI_STOPMOTOR << 24; - - ret = IOS_Ioctl(di_fd, IOCTL_DI_STOPMOTOR, inbuf, sizeof(inbuf), outbuf, sizeof(outbuf)); - if (ret < 0) - return ret; - - return (ret == 1) ? 0 : -ret; -} - -s32 WDVD_OpenPartition(u64 offset) -{ - u8 *vector = NULL; - - u32 *buffer = NULL; - s32 ret; - - /* Allocate memory */ - buffer = (u32 *)memalign(32, 0x5000); - if (!buffer) - return -1; - - /* Set vector pointer */ - vector = (u8 *)buffer; - - memset(buffer, 0, 0x5000); - - /* Open partition */ - buffer[0] = (u32)(buffer + 0x10); - buffer[1] = 0x20; - buffer[3] = 0x024A; - buffer[6] = (u32)(buffer + 0x380); - buffer[7] = 0x49E4; - buffer[8] = (u32)(buffer + 0x360); - buffer[9] = 0x20; - - buffer[(0x40 >> 2)] = IOCTL_DI_OPENPART << 24; - buffer[(0x40 >> 2) + 1] = offset >> 2; - - ret = IOS_Ioctlv(di_fd, IOCTL_DI_OPENPART, 3, 2, (ioctlv *)vector); - - /* Free memory */ - free(buffer); - - if (ret < 0) - return ret; - - return (ret == 1) ? 0 : -ret; -} - -s32 WDVD_ClosePartition(void) -{ - s32 ret; - - memset(inbuf, 0, sizeof(inbuf)); - - /* Close partition */ - inbuf[0] = IOCTL_DI_CLOSEPART << 24; - - ret = IOS_Ioctl(di_fd, IOCTL_DI_CLOSEPART, inbuf, sizeof(inbuf), NULL, 0); - if (ret < 0) - return ret; - - return (ret == 1) ? 0 : -ret; -} - -s32 WDVD_UnencryptedRead(void *buf, u32 len, u64 offset) -{ - s32 ret; - - memset(inbuf, 0, sizeof(inbuf)); - - /* Unencrypted read */ - inbuf[0] = IOCTL_DI_UNENCREAD << 24; - inbuf[1] = len; - inbuf[2] = (u32)(offset >> 2); - - ret = IOS_Ioctl(di_fd, IOCTL_DI_UNENCREAD, inbuf, sizeof(inbuf), buf, len); - if (ret < 0) - return ret; - - return (ret == 1) ? 0 : -ret; -} - -s32 WDVD_Read(void *buf, u32 len, u64 offset) -{ - s32 ret; - - memset(inbuf, 0, sizeof(inbuf)); - - /* Disc read */ - inbuf[0] = IOCTL_DI_READ << 24; - inbuf[1] = len; - inbuf[2] = (u32)(offset >> 2); - - ret = IOS_Ioctl(di_fd, IOCTL_DI_READ, inbuf, sizeof(inbuf), buf, len); - if (ret < 0) - return ret; - - return (ret == 1) ? 0 : -ret; -} - -s32 WDVD_WaitForDisc(void) -{ - s32 ret; - - memset(inbuf, 0, sizeof(inbuf)); - - /* Wait for disc */ - inbuf[0] = IOCTL_DI_WAITCVRCLOSE << 24; - - ret = IOS_Ioctl(di_fd, IOCTL_DI_WAITCVRCLOSE, inbuf, sizeof(inbuf), outbuf, sizeof(outbuf)); - if (ret < 0) - return ret; - - return (ret == 1) ? 0 : -ret; -} - -s32 WDVD_GetCoverStatus(u32 *status) -{ - s32 ret; - - memset(inbuf, 0, sizeof(inbuf)); - - /* Get cover status */ - inbuf[0] = IOCTL_DI_GETCOVER << 24; - - ret = IOS_Ioctl(di_fd, IOCTL_DI_GETCOVER, inbuf, sizeof(inbuf), outbuf, sizeof(outbuf)); - if (ret < 0) - return ret; - - if (ret == 1) { - /* Copy cover status */ - memcpy(status, outbuf, sizeof(u32)); - - return 0; - } - - return -ret; -} - -s32 WDVD_DisableReset(u8 val) -{ - s32 ret; - - memset(inbuf, 0, sizeof(inbuf)); - - /* Disable/Enable reset */ - inbuf[0] = IOCTL_DI_DISABLERESET << 24; - inbuf[1] = val; - - ret = IOS_Ioctl(di_fd, IOCTL_DI_DISABLERESET, inbuf, sizeof(inbuf), outbuf, sizeof(outbuf)); - if (ret < 0) - return ret; - - return (ret == 1) ? 0 : -ret; -} - -s32 WDVD_SetUSBMode(u8 *id, int ios222) -{ - s32 ret; - - memset(inbuf, 0, sizeof(inbuf)); - - /* Set USB mode */ - if(ios222 == 1) { - inbuf[0] = IOCTL_DI_SETWBFSMODE << 24; - } else { - inbuf[0] = IOCTL_DI_SETUSBMODE << 24; - } - inbuf[1] = (id) ? 1 : 0; - - /* Copy ID */ - if (id) - memcpy(&inbuf[2], id, 6); - - ret = IOS_Ioctl(di_fd, IOCTL_DI_SETUSBMODE, inbuf, sizeof(inbuf), outbuf, sizeof(outbuf)); - if (ret < 0) - return ret; - - return (ret == 1) ? 0 : -ret; -} diff --git a/source/wdvd.h b/source/wdvd.h deleted file mode 100644 index a36c15b9..00000000 --- a/source/wdvd.h +++ /dev/null @@ -1,33 +0,0 @@ -#ifndef _WDVD_H_ -#define _WDVD_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif - -/* Prototypes */ -s32 WDVD_Init(void); -s32 WDVD_Close(void); -s32 WDVD_GetHandle(void); -s32 WDVD_Reset(void); -s32 WDVD_ReadDiskId(void *); -s32 WDVD_Seek(u64); -s32 WDVD_Offset(u64); -s32 WDVD_StopLaser(void); -s32 WDVD_StopMotor(void); -s32 WDVD_OpenPartition(u64); -s32 WDVD_ClosePartition(void); -s32 WDVD_UnencryptedRead(void *, u32, u64); -s32 WDVD_Read(void *, u32, u64); -s32 WDVD_WaitForDisc(void); -s32 WDVD_GetCoverStatus(u32 *); -s32 WDVD_DisableReset(u8); -s32 WDVD_SetUSBMode(u8 *, int ios222); - -#ifdef __cplusplus -} -#endif - -#endif - diff --git a/source/wpad.c b/source/wpad.c deleted file mode 100644 index 44f46840..00000000 --- a/source/wpad.c +++ /dev/null @@ -1,73 +0,0 @@ -#include -#include - -#include "sys.h" -#include "wpad.h" - -/* Constants */ -#define MAX_WIIMOTES 4 - -extern u8 shutdown; - -void __Wpad_PowerCallback(s32 chan) -{ - /* Poweroff console */ - shutdown = 1; -} - - -s32 Wpad_Init(void) -{ - s32 ret; - - /* Initialize Wiimote subsystem */ - ret = WPAD_Init(); - if (ret < 0) - return ret; - - /* Set POWER button callback */ - WPAD_SetPowerButtonCallback(__Wpad_PowerCallback); - - return ret; -} - -void Wpad_Disconnect(void) -{ - u32 cnt; - - /* Disconnect Wiimotes */ - for (cnt = 0; cnt < MAX_WIIMOTES; cnt++) - WPAD_Disconnect(cnt); - - /* Shutdown Wiimote subsystem */ - WPAD_Shutdown(); -} - -u32 Wpad_GetButtons(void) -{ - u32 buttons = 0, cnt; - - /* Scan pads */ - WPAD_ScanPads(); - - /* Get pressed buttons */ - for (cnt = 0; cnt < MAX_WIIMOTES; cnt++) - buttons |= WPAD_ButtonsDown(cnt); - - return buttons; -} - -u32 Wpad_WaitButtons(void) -{ - u32 buttons = 0; - - /* Wait for button pressing */ - while (!buttons) { - buttons = Wpad_GetButtons(); - VIDEO_WaitVSync(); - } - - return buttons; -} - - diff --git a/source/wpad.h b/source/wpad.h deleted file mode 100644 index 6a541e91..00000000 --- a/source/wpad.h +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef _WPAD_H_ -#define _WPAD_H_ - -#include - -#ifdef __cplusplus -extern "C" -{ -#endif - -/* Prototypes */ -s32 Wpad_Init(void); -void Wpad_Disconnect(void); -u32 Wpad_GetButtons(void); -u32 Wpad_WaitButtons(void); - -#ifdef __cplusplus -} -#endif - -#endif