From d27dcc314baf9704c80588e59561697017de39f4 Mon Sep 17 00:00:00 2001 From: dimok321 <15055714+dimok789@users.noreply.github.com> Date: Sat, 30 May 2009 17:33:35 +0000 Subject: [PATCH] *Added Forwarder source to the Branch --- HBC/META.XML | 10 - HBC/icon.png | Bin 7944 -> 0 bytes Languages/danish | 173 - Languages/dutch | 171 - Languages/finnish | 171 - Languages/french | 210 - Languages/german | 178 - Languages/italian | 192 - Languages/japanese | 193 - Languages/korean | 171 - Languages/norwegian | 192 - Languages/portuguesept | 194 - Languages/russian | 186 - Languages/schinese | 178 - Languages/spanish | 194 - Languages/tchinese | 178 - Languages/turkish | 172 - Makefile | 301 +- gui.pnproj | 1 - gui.pnps | 1 - source/CH2Unicode.c | 3161 --------- source/CH2Unicode.h | 22 - source/FreeTypeGX.cpp | 791 --- source/FreeTypeGX.h | 272 - source/GB2Unicode.c | 997 --- source/GB2Unicode.h | 24 - source/apploader.c | 331 - source/apploader.h | 10 - source/audio.cpp | 35 - source/audio.h | 15 - source/cfg.c | 1523 ----- source/cfg.h | 359 - source/data1 | Bin 23026 -> 0 bytes source/disc.c | 390 -- source/disc.h | 57 - source/dns.c | 122 - source/dns.h | 23 - source/dolloader.c | 42 + source/dolloader.h | 39 + source/dvd_broadway.c | 612 -- source/dvd_broadway.h | 53 - source/elf_abi.h | 594 ++ source/elfloader.c | 103 + source/elfloader.h | 18 + source/fatmounter.c | 57 - source/fatmounter.h | 19 - source/filelist.h | 283 +- source/fonts/clock.ttf | Bin 4228 -> 0 bytes source/fonts/font.ttf | Bin 48364 -> 0 bytes source/fst.c | 115 - source/fst.h | 38 - source/fwrite_patch.h | 15 - source/geckomenu.h | 60 - source/http.c | 245 - source/http.h | 39 - source/images/abcIcon.png | Bin 1213 -> 0 bytes source/images/abcIcon_gray.png | Bin 813 -> 0 bytes source/images/arrangeCarousel.png | Bin 1674 -> 0 bytes source/images/arrangeCarousel_gray.png | Bin 1016 -> 0 bytes source/images/arrangeGrid.png | Bin 910 -> 0 bytes source/images/arrangeGrid_gray.png | Bin 760 -> 0 bytes source/images/arrangeList.png | Bin 913 -> 0 bytes source/images/arrangeList_gray.png | Bin 709 -> 0 bytes source/images/arrow_next.png | Bin 1765 -> 0 bytes source/images/arrow_previous.png | Bin 1767 -> 0 bytes source/images/background.png | Bin 50213 -> 116903 bytes source/images/battery.png | Bin 118 -> 0 bytes source/images/battery_bar.png | Bin 225 -> 0 bytes source/images/battery_bar_white.png | Bin 142 -> 0 bytes source/images/battery_red.png | Bin 138 -> 0 bytes source/images/battery_white.png | Bin 86 -> 0 bytes source/images/bg_options.png | Bin 1765 -> 0 bytes source/images/bg_options_entry.png | Bin 1106 -> 0 bytes source/images/bg_options_settings.png | Bin 7799 -> 0 bytes source/images/button_dialogue_box.png | Bin 2255 -> 0 bytes source/images/button_install.png | Bin 2372 -> 0 bytes source/images/button_install_over.png | Bin 2971 -> 0 bytes source/images/closebutton.png | Bin 4765 -> 0 bytes source/images/credits_bg.png | Bin 60180 -> 0 bytes source/images/credits_button.png | Bin 2897 -> 0 bytes source/images/credits_button_over.png | Bin 5039 -> 0 bytes source/images/dialogue_box.png | Bin 3834 -> 0 bytes source/images/dialogue_box_install.png | Bin 3397 -> 0 bytes source/images/dialogue_box_startgame.png | Bin 15834 -> 0 bytes source/images/exit_bottom.png | Bin 4820 -> 0 bytes source/images/exit_bottom_over.png | Bin 2815 -> 0 bytes source/images/exit_button.png | Bin 5488 -> 0 bytes source/images/exit_top.png | Bin 3254 -> 0 bytes source/images/exit_top_over.png | Bin 3485 -> 0 bytes source/images/favIcon.png | Bin 1553 -> 0 bytes source/images/favIcon_gray.png | Bin 983 -> 0 bytes source/images/favorite.png | Bin 4108 -> 0 bytes source/images/keyboard_key.png | Bin 609 -> 0 bytes source/images/keyboard_key_over.png | Bin 909 -> 0 bytes source/images/keyboard_largekey_over.png | Bin 1047 -> 0 bytes source/images/keyboard_mediumkey_over.png | Bin 992 -> 0 bytes source/images/keyboard_textbox.png | Bin 823 -> 0 bytes source/images/little_star.png | Bin 11046 -> 0 bytes source/images/menu_button.png | Bin 5439 -> 0 bytes source/images/menu_button_over.png | Bin 7080 -> 0 bytes source/images/mp3_pause.png | Bin 641 -> 0 bytes source/images/mp3_stop.png | Bin 1352 -> 0 bytes source/images/nocover.png | Bin 33092 -> 0 bytes source/images/nodisc.png | Bin 24745 -> 0 bytes source/images/not_favorite.png | Bin 2625 -> 0 bytes source/images/playCountIcon.png | Bin 778 -> 0 bytes source/images/playCountIcon_gray.png | Bin 664 -> 0 bytes source/images/player1_point.png | Bin 2044 -> 0 bytes source/images/player2_point.png | Bin 2128 -> 0 bytes source/images/player3_point.png | Bin 2154 -> 0 bytes source/images/player4_point.png | Bin 2079 -> 0 bytes source/images/progressbar.png | Bin 241 -> 0 bytes source/images/progressbar_empty.png | Bin 224 -> 0 bytes source/images/progressbar_outline.png | Bin 1286 -> 0 bytes source/images/scrollbar.png | Bin 441 -> 0 bytes source/images/scrollbar_arrowdown.png | Bin 1091 -> 0 bytes source/images/scrollbar_arrowup.png | Bin 1025 -> 0 bytes source/images/scrollbar_box.png | Bin 945 -> 0 bytes source/images/sdcard.png | Bin 2481 -> 0 bytes source/images/settings_background.png | Bin 12107 -> 0 bytes source/images/settings_button.png | Bin 5637 -> 0 bytes source/images/settings_button_over.png | Bin 7553 -> 0 bytes source/images/settings_menu_button.png | Bin 1919 -> 0 bytes source/images/startgame_arrow_left.png | Bin 1525 -> 0 bytes source/images/startgame_arrow_right.png | Bin 1520 -> 0 bytes source/images/tab_bg1.png | Bin 3467 -> 0 bytes source/images/tab_bg2.png | Bin 3844 -> 0 bytes source/images/tab_bg3.png | Bin 3390 -> 0 bytes source/images/tooltip_left.png | Bin 606 -> 0 bytes source/images/tooltip_right.png | Bin 820 -> 0 bytes source/images/tooltip_tile.png | Bin 122 -> 0 bytes source/images/updateRev.png | Bin 1476 -> 0 bytes source/images/wbackground.png | Bin 52872 -> 0 bytes source/images/wdialogue_box_startgame.png | Bin 16451 -> 0 bytes source/images/wiimote.png | Bin 21406 -> 0 bytes source/images/wiimote_poweroff.png | Bin 2248 -> 0 bytes source/images/wiimote_poweroff_over.png | Bin 2927 -> 0 bytes source/input.cpp | 115 - source/input.h | 23 - source/kenobiwii.h | 264 - source/language.c | 1094 --- source/language.h | 237 - source/libwbfs/libwbfs.c | 632 -- source/libwbfs/libwbfs.h | 223 - source/libwbfs/libwbfs_os.h | 33 - source/libwbfs/rijndael.c | 398 -- source/libwbfs/wiidisc.c | 337 - source/libwbfs/wiidisc.h | 67 - source/libwiigui/gui.h | 992 --- source/libwiigui/gui_button.cpp | 485 -- source/libwiigui/gui_customoptionbrowser.cpp | 636 -- source/libwiigui/gui_customoptionbrowser.h | 90 - source/libwiigui/gui_diskcover.cpp | 78 - source/libwiigui/gui_diskcover.h | 42 - source/libwiigui/gui_element.cpp | 765 --- source/libwiigui/gui_gamebrowser.cpp | 650 -- source/libwiigui/gui_gamebrowser.h | 67 - source/libwiigui/gui_gamecarousel.cpp | 488 -- source/libwiigui/gui_gamecarousel.h | 61 - source/libwiigui/gui_gamegrid.cpp | 512 -- source/libwiigui/gui_gamegrid.h | 57 - source/libwiigui/gui_image.cpp | 261 - source/libwiigui/gui_imagedata.cpp | 171 - source/libwiigui/gui_keyboard.cpp | 626 -- source/libwiigui/gui_optionbrowser.cpp | 659 -- source/libwiigui/gui_sound.cpp | 195 - source/libwiigui/gui_text.cpp | 434 -- source/libwiigui/gui_tooltip.cpp | 90 - source/libwiigui/gui_trigger.cpp | 255 - source/libwiigui/gui_window.cpp | 430 -- source/listfiles.c | 50 - source/listfiles.h | 18 - source/main.cpp | 281 +- source/main.h | 22 - source/menu.cpp | 6413 ------------------ source/menu.h | 31 - source/oggplayer.c | 391 -- source/oggplayer.h | 176 - source/partition.c | 51 - source/partition.h | 40 - source/patchcode.c | 359 - source/patchcode.h | 46 - source/patchhook.S | 508 -- source/ppc.h | 83 - source/sdhc.c | 159 - source/sdhc.h | 22 - source/sounds/bg_music.ogg | Bin 113405 -> 0 bytes source/sounds/button_click.pcm | Bin 7204 -> 0 bytes source/sounds/button_click2.pcm | Bin 152064 -> 0 bytes source/sounds/button_over.pcm | Bin 32256 -> 0 bytes source/sounds/credits_music.ogg | Bin 344200 -> 0 bytes source/sounds/menuin.ogg | Bin 19365 -> 0 bytes source/sounds/menuout.ogg | Bin 11143 -> 0 bytes source/stub.S | 6 - source/sys.c | 139 - source/sys.h | 20 - source/updater.c | 116 - source/updater.h | 18 - source/usbstorage.c | 186 - source/usbstorage.h | 19 - source/utils.c | 8 - source/utils.h | 15 - source/video.cpp | 187 +- source/video.h | 5 - source/video2.c | 136 - source/video2.h | 25 - source/wbfs.c | 531 -- source/wbfs.h | 41 - source/wdvd.c | 338 - source/wdvd.h | 33 - source/wpad.c | 73 - source/wpad.h | 21 - 212 files changed, 1085 insertions(+), 34479 deletions(-) delete mode 100644 HBC/META.XML delete mode 100644 HBC/icon.png delete mode 100644 Languages/danish delete mode 100644 Languages/dutch delete mode 100644 Languages/finnish delete mode 100644 Languages/french delete mode 100644 Languages/german delete mode 100644 Languages/italian delete mode 100644 Languages/japanese delete mode 100644 Languages/korean delete mode 100644 Languages/norwegian delete mode 100644 Languages/portuguesept delete mode 100644 Languages/russian delete mode 100644 Languages/schinese delete mode 100644 Languages/spanish delete mode 100644 Languages/tchinese delete mode 100644 Languages/turkish delete mode 100644 gui.pnproj delete mode 100644 gui.pnps delete mode 100644 source/CH2Unicode.c delete mode 100644 source/CH2Unicode.h delete mode 100644 source/FreeTypeGX.cpp delete mode 100644 source/FreeTypeGX.h delete mode 100644 source/GB2Unicode.c delete mode 100644 source/GB2Unicode.h delete mode 100644 source/apploader.c delete mode 100644 source/apploader.h delete mode 100644 source/audio.cpp delete mode 100644 source/audio.h delete mode 100644 source/cfg.c delete mode 100644 source/cfg.h delete mode 100644 source/data1 delete mode 100644 source/disc.c delete mode 100644 source/disc.h delete mode 100644 source/dns.c delete mode 100644 source/dns.h create mode 100644 source/dolloader.c create mode 100644 source/dolloader.h delete mode 100644 source/dvd_broadway.c delete mode 100644 source/dvd_broadway.h create mode 100644 source/elf_abi.h create mode 100644 source/elfloader.c create mode 100644 source/elfloader.h delete mode 100644 source/fatmounter.c delete mode 100644 source/fatmounter.h delete mode 100644 source/fonts/clock.ttf delete mode 100644 source/fonts/font.ttf delete mode 100644 source/fst.c delete mode 100644 source/fst.h delete mode 100644 source/fwrite_patch.h delete mode 100644 source/geckomenu.h delete mode 100644 source/http.c delete mode 100644 source/http.h delete mode 100644 source/images/abcIcon.png delete mode 100644 source/images/abcIcon_gray.png delete mode 100644 source/images/arrangeCarousel.png delete mode 100644 source/images/arrangeCarousel_gray.png delete mode 100644 source/images/arrangeGrid.png delete mode 100644 source/images/arrangeGrid_gray.png delete mode 100644 source/images/arrangeList.png delete mode 100644 source/images/arrangeList_gray.png delete mode 100644 source/images/arrow_next.png delete mode 100644 source/images/arrow_previous.png delete mode 100644 source/images/battery.png delete mode 100644 source/images/battery_bar.png delete mode 100644 source/images/battery_bar_white.png delete mode 100644 source/images/battery_red.png delete mode 100644 source/images/battery_white.png delete mode 100644 source/images/bg_options.png delete mode 100644 source/images/bg_options_entry.png delete mode 100644 source/images/bg_options_settings.png delete mode 100644 source/images/button_dialogue_box.png delete mode 100644 source/images/button_install.png delete mode 100644 source/images/button_install_over.png delete mode 100644 source/images/closebutton.png delete mode 100644 source/images/credits_bg.png delete mode 100644 source/images/credits_button.png delete mode 100644 source/images/credits_button_over.png delete mode 100644 source/images/dialogue_box.png delete mode 100644 source/images/dialogue_box_install.png delete mode 100644 source/images/dialogue_box_startgame.png delete mode 100644 source/images/exit_bottom.png delete mode 100644 source/images/exit_bottom_over.png delete mode 100644 source/images/exit_button.png delete mode 100644 source/images/exit_top.png delete mode 100644 source/images/exit_top_over.png delete mode 100644 source/images/favIcon.png delete mode 100644 source/images/favIcon_gray.png delete mode 100644 source/images/favorite.png delete mode 100644 source/images/keyboard_key.png delete mode 100644 source/images/keyboard_key_over.png delete mode 100644 source/images/keyboard_largekey_over.png delete mode 100644 source/images/keyboard_mediumkey_over.png delete mode 100644 source/images/keyboard_textbox.png delete mode 100644 source/images/little_star.png delete mode 100644 source/images/menu_button.png delete mode 100644 source/images/menu_button_over.png delete mode 100644 source/images/mp3_pause.png delete mode 100644 source/images/mp3_stop.png delete mode 100644 source/images/nocover.png delete mode 100644 source/images/nodisc.png delete mode 100644 source/images/not_favorite.png delete mode 100644 source/images/playCountIcon.png delete mode 100644 source/images/playCountIcon_gray.png delete mode 100644 source/images/player1_point.png delete mode 100644 source/images/player2_point.png delete mode 100644 source/images/player3_point.png delete mode 100644 source/images/player4_point.png delete mode 100644 source/images/progressbar.png delete mode 100644 source/images/progressbar_empty.png delete mode 100644 source/images/progressbar_outline.png delete mode 100644 source/images/scrollbar.png delete mode 100644 source/images/scrollbar_arrowdown.png delete mode 100644 source/images/scrollbar_arrowup.png delete mode 100644 source/images/scrollbar_box.png delete mode 100644 source/images/sdcard.png delete mode 100644 source/images/settings_background.png delete mode 100644 source/images/settings_button.png delete mode 100644 source/images/settings_button_over.png delete mode 100644 source/images/settings_menu_button.png delete mode 100644 source/images/startgame_arrow_left.png delete mode 100644 source/images/startgame_arrow_right.png delete mode 100644 source/images/tab_bg1.png delete mode 100644 source/images/tab_bg2.png delete mode 100644 source/images/tab_bg3.png delete mode 100644 source/images/tooltip_left.png delete mode 100644 source/images/tooltip_right.png delete mode 100644 source/images/tooltip_tile.png delete mode 100644 source/images/updateRev.png delete mode 100644 source/images/wbackground.png delete mode 100644 source/images/wdialogue_box_startgame.png delete mode 100644 source/images/wiimote.png delete mode 100644 source/images/wiimote_poweroff.png delete mode 100644 source/images/wiimote_poweroff_over.png delete mode 100644 source/input.cpp delete mode 100644 source/input.h delete mode 100644 source/kenobiwii.h delete mode 100644 source/language.c delete mode 100644 source/language.h delete mode 100644 source/libwbfs/libwbfs.c delete mode 100644 source/libwbfs/libwbfs.h delete mode 100644 source/libwbfs/libwbfs_os.h delete mode 100644 source/libwbfs/rijndael.c delete mode 100644 source/libwbfs/wiidisc.c delete mode 100644 source/libwbfs/wiidisc.h delete mode 100644 source/libwiigui/gui.h delete mode 100644 source/libwiigui/gui_button.cpp delete mode 100644 source/libwiigui/gui_customoptionbrowser.cpp delete mode 100644 source/libwiigui/gui_customoptionbrowser.h delete mode 100644 source/libwiigui/gui_diskcover.cpp delete mode 100644 source/libwiigui/gui_diskcover.h delete mode 100644 source/libwiigui/gui_element.cpp delete mode 100644 source/libwiigui/gui_gamebrowser.cpp delete mode 100644 source/libwiigui/gui_gamebrowser.h delete mode 100644 source/libwiigui/gui_gamecarousel.cpp delete mode 100644 source/libwiigui/gui_gamecarousel.h delete mode 100644 source/libwiigui/gui_gamegrid.cpp delete mode 100644 source/libwiigui/gui_gamegrid.h delete mode 100644 source/libwiigui/gui_image.cpp delete mode 100644 source/libwiigui/gui_imagedata.cpp delete mode 100644 source/libwiigui/gui_keyboard.cpp delete mode 100644 source/libwiigui/gui_optionbrowser.cpp delete mode 100644 source/libwiigui/gui_sound.cpp delete mode 100644 source/libwiigui/gui_text.cpp delete mode 100644 source/libwiigui/gui_tooltip.cpp delete mode 100644 source/libwiigui/gui_trigger.cpp delete mode 100644 source/libwiigui/gui_window.cpp delete mode 100644 source/listfiles.c delete mode 100644 source/listfiles.h delete mode 100644 source/main.h delete mode 100644 source/menu.cpp delete mode 100644 source/menu.h delete mode 100644 source/oggplayer.c delete mode 100644 source/oggplayer.h delete mode 100644 source/partition.c delete mode 100644 source/partition.h delete mode 100644 source/patchcode.c delete mode 100644 source/patchcode.h delete mode 100644 source/patchhook.S delete mode 100644 source/ppc.h delete mode 100644 source/sdhc.c delete mode 100644 source/sdhc.h delete mode 100644 source/sounds/bg_music.ogg delete mode 100644 source/sounds/button_click.pcm delete mode 100644 source/sounds/button_click2.pcm delete mode 100644 source/sounds/button_over.pcm delete mode 100644 source/sounds/credits_music.ogg delete mode 100644 source/sounds/menuin.ogg delete mode 100644 source/sounds/menuout.ogg delete mode 100644 source/stub.S delete mode 100644 source/sys.c delete mode 100644 source/sys.h delete mode 100644 source/updater.c delete mode 100644 source/updater.h delete mode 100644 source/usbstorage.c delete mode 100644 source/usbstorage.h delete mode 100644 source/utils.c delete mode 100644 source/utils.h delete mode 100644 source/video2.c delete mode 100644 source/video2.h delete mode 100644 source/wbfs.c delete mode 100644 source/wbfs.h delete mode 100644 source/wdvd.c delete mode 100644 source/wdvd.h delete mode 100644 source/wpad.c delete mode 100644 source/wpad.h 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 951057cb3bb104712b3a982bf750d76e4a57e12a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7944 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") -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 0a7d221010ed8cb76f4a39e8086f0860d3c07a28..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23026 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 FV1iVbqdx!u 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 5a252b2b62a3e9e94f8662a34fd8ceebb5be76fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4228 zcmd5rb?X~K^ zdN)pt`T%WEBS;|<$|Io<6&0eO(5h8XQxx$h^8gYOSU?_v;HCU10+l{d@AA#uUGLi7 zMCu!NcjlfsGk4~E-#KUQTw+9|(U(c4XFora9DMP)&)p+IoJi{9yY@^u31m4~Sz$ z`NliN2hRjDA7WmPi;lki(?9e3FF%$19(58)ihKo4FG*aB3(v?`Dx>H*jQ&nZ5i{9+ zb{!C!0D7H5A(4x+5lX@D86am*)M32$@Ylm_3@=r5p$U|CY!Xy zEunX-mf!)Vp!zr324xz`RD;a*yKRh}!4tI=6ICP=&~SDVq|hgEci_%|AFEa>Xq%L( zR4RY1{H{74D&`QxK*F8RS7S?PxU#-XO{J&~r_1f}`uti=^?!1&5%O`($*QU%OVqn@ z(!3>ipX|yN;$4MjC;EDK+ji45Z&&V)hJKV~M@Rd5P4iZEG<1s{<;uQZc58COd;(8S z<_hLHK2g``EvcIi$d8`y%W8(9>s~Jdqk+Il_R4Km`Rc~W!bJQn$va6$-ja#e3gfjZ zG!CJ03XLnk^==`1gx)7)zZj_rxkZc#iaI3pVNpj!Z&cK+qBkbwxTxFs7}(MH2Z7SN z>?N|KNeK}mKgoVmxz4^VrJ#?J#?qB*m6Mg%=^c8W{hpnvJckH=K-b8^?_%V=^VITEMw%y@<+GdmexsAVUE|3KvL}w=*~rWA}~Zls5Ij)Ujm3V&|rkhF0F3`k+EqBFU~M zl3SK$S>^l51Uqc)eBatiwwHem73*$KfgTRmyjTo^I zbGvk}NAv3-2y-Z2=4s@m=B056wx?QlYK+ub;k3j(oR+R0#(9W>h;D9mPt4iTGs1og zI@rrK8rZQZ<1>d3m;c+{E#0xKoe67ui{rP^#JX`I>Qo+k!sm57h3uff1319q3%d8C z(fnT711xUYRfQur!m%CP2qwAB;Sh@OuRtQ#k&Nu}e*g(Qo7|7%{RXepa47JL1{}6e zHHy$P+1_wVAm~<|ibQTr2?dQvfFV2?c|9)Ksr!8nS!MJ^hyQXdX*R|;#^cP6P?0wr zL^30+-vt0SM3F_|U@YoX_gS8?lI-P1li5`S;8rr-#NjRDRpWv^SR6u?Ad2b}-fVk6J9XVvlfg>-D7XAwC~RqY$7#}?FY&CjYKn? zcFv3*04pPJc)Z=gZo>D2FIWUjgDLZtZSCxUBR76-cLl9qlU*6pV$3<)* zD-cy$EhTn?%1-GUBA|E@moGKM5%!V*SIf6x(oHnQfix0!uh z#2!M=PNrb1Pum}QBA>#c7CE3tBbwYat8DnlExcFjd-VRDq5AG>Z=P69A=k3&0Nyl^vG)2r*txuty%HZCw`K9yfDF0QVa1N{RNGv@5-dfuFeIp`SZPo=Qj ziaC{AF;hckYIJNMJvNv&v0NGlV;j0jXK9nxC=W7npe8TK;6(L-u0>ivDGBoW0r&){ z%%fF8J%{!MJZoayML3?1v#DFdh$6}*G17#a`4~Q9eN|3l8iev$kHa-fxKE4q3Ye!T zT6x^_SaCzF_UKi(3!7POyOz(wE##QF+xk&zUvQPHFss=WfRcX|;+=(aL=>ms7{#fL sbex70)LxBTge-P{T20^!_hQ}k^yv?8xFmco1FpHAVMfMLr20jibqqyPW_ diff --git a/source/fonts/font.ttf b/source/fonts/font.ttf deleted file mode 100644 index d4c461ca284c77bb2f6ac20c9cb73dea322765ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48364 zcmeFa37lL-xi?&OdS<$(d%Ami-`CU2OwT?&J)K#TnQW8EHVGjMkc4bxF~P8d0)jh; zh{)v%sGy*zDBuEyj0&i%dKEzdWf3l}xLoC;ERyc`|I|6BPtTG}xW3=_e&6r+22OR& z>C<(po_gxp>nX+=V-6HGta0hY>Jy$Q{_#Y{4maZN&ZQ@uIC{zRS6_m^&t^ldxu_>O1J+QL}vO}JjzabVlQdpAAwPR1;kFjn{Yj&skBbGf#j zG4~*2%zN6w-3RJ6eX7Wqa~;|^YxlOZ4l*CZ_lNN{Yuvs6g43Qk^P$yv9^Zdv|DIjj zcK+qBcfX8h@lMve2RG_&uW82L_@1Tq960;@Tkg!(;P2NNGkkIXJ9li`y0Y&~#=d?Z z?mc;6+xZ8jxA<>SKOfJ>Pv3T6*IC^|c-c46f5Y;F?>y`5FMi>&amK#&Ym6^^@XTEY z|8d##_}ld`ogo*iVYq~`I~FiDCVqutV$<3a*a8;+rzG7_cCbb0+pBTL9V7UT-!0vM zk2q!m}T;y4Vxtm)R3&{|S~s{Ym~9>*0UJGt)1+Uwu8tdPJY!LVq7cpL*1O--tf` z8h^h_^n09JFuodmcLnahf=e9({}$?hWD))vzWX8b@ynP+jKRoirQa|wFEgVU$Aio& zT~~g?aIZ3MdY3w`7QRs(BaNpX*m4A)KgU>p&f3_|$}jSp#JKvTgKFPtOmDFk@%uX5 zdk2$wsC-0>>pjdY4Wl2Y19li2pI|P-01Fv<@teQ0AjUv2>ce-OKZ^_RX1`{Q{41E* zdzh6!$ZGh{n1%m^IdRW~za6OCa783Pi{i5j?@REtEKK8Ke`W=7y~zfpht)dWdx>@P z_f=h-&F7pA@rTg2htSS{vL;+^?!>1PpXV?uyB&S_5$l#r_)Ous6vkN3M#c3Oo_U;g z@O$xYy1s;W+=0J)ScmiyOGyQm;qSrw{=znEmvjN<%!B#JvmEtD^vQy;(6xej_+ngm zo}E=b&yZxzH3wNU^@G34cH_Da*NwQouU@C&ldc1}PQrBwu1Q>9!?oEUu_n3*m&97Q zf&BpY6S$JQ9x{RsLn z0yvJa1l~6&V5f|ImGpOZl6ukmAHeG5m}&fD4eWJOnVFcWTmr4BFCPKDpwhz3C>xjs zrIj_5-(ogqMQLX?l#R@e(!mE}GcU>j^OfIV zLFPvpVgZz47DO3gq4Mi2D#{oOqaJ4wlnE9szs8a*hEis6lqr@#nP$oIKd`E0lv$QS z*(AzlmM;GtGn+x#!m=n^Srf`O){L^9O-uEa+u94|CP;WeJB^Oev~6@0Ocqf zEdLi<$c9iZV#6pGi*gB@U;YbQ$`+s;V38&Gaz8&Pg&n^5jR`8&3gorH21I~nC^>=cx{ z+2-=a(<@?!rp*f&r<%)W{85q4Mk$LvvdH_9KfZ=w7VJB0E- z*gfU{U_Tb+PuOA9A7hg!f6Bg%67Mhn2$b->0Lo|CgD9V4521XXJzRc-{fa$;@&)!N$`{!WQT`{&hrua+g!0$y zKT!UL{TStM*-y$3vEQ-BQ2w6%6y+b-<0v6@lpkb&1fPD8{YjL6W+WG-?IT!Kp9Ag9gXR`MYm1<bKp)3J z7q0_;UJv~E4`AX1Xy97VzIC8^>p|-_g2tT$+I9+P+7{5VQ$fSFgLdr%%{mRVY7c1C zSAkWx1DhDIs223p2+n2)=L&)+g~6jD;6!JzIJgfu4>(SmI1TtrGdN2NI87@!Ne4Jc z8`kYDpgI>~6+eWvcL3P^efCAHlDpCN3eanY6-NIqVLuU{N^u8P9|M)#4~lXHu$_Ts z(Z8!eTiy?tJ`OqB1)Bd3(2;9FlRgX@^%bmk27cwoYW*@O&c{JV539^-Zj( zdaQ;z@No;cwHbW75quds81sMwdqI0Au|B_tmHI8L<@>No?`Pj;H4?N5z;^-QP=gWm zp>`5r_AZR7%)9s~KY?%K=ktsC)zU-KBhqt*iw)n7yW_!lG@guS;+^sS_@YEI=}dZ( zfqzQnGFpqHm;IQzlL7g6vzyS$2w%%jMJpGfl?Tzv)1nnu+#e6e(592e&h|tj+lbHUUOtca;}aMCP;K-MO z1%Cjh+zlML19SZ-D9R5oBewuYUI3-J2RQO2%;$ZeKz9NYeh2#Udtk`pnAZm|JA|t% zfUPFrYdvNfl9`z4UjTa{hher|z~bKk>%3yl-Jpff04GDh>o9OS0Ic2zyiQ<-2(Qz? zY{Kj3fY~|Vb_>Z$z_R_o?RJ6PPk|zKfm%K*aPbMy)1QNmDj0M>u<2fbm$wNFy&P-d zGgt+Lng187fIR&FV%7g%tOD6$t;-Lw`iYHSkXmsgmq5+X8eej!A-!bnMtM{G^7!S;c3vJ|65q3J=bbfa@rf^XUB0O! zekVI&<6e~OHYV;|uqjlj?%K4eAMMmoJNOA6zkCx~*r&FDPjRc`2p+0!T^_&FkeS%H zX5*cgEDGJZV9};fA`xGF=Y10!@4RnOD6wf1o~o<#6g|FZuV3x65q+-9;d_(P$_X3q zToAgGZMyt&YV(ARa^lWQF26i4N^Ys24~Z6EKqL%5@-XESbT_IGJ(eMAtyp~ zLr%yE^mEf9yt}@2`3V~rqo;{YZ3Occa9NTIq!xY{%t=)4MP(lNpA6b!2eO-5?gfR) zPq_o~z`+QnJ|uzBSKmR~wP?%Of)^=}Kx=MrpxxlvM7iDkHs*$Q>_*){?~7!<*C_QMwVO8hANdT11BfZ( zc`qn=0R3rV7ad~F9fw#BS99Yb=6ehm>V{`=4}aUA70CYTVGO`0x_ubK_Avtna2O5P zSv_hRR3Zd~NEKA#bR(`nr2()&4*-iWU=c+P5J=W}+}`3aFZ5)x-CmE|CdtVR{&pFr zg23($gq*kdpd8{v#s;^Pn-d#)#%%O>+XAZQ!mE_oDKpE0e0dffK>xQfMDYj-PA^Fr@;XcDx0cxJZm`n*?6e2qJ-12e?`>{Z?R? zANBBK8jL*zQco3(&2+=8z?f(Yq3-OyHJ0s-t z_|AQCYWE)>8|z)?c5Ha-^%+n%z=p-RSzSXRHi*8W&ky!K>PM z^aXJY#CGHz9f73m_shw9)X)9<3|o^ypDg2?_A)9hmb|_bKzN^a1u5#uH+0 zt>7RkbI>OXZ`P*+E&Q$m{HOLwI>6Pg(3r}9ms$k>$+7*QIe>60E}}j0$8gc#sQaHK z#u8_Kf$ecjevBDZ^3jBv))Sp?&BmsVhdH^31_5@mLy#e#%aP|V9fd)ik&~O(Y-FzvQ;zPN{gelYPIyzjb2(U1TG@QL|c1NODb!mSEr}hs=6y_lRWOIlqj$d<7=A7F5FxwZnDQUjP5JJPquK1}#?FJ|;rQ<2mP?l{zHm#ixb@<( zv5PlDaWud_O>iOn_JJpyrC>sviUC<*Ll*TmU_%7hzyXnnz=kY_2{>WE5!75WSD{Y1 zlLV)v0w>};H3Cja)NBfzuxxyD!ek{D)xcbEz>>S+I7a>dk#S?e8|NJNZjgiCImS)I z;_Z&R9_Zi2wjE;KnBP3EZp?8T=DV$f7%$Ci9(QEW*g)0nsv@aAyG=B^P0H*>F{frR zyG^KpOGCoYImO&#eZE4tZklVv8d-a2?&;QWoaAj<`5!;T7GS(1xE5f90~qrF{f&B; zpm+nUOW^nb1_2rYNOYkFT2P^Q$DjqrCV@wx6i1QS4Rc|K6gdi!yl@Wq%^;hlKgLKoiefq_OKNEKg2hrGEaej|noKB~Bi`&k?~rLCRglWz_A z5YHPN?^l(y7uC;q-F^CnXCJt2HZ6^(_<5x==cUU^kTlViQ29;%Q)#CvD~+-*9AXOr z=S8>{qJKT;Uk~6M5z^oy+!+OzXcd1c5`)&`K7x54Ggh=Xm2m1Njt+XFgJxw?EICqQ zA>g7-Qe7MHMooRC)z*hO^)rsy?LaMw+F>Z$9V`hbO_lkJRa9jv8Euzb1xTBUs3puJ zh6w+3Aer*}%N6mr_Ar0vbiE^f&rRQ2eAN7;2YYr8}~1^5E*WwuwQx(AF4Dcf`L+w8fyp_)OG% zuv1@)5n+6txH>R)O$zTsy3$0?g4XutkV^!sHm^Q-!@*p~6o(`ILD( zZQcfp%ewcvxxw??{P~4(OTDRn<^9KnMH&vBD&)RV_7$CqY4nP8(^1wcR@O|)Mmq4n zLeFNJY;|3DE?RapGwyNFGJd1C%j0f}Cv8@{t2x@_wuC%M*%Az1JSU8$xG!k680#Ga zA#bh8QXeh7dR(Bc@C?KVs?ffW^lJm0;v^Z4qSlHUS>8R&01E%F!FDd_xr7Ng-`%U3 zfK?OcRMmS{to)}l7<4*=0avC_$lyxP4YZT!2SKMR&{4>y#ji>aA0OCMxILos+9 zcWS(|omOUh)yhoKjnq_DNkTUVhdmb4Bt{VuOO>Jk6gHB=y&>E?I@5G1E`(Z}VG6J0 z9yf&Y7A|}WpPbG$8-}ylAv+&xXzE>%Y+F4jC&BwVCgT1`*cMIw(l*>Yke!ur-YmB? zr!Pnp(jIwmg1BW;P6X$NGG0qvrnOV!mybxqFU`>6Dn64S0VP-krAE5Zs6Yvf4V;i* z6U2Cp0tOa*859e?5%-!E7!aE~j`98ieD0>>8Y5WUGjj|HBOy8K|FJP;^D%xLWBLtv z(}Lp}6S1e`9ux5;Cp>ADc~Xr)x+JJeC6mNbz=LR>$SMS~39-%v%qFppMB;m3sUTdf zW-x~17#m+%#bF}HHAtPwl>Roy1R4;1$k@x0;`0fyE&p?S_1v=W(HAP&j3d5S-0O`* zZ}Y{Y9$zfHbGvj()aQvsyuKKh;(kvw=JQ03+`?}wov7NP?+|NAwP};p^Vl}+H9&pS zb_sZ0N{UuUKh9wMH>mAY?9x*#;;K!10!Vi9cETX_*Ak-n5CkI;p4iE*ZpCsSr=~{z zbX{4sZmV(yjrM`6S$$wT*Qe~rU(~LlZ#~elJ|z+FFR&{h|Bz&as{lF34>^c9aY40g z_g47)Js6U1*PcOvb(~dYqYM!n>_eE{L0ir3i3rCOB(}}&pfwP$QjprlBV2|@4wep~ zpx{sb;iEA1tg*g6<#wmd^~UWkPheRtHx~3cW-#(2H~%Ev+}P-LHQLjuCtqpq55|*; zSg612k17v(vZC+JXYZTMLZ<0^ik*yfYaLRmTBomW-8McqYHKzz5-Sz!`LX!YbOC6( z@%+YVJZT8(nA??X4F=ljvn|lR2Fzt>O*^S%(C21lM}NbE!C-6BPPU%!H+2GfIihx(X|S=lLn0m zRjm$HrP60LM`R;MWCN-`2!oGFnyYB#{l|mis*Lia zprd3v|Jbo8g9VVV04miKLW};;==w1!#jzD8#m6?4N*u46Gy`ha9fh1;Fb4!@5LReN zbE6R8*aKPbQ!0%uuq~7Ds%Y8~e5tCK+5;3oKu^WbpmLz&w2tXKraG*n+7f0&V2lU{ zBGxj*^N9DTnAnH-$EK0at7c~{vlzbaIx2GkodhoyV<*`?L3Z>ca74zH#9GlTT{7x! z)zak_VjnFG1XY3DxltoahK56`%nzvC1Mxv4gU24*{UCy&*~bIYm;XQAeIK}aKwD=)*Cw)qt61Zp9cPUb^R=07f&K^&!BpnAkQJtp45k7^k0dZBD?Ugknc3C=_I1tsmN*> zC>#_xcRa#LC$Mh-vrY|+ zlgv{h;0z+J>v2RllKrQL?VUu0Lh%X4@WQCUX$a6G-!f*(f|>GGB9Tw{VY3G5EB@KH({fz(*o*Q4W$v@f9sxM78zie;>~@ zy1fhMcW2wX8f^`cK&G{8FceAzV@{7b7)}nI(6z9)wY__{$!zTi=X;;v{TbO2H=B%~ zc+=(gFG(f}aZ97gx45Z&<-B-nfj^z^fVu&L7vpyT2F;|=&{!#8Q-eDrFk>V5@TShL z1l$kg)uaf!VME?y%z=>^Z3eNJ4EcUuv6}?%neI zb=@87hEt_He{`TDlI*-<&6=w^6VXnDQE?@P5aaPs1R-KifX;+dF7(w_!6^%M%Tg7u zqffvjY(NrNih_vP8!URw&}*0Ib$+(!$FEKaWSbGaruFOH=$DNxpF~juaL_Ak=vRHE zU+Qwx;aA-+3;NX{epH9vn3UciC`ymRbd1+q{hd!dbobp-Z#-rVAh5FZOTs}u0eH%YJs)F@s!;Yc9xERQnp;18DmvTq-E?&F!#FQpqwuW%cp0M-7m zZ=yd2TH9nVp}E!ItG}tUE01Qz_o=~lwEh@-7{7DV@5s4|IDyLVOoXE*g(ehfSs09k z{IEfZaCkVHYVbvxqUJ`A9W0@K-+l9!1?w$!22RV|RA-jm*h@`x9x=62gXo)$4d}gt z7a8y{0xrhN>eYLy!lc?FTr${Sqc`+k0(!)*HE1wZ*K4Tr~rerv+YZKZFQ zzJ&KG>yYr>!cvn&q6L+o2@~>I5-MR?si7Qs&)4IKJg?vPP`%Zfl%@QUAMK|0%KwzU zD18p%$4;1RG2bCv0Ws$!odhu&Eeg~G3FRwR)>=;POWi*ghHX=&F$fnQfDN+Y4DC9=A-mQOC|ZaZ?X zfCa@=N;jiRh+B1`-)>wCkqJbVOqc@`Fx4oeEFv_GRT7rYkvqH6Gb16TmMIaB%Vvvj zl$1C=tbZ5QEi}|7yq#k3oA7oSZv{K)BporfJUDx8f zARSZ||IuO?&z~a#NgC0X{4v5472M`G1IMiJU7P{k8e_`fieLnY6#!OH1da_Ov|)rP zg*H?uzzn))qk-BKS%;%_5K0heqI-m*de8w!qt?eD=#dadUL-lkjUEG0VzSAB0BRzI z<6d(pW^3x}scA6nbGof*Ioy^>G$N9yf1<<7&oG*U^V;+L`=yUbMY-8xs;#qn?2+;2 z*74qG=^t1|=tTrERX@SpdExJYmr{!a$YG2S$IvZ3CV-3uHNbo~i?bXs|1g-KQo~*$ zbh-_YXhZA>k_0fRYGtTV0Xo<55hQ#B33X-YQM?3G!c_tYMFmiRJ-yM#(&`(P8n6|h zX-C|u7SP&T%;sHL5_ol1LG0cq#TTbXHgtDySdht#ZtV7?+*e)+Rxp+uyLfA{xcQ=` z#0d)dO*fBi%bzrgSl5l+_{^G2pDDeZaXX4zFBw~M(UxAsx{fV=Php3O7etR6XGX0m z9&U0A5$qU21dt)C4CFD~ao`Tok{CW?fK?XSw+SOta4A>89tVNQQ3WDh@dRclWSVTY z2H7R#Pmnhe!92i4KraN(2>+&359@q96ZMoVBe6`hK zHcGW^$yistp#~{Z9{pp)?(mepFLgok$uDU>rMb4b^$5`zU-=b&mvk%q{U6Z%{Z5RF zqRb8hm7FXg#z8Rv?HFA<)&z~2_SdwFF={J5Ph-nht#}Pd~iJ0kjzF}5&?4{lo(jkl^BalX>)^7>T7c+&9!xPCS%K0?JJA1M#n+Fr>~>c zWoj@RZMH_UZ*it=c`<4+(^}%-MT}nzyfCtnN&Jam<0^hzOQWu>8a1aIT$$opj7y<& z6o6Gjs~^)T7ZRQ~_kDn$CG{Nnk<_z$FCG_hfp|xZqR=#HnrJ=A(Hbp+cuClYMk$6= zgS*auwCyVCW5>-&M-BaZYmPWG46FRQggi%(#ogNbr|=r#i4gH(e4-&9E4aUP;1gFJ z7|q3prClWxrH$gqck%{k(=DJ)X{`;3fF@O~i+Z|IPd7jkz)~|=3m2Rfp=b(Q%}Z+= z`+}*u6V_XcJ=RNipK_vgUeS8O$@>;9PsI2&r2`{Fc%_XWS~yl(iHLpLWP`j_=(|OK z?+n>R?+B#0EcUiRXDvc-;qQL$Mduv)`n%8A|E}A9@Ylcc&3yRr$4lQU-Hdic>>b)Q zu_h7%6*=y(_#_&jjZuFWNpxyV-91VS-L!Z)4&H%wul7`wP*cm|fvQtARhI!RiI(|W3+tPsz8eomwDQ7LUhFV8{XklXMMVqm$p+k>KBk9qN`R+{%v72KDEf>QeqzkNEHBJ-tslv_y?tse zw>+I99dmF`eyo3N3=+hWzP*LG>Kb3Lyld~^7-WZZW@-P@ zZRgOInM`(kfM{E!yg=A%ilm!C1qP@nMhQe4F-oLI8L$9IMXaq@EeguE(n34jwW{%k z#2=`~itUExI4kqrkwnOA3q`WgP;_|Dik3*va`3U%fmUxY5pY?SZGa623nd!yXUr*6 zQz+16sx>rAPPfx3tu*y*IJjV{O~-fss=gg@vgqs@uo+?c05-HqB7j+l1(cS9mI#>T zv_&vWlKej{BHr-@jaR^oHy-v}X0n_PDRnxlBzcMT@1IkKbJwgzDV{i|9>2euP3 zA`GAnk>H3QpyyABcci0@Z3PjehVZsFj#QV*cpt%9tb;01iFoqT+VWPdtp>UwwttWz zh?CF`zT-vzkBnYy#dGOg-;R@>hQ=KcQ5`;css{W+k&@qxsQzUp3F`Tai$YMot zyKr6LYrP~VoOpT%ud+?Y*5(nroD5#roOSEbCqPNGv`v(?>{@5O9ZXmd~2?o zKP_6NIlKvTXuz9?Q*@IqYlB zy9V~TBfG9}`kjsS$P^OtpZ)Mlc)!3Q#0S#*h0R=fyM`P38x@;*-}Z{l9I<=SAl9(V zo}?A4VcLiRxut+0n_?LXWM18&<6-{gWG-)5}V)m%Oo{#}ZF9 zHz#A>&KxB!1KdUIBj6VyJ36h~7%sAyDr+}7ZS87fp24y7DVk+O#JFg+Vl>m%=(Nbi z{#pJ0NB8wB{Pamd!;fLhCYqz$vh|r$MOb~JX4fkSmG3D5KQ{`1RR-zkxNs)r8<<$h{OqEy3m@g>i3`A4~B_XpCngIhaK9Z0W znU&-sMMR%!wQrYG&Z!HXRg9c9{>k4r}pE)>d)G(%7M7t|8RRNiXvIQ}PU$&vfGceS+ImuTYuXF^MX;?Q)_DQy2D9} z!{y5jq~e3}ib6C|+ZgtZ4)~h;lHu+oAGSC8J+6AmPy@TK!_wFmjOR1%2J6n0&s}db zTk4#HUD588yB@|~U^_B9GcHLZ5E}NAYahWafH|~2jGz34jrg=w9Y zXC=J+wxg3?^v_&=gP)E5S&m^d&SVv%F|&mIzJTSzof8|j_NO9&1V6v@5|7ZFP=;(N z%kPFPT(KL^FfmTC8`~h{b#RKGqUK#nb|F`uKVS*@x^2xJ4Xqx(Y5yq;+Z#GNEp0>F zhceOer++sPi0}(bfB4PN;GcPv-irmt_lf>j-djDNf`nGvjq|V@!)pb*vC&srzG(ji z7wlg&c;-15f9ONc{^b1ge?qBul-M)0*~Ctvz1lFYse+pUq?Ir&gV|E3IQiogHB_55 zePIzjAddw7f)tFQfNHX?vqMYU?F(DX4Oa6FUwFjlH``nm>vgvR6S1){YI|~vq1G66 zSi_E=<6sPRUzZ^%_@W=@4AdWD%faYY;93rt<{qP6{+hL51?~_>Oo|nvXdg-xX*Zrr z;M<j(4($8lknyWSj3A|CAsKRpW##Am6Q%M$K02I(6x2Xmv z3U50M2uD~4CigJVCav0%*#7)9c~CMmG-JDC z$C}L2oyw+?iME|fnpWi7*Jv9bt@E1(vRqhTR!tWcAEI54>86!QW#gl~GAB>p`-rmz z_>=rD&}8^vS$XRI1BJsQTMq_Kd3y%sq7|440W!XrNq4G z5{5;+M;+9@jbkR2{eV989%2f~N;1uN;GO0?P@*$vR*l*3I0JUVT%)Pr@Y`teYE4T$ zE+B8aJQ!>3Y4N$qYLXgA=JI>%>u7!)en;L^=T5W-?0(0R_+X+Pn}u8+JR2XD+b0H+ zPG1g67U5qX`1#Awaf|GelPDBG=+rUSMKj>4B0@9N58X+E;xf`&!NySg$|KJjSP)6Ee>>smKWLL`82Z<;t*%CdGfO=)~3?us_mcCZBMh> zLkVUSKSlXA?;&3wRy{5Q_^4tHAYUI@cWZE$;?yW>Q9y85cLipgAi}F~QZ;SpKvc0- z2jbkOKi$HlAS=b0P_Qfo$5D;McS;@W7X}lG&zu!HBilR6D3cJ#Es#2&}$8aGT~q()e%sPA~eMWd^d{K|X?uAjw zlnwf`a3?lN4(z0n#%dj|_=axHVS}Y;9v1$ZI=F9u1DIDj&+L1^5i|Lf%#cv4byihs z*QdIg9w}CQ5!^|$Lk=*<#<7*rtgjxiGG>?(j{IDC2fgUi@JFZELQ2-F+CkOjqpI_> zzk~d6*aHBJAk|CBtw<5tJ@b+9UXZIgV`aCj;(@axbYgQ$clfDT0viK*`My{%GLD_G zg;>2i;r|Xdw#dow3-O^qQ?akDAu$$;#-fF>T%e_;HSjP6AS0%u{NMZ*^tYcan*_nB z0Tm}Y18OrR{$NHlw~F^b1d2MKUQ;A@ukd=iD&d19rBxi<2o(_9MTisw5dN=%`3 z7@HUR@{0E6r9IJLY;k+?nZ+_VK?32Lf^? zT3FhgU62~tm|H$CQRwh>rP>D?LupS_w4tH4HsI?t*0yJyiGZ!U8MYcsI=>${Ai;<~ zM*Fc9EFhp`H2`(3_;gfOgs#ge(IJXfBjFj+lWXwVNCeK9_Y}Z|$s))RTa0KB9>4Y0 z2Xbwe25#O}Eb>47?Vs0VWk}Hx|scx~Q)1LaoRujN5q^*)NY_tz zuJtWg9qH;%4otLnKq%O28tC-rV$Mv$;taK>FeHc8cJ?nI zLs@p7#ZV)0hszR-{{b;OIAiJ``~{5Dg&4*U!b44?#MO#%WdOyD(0pj56u+qWu9eu& zjPSA?#?O?RHtHF+&$s2^7GRhr8;ca;np>M(QWP2vwSs)2@Qt=75rEQ`w>cWHIXaOV zUf0#JZhqQf`|<^Rz50OA971?-izJbp)p^1&yi^lyp``&%M~h&s(Wz*k101X~b}8xe zcND6l#!FGARinYrJ*8)OK9R9vH%tix$lBsfzt!Qao*_X&PC&SU6CCyDsdZH2D zKG^2Xgc=80+XlJ4E0yZ*lGEK!4{mQ+-j|5?t!V97F2@IQ*+t!vNPc0qX^7xVyTBNK zPWrsSxA#oNH_iH_#E28VWw5d+Mw}vl!z?3Y%oeq#K|}?BK1=$}W@03;0s(xank(x~ z2_l|7T*N^3AI;|}pkXw~uLa?*bSEjNT9P*J8>~(h(N0tm?Y0Y~VNy*A!8C*`eMyp% zgKIh}n6@}n`Z|ptdt~_Ipy>_-!@>`w#aYLMEJW+91LJmLH+>xTZ-gE(qM1ki*!|=wUy#y4o6UsH;8I z(%PPG+AFua+m`o4_Uyqb<8P2nDeN*)|NdHHHm>Hg%Oh&A)|nF^ddwkd&n) zFF-+tMso2}oJ0-eNrI{opB^!E3S>~SQBq0^NZkMsN#2xESK09l4=`aQge^L;zykxi zhX8<+3p7i5oe@?Z#7|diX@;y|r3D_g`TS9@JRZ;W=gi5}i7QTAzABQ6#smE)#(hl@ zM`1LO3c1a>mCL19R!cQC#@YimM{iSmpsvB<-?(hmKHIiaYHI7urg!?h_E5?rx44Wp zYon!Y)v8^tbwraBI5BdWbPiN3vA0LDc^<}}u)bkQlTPKqsFL{f5vQk6BJ$CzVQ>;y zJ#}ArHesIPo`kEr!-+tmu-Wa4cpQz3I+{j1L&1)P%^gyDOHFN+RJvweU25LarslC? z+IYeQ(JpM)E#Jwnk$wv0c9Vv+s_dmp<+^K3$-+zFd|;fwL$rY9O==E_33hZ^S>_af zqr{xJIxq+sq5N_&kH{!xtr``igjJJI>|1-<+MSl2&f0o};WeFLgRkA`GP%QUTdiXc zzogX3ADh2DoQwL*Es|lW#La=`n6PmwHt8ROzj?`ij7Uqu8Q@DjK54JJHXfCGi$$jd z;}Cwq`v6>{fz+X^logY76OytB%V?h_NoY>YL9vjhHI=0Vpb)%dx-bc@tL1mD-b&d& zH!a(p`0x$;el@;&{1>ICc=In%`PHu!_!baBd7BaXudb|_5fv9{jrl800I=w{bhQ|_4-^o)Zz$eCiBcOe;4Cl~Xa9^jy929Q}dk;^MAohVGDwlDG_QH&QZe6JsRlRfCrf@fiSA zZ|Kf!gxXg@Pd-Xrnovjm#I(=K~7ptrfT zx?a^j^^4k{+Oz!BKdUCqwEN)~JKNKz=C z3z87!e?JV2b!mGoY4*JW13*h>V!?5NVng-ltLuRCe9#iIN06Nl+y`p~Sfb0}`YKVx z%Bj>Ti}oh5Z`m}^#Dm=X~1A&fL4oY3g`l?tbDt;ysL zwq|;pb9op`dY3ilmKEdaM57$805ErPz+}%SCb!fn^)KyXKI)_vw^Tv&(w>F5#Jy@D?2ITEH(G|v3 zWu}E4k+$K{cO>aj5|rD&HjWMJ)bDPbFn+yw-U>>uKUKt@yKcUx@*LX5$?4SY)aS?^ zBbn$iiZ}QwdtLeq*lEKgCPs+?0fSOS&^)%*Yr?7TF1bJF^EUUV7rK0QvoR2kh3m|A zPvZ%RQx9G^)OY6I&6#*6?03w+dg0jhBUW!H9TxpM!wy(jkJ$X!&;bn)F8~6A7}cDdPZi$ooNTn2sRQ zpy@)|0t7|pU)#3ruDhhq9@#K%0C}6%hL9fdL$pEpP|*t7prAU|=rm2GFs>90!_YBE z)dmUBw;l^-tkF6m5x!viIG|G{1Q~Z!GuqfNMq8Qr~j|AH0 zXHtVLfr2F*+lFY%JyJZgh(~-aL2owVXt439E#ME@La>p8<*`)hMc@L)1d3 zk^hQ3haDpS|6z<~ZB%OyqXgwqg7PG6TAb0mATvMUNUm_eOt(R`OMp*B z*%Y=jMY>18)|B15B->R$>Gl0q?(WKDx@`XVIkDboJexIzA|LL|E!ugaJDJS*TgMO( z)ntmNMi+Ipg<}DLB0ew4_jk#u&d!uG>a#xJu*CxLP_4z1KdXJh*S&JdT0|Gt?{K^2 zNK>%Z+TdF^*gfI*49nrJl-mkF5cE*SKO5 zri?x*V-DT7SKhC?v=nki?OmcTMVcG+h-~Vl!BNl$X>e&pW24?x_3+9o z(MQqCKb`#XkDvTK(NkK%1->8qk}2PeSAh*lNrxerG-w-Pz>2^?z(T;33i-bsbRJyN zu>}7gbez#IrPIaqsmW9EKPu;4rxDb;4ons;Cp+86lhE zTLesrCoWoR8pTtOsL!R42jgDYp6oca_!|md(*{eL4+D<3rrH+N6ob-y)D$J1Ah80F zpva#ssBc4kTZMx36K?lcQIP8079bcnPna6sgc|V~02fUVU`dte#}Wt$qC%;>XkX1C zwi@3r#`lY{{eK1G$NL58+WstT0E!VxjWF;*s30d3d17qpsa?HAAD9VLhN;#{iW9*x zlkiH}rdu-YoPQwPmG%sFhVvQU@Oi#agVml}wxe%w@2a-;iT%U#w#umnyVYu5wL#6E zvvkpU8@l5WXKOrQcfcMM9%}+a@k2Dr$pfu^gVeyE_NMcZ&iTGfKGHQ;=#DX{wil9poPYQI&5Mc)N2%X6wL5q+K5^j7F)ajGVUv!^L zU-TRqnCW*>pt;MKFT&1(J;Ft@w$KHG1zkoMEsXMS8_#KUj)l(&FAHxrZ+74cEfarj zGjDU?;vYWeoYF-PKKS6+Ib$g4L*QsP{}^8h`@S8-Z$i=JDPKqmuT^qAXpv;XdIhb= z0zbDV*{CjjK|cwllwHo0$_h(O&`&}D5;H|$Yh|yWf(7?F<9=H{lj^bg6V7Np>-A=O zBGI0V*PG2t2W`HXBc0EuoH3uR2h$dgHc>(SFuo~1XK}wtiwN24< zqVjDpNysy@;*ruZ7duAPL>-=iQ|r@`6-=8iaeHOz9h1 zt(*K`o7tln^H0$`9I1)-Vh4vR$Le+V>ooJN;OvLH&k;XZcwfUA{&Iv6mLaH z%nL*VIskP?4;_RlEQZ*(A#z6KJ(6qG8i`mIEbNf&%U4-tU!c^#blER>?4|qD$$OvY ziv~NN`*l++RGQ?)(j&aM7zfA_9#~-K{0Zo+j}2oH0eb_ue8NLPalvF}uR#x#yjME* zsxd2~uMqNpueH<>heoA9#qyXp2S0P+W?Ke+A-CKW@orr|lAjQ{olb%-mx~W}rR$A# zt@DmtAZ9+tHcMt{2x4x5&DV2i_o5F|_i<9bkv#e+_9`fzA7vuoBhcotLO;pPjiVQg zS)!8^pj8w`ZEz?h>JB`M%>PDCC+WbcQ%T+Y)Uuu^X=IW7vOMyf6p%nAABz{Fy~}zW zjdA{v@c&>prwCQVez(%E@P*yx$d7jy2jcT0J^n{`V*EcnzbGeo)vw5V87&EzLqDvlb)gz;C6hVwQRQyG9Tzv=V4w=}MFtVVEui#^Nlz3YMBm^tIrOgvl zgy@W~P|fI-9f>!`a=B=%xjE~Lx+2|z`bXsXE^9r1yg3qS&PHO*54mjho>W&T)RpqY zL$0RmUVu;;L#G%+jMkc#RVI#ZC=s687!tVSz!>NhD7Ej3*@#Y2P-teAsE-q{tG)Nb z(#_G9T$HW|n3FG?kI*NWl+wYbNF+DklkN_OI%JP0)fs{u?h*al%!a`~h@9Hl$qIJT z?sG-dB0v$A>e&}nNm%#Is2K-wgV>uw-HE+vzEheE63){^@27AwqWOZ24e#a_s+@Kj z_I!}V>7PO#t=J}X>A$l}hH>IDK5s?oAz_=SWzDejzb@=Y3K%eEL!q`q)2vEk8SD16pe|tp_2g! z1V7q{rs%wMx*0iD=`DRCyBENLje@EZxsa{6khLWwmVBWWV>QhB9J!jwLZ&l+-Np=4&%?Jd12U=^r-U=$IvaHNVy7P`FUb?eTD)|=YbQgC-A zBJN!4DVa7`FeFEl^R6KvOXhVao~J(%H9P$=ul@`O8s?y8i8==zY$;m~3G)p0;v|~@ z%r^?S>_TmYs9`r81aq2)0n}2WHrw2c;g`zXjH@+mZZ;F-H&oEWZ4wu+XbPNibG z-aK1+W^@hXxetBok;IwPMD!|qzcs0P>O0<0+tu5n=WgWB@)O~qB)Ppfb$kkMgKmJ# zW6J0-=4Tlh0Gx2rlWPqI6SDE?rXTPF-I4p|w6m_H9Wzd{665$j{{`=oD1W;ZYfAz< z1@R)42&YdxfyC-`EDViz>T^tg4*RSAj0EPCs+^uXjX%e)l$5hyG+!dM3!$3CK_Ldl zI6tu}d3e>y1qy7nHtNBTFozJ5C0uo6%ckr>LNvdT8VLGazP-}H1q%wxU5=GvJO}u1 z_=luDFpQBsnKor9wor=85dyP_{X@v&he)}O<}==9HQ7KQQzPvOcgiqUb%sf35pA8s z|BGKQ(K#~-v;}W5O*Dv>c9wyD2nyk!2yWrmALTTH8K(`<*d=xe z=HqNJA4b?Sw2|Wzw1;L!Q4xqj89|YZ1lPQ=16P&@PEL({@ML*}rtBJ;HJXn}#76g{ z=3t%VvnQ_~dFd(M6Bp`S&0|VY<4UG@lJp4Jd5Zz@1P6u+xz(VbAmQ4IwX_>&$YF~m2zJ$%ZPcn^+;5jgP#76xRzF*|ffeZjI zRSRw|6H`V~Ey*;K*i@wCme)AR4Exg};uDLMq+(=W$_Vvv5o%!ZSQ%*;hbXoSeMgoZ z$x|KE4XGUQOonOt&~!PCKNCqI-*@j&cUyx$B>PNeSe;FEnf7qNk&V{W)|%H3@1JOI zU;U23!FQ}~Z(p^yf62Qk@v=w-*4w-FJ)fXZC*LUpg^fXDeVw!zR1iUTA!_k7UhRg1W&SED<&ch zZWQByMM*eZe7ewPvCz(=-b{ zLDsA)>lS~`o9R|eU1bT1z% zt>$0jzq|gry-#lXIi5-4w@*}ltI&H&-3S|%kh8d_w$KIx(G&RH2!8*rO;7HC|0B#d?FpqLccV|e>s>4vwyYZ#@r z7@m8zd^b8ne2DIlWe=tsPoltIEj5g9-Yo8Jk@}_i(u=UjRwAqP?DjMon-{OOv}^uA zqnmQC#xgAn`VA&qgZKksUU*Rt@>tOR^)Q{}qU8mOU`>;4j4}xZgl<7_}K#Jn_cLBlyR*dH4SU3GbW3H z>G}nwXOn1~3$4Yfqo}J7xTkETS;~`1;Zr^rwt1zJ$RiZLUH!ap>iV4Z6#LRwr!H2V zZV*X!>U2ZhpQUR$YWgk_Y=}q}!T1!3&NsDR|G@e4*=b$Dq4SSVdGWveUOE70>U;l= z^Wrkr$J6+K_?fm>u~lI=5-X;2xfF1aBv(M5M^ODxgfxmQ}X`u(uwZCBZIe39`jw z|HwG>mU@^ZzNF`tqs&UMOrSG^z%51VB-B8b2%v_N>mT>=T^g`U19llS(J0V{{5vhU zOZhA531t_z2Gbci3iRkGdO=bI@dL>L12~z5;Yhnj5n)XVE2zMw7D5rJg2$Dw<>ZR; z#I47hxuv3J9eEoWTndrraQH>PUHxyc-haC*<7_ z_#^9hJ|pW^HJ($FEeeBC@H{bXK7r?ok})F(hdB6FXuc=Rl8r;3rU#Cam;-X8dS*}~ ztfe3bhz!qM*%~lVF9L+VPi?4F&uk^*Ej&d$zLmS(__0+FiGt#);61R1dl= zgdYL|O7>vNw@iDhl<ALvWGNhq*Rr)>KAs0wyq=Jvm%<|l8 zj)d*%0T=t+y-VZKxN^2dqH?yyucR9$0#Wr;3)0&t;DxbA04v0T(sUkg+zu=XvIB5I zU>jg{!}gAj?d|P6C~uW{@}<<)6q-`=!-;)t^VvtHo=B-sSk2E*Qh=88m(FiXi+z(y z^p29xf>N(2cQw4s5gO*IcK_>msqGx4^+1fdEbFUv-p(GSp-R6$Fn>t71BX(QEyqY?xuA$bpBtA3q+>ua6 zYkR0`dD91m+qHxub*6Pa$(Dqp(UOwtq*_azHPr$z0*)dloxtY|`-CnRlQgWs5wsYC ztp!F=sAy9aJe9Z#H*|ZC4nf*HAw=P~wegfV7bTKba^c7z^|R-zo04Oh&f4HcEjw?3 zT*ZmDPYf=~tw0vkemzg!lyiKMUHP}2siBD$%2Lr*df9L};p$1;!f1bviK5LZcA#1} z)c3!WaZN;mh^_8$roTUz&xE*zkBvogrEd{TvGes3n^jttZrBwtIM^1cRQow0ogk^vj#2GPGf8z)CSv0Un(88d6gEZZ@G zwEvjMYpP;((9g}7#K0(sn0`YW{5lkf=v|w-tzFaRu(2J6Jmn;vBzEg(U5OSSl8HF& zjtr$)Nzb>{)=1-AstY!HB3;R3OVHIKEt9&v%`qqS-|PHymeE%kMcu9!Dh zZ;U2uYMb1lLOqS`U*8Wz)A06Um^bqvVpuK(AW4VUJe%N2m6#PC+>O4iVz=;{_-mM4 ziW(iGxk>6p+SsCHG*D!L%F3=f=E9l-Bb(!n(D23V}dPN`x z?T(MNA4r92p`oYwC;|M<|3d)UzIfiW={iVbmpH2 zu|kvJj{rQ$BvwET3JB>el0eWIH?!+yntX-K+s76N01`PEa_#|D*1DU z&JrMI5~xxhRcfN^;niE@#EEnQg47W`yp-HKN(d4#rIJzsnRrFk!KsitePZH3Flzhs zqIkT-b!c(NS)W-S^ts(HzB0CcDu8N$OH6tSG)sZcGWLKHw>gTgD0^NNPc?Olprk;C zMn5V>ugD+@$58a^emvD*p&m1!q8d(g(eJpRLg|&bPzRKWs)i38Q?(d)Mx6?=#X`hC z3Z&jHsge%NfatTwN4;ji{B4ml%!Y19G_tU6NmL}x8o-!lq>h3nzzY$`Pu9h~d#@|q z#}`Oa={9~Mu_X219_;$K7?#(ZbcOV!^rpdYSYS9@v!v#GwZpZC>bBJV%s9{ZDHAhI z)JyeOo0H~mTJ|;6HC%74v7T=IwQYfIr|rGAuiMA$zi!;p__Sla<4x!J&Zk}TT-UpM z-22>r^33zx5lv$nv8xf7LFZ^{XV`TetTkV;=75zCVP@+C$Ew_<*Vd3Q)j3ClJ=&*m@Z{j zWzNjpo_RXEAp60lvzz_Rzs+5e`&3JB%i-3s)_1i&-ZtKLReMeQhugp1G1&3#&d$y! zyViDH-}QR;c=x{UTe=_2PvqZ~zc2r6PeadO&s9C&?I{)Z7oP8xdYgKOd)M{u?|pyo zCwsr#`)tux>@2P=zCQ2Tc|Yz;^{wbTsqgguRsCNXFc0(({IAxoH72ei3V#DjQwbpi z8$ue>T&-G&E$kLb^EgCC2bj{Y{?ZxB8^Uf4!i?h$U%{k^g;+!ebO57#GC3{N_mo~bR zT`jzaUAtU|T+^<(GFw?{S$o;R@{ID{^6`qgiqVQG_o(}ijrAL+DpM-;%H372suNYS zo+8ga&!lI@^LzEG>X&NVwJU0K42~vanytaSR`X%{c}5d$UroPQZpuagx#R=Max#Ei z@@dep<&Wc>)i%q&j3d|%%fFmqcUk^;D$Zk!LD@LSqMT=Nn|_64C5u1;=T}SB8p|Jx ztt!j%+o16*T$3h_y3s;do(QPUTJYsah!JBqi6~V4TT5w zKzC16bL8e`YaN3c@$QiBjRr!RtJ?1i4D>hZ-e9D0Fznar^pKXeDG*H0UnJ2?ntZ$6 zkzu!Q$hT)_Ijf7?guX$>=qE)TVM3Y4)C0t&bK2^{ShOYaWf@eY}VLWZwt)5GSbz_OY2B(|Pv9PWgd=#3j9Ed=D24yQQmL-26``Iu)#uxYmr|=njy3dsj_u*c=j(xbB zy5*(V11GMd0^-FZY$k8uS$vJ}F@taL1HQ#~_!4LF70zH5KjJ6+Oxu(=Zs4E8JbuBi zI31S}9O&yy4Eyy!$k*u)M*X_qx2)gWsfU6WMY^IrgW(>3kisA)0WmC@I(JU`C_>^{ z2kck-ywMnO3+C* zuv08=o|T53d|gO`^9+skRT}vtDaqecSuZtHrE1otdpohRFVO9UX1Hk~-4~?vnE8-@ z`ZDPwZ>B5u_DSSJ8l|gJL&{^}T zJft9%>M(Lp(MYtszx=c8Ve>{fduAO#fz{7x@@&p6T;$ib!wyB#!#x2GADZl5+-Cb<5!AHi%L$mlicw@bUx<^F-v4ZV(=T~L{VbSQ^in@ zCJCEfgekUZSqaGz!$k5ineF2;N?I(XHbPmG=Ya7(VZBfAT}IzT)|H8s=K?f|t;fbN zL%hW|VfbVhuawFRcfbfY#MUI?h6rurZ$CM}DG0s`CwCGfZ@S?Q7;eOHqlVi=8o>@3 XB~k1Rgu2~uZ=)MaT-1uI4()#e-X%@C 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 b2b6cedb8c787a029a6d0726f12d4fbeca79c1d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1213 zcmV;u1Va0XP)$qMKt7j+5>S1|zxy$mRR|c_{PQlRir$FdU4K+XwHaxdqdUX-mtxW_YEeN-E zz~lAp3r#}lRW@0Y#83?T>E`UT;CwGR-Aiv`;@TA`UIhbZFCcbmu)N9Rd%s~Xm4GBw z1~~BcdBpmM#I`H^o<&2c{mu0?suJe3*lJ1xHob2JDB-A zv`kt&OU0Mb)EvQ?%b&s*3}J_Yoc-k|A$ji`qZLwDFi5y~D9_5X-!hvU$Zn_6*4u|b zs1aMVDR1n^#|&DQfh?s#f!acrKqcd=Xo^G;Y>r}S>Mt=b(%n~;iCQdQynpNJ-5OSD(yaV`%|x1FsetBI`Ws!Atnj1q&CgSWr` z7P(wbNY1AERdfstlFZF$>l;97bqRm|{3Cw9dWCY<6#cMw_;t7ys9=y~=A?dhY*Q=9 z&?&(Y_7Drs{V=r)f4Et&w)SLJe~fdlv`!c81J@`lWPpF?AyUNw}i-NC5_3i>0Z>CE_d8gQ*Fhgatw&F={o& z#Y`&vR*&Y$T(YG9SRjM5Jj65mhX5Y{dhH~x8&p*Wf bc69p(Q%xP_qmIET00000NkvXXu0mjfMC(7k diff --git a/source/images/abcIcon_gray.png b/source/images/abcIcon_gray.png deleted file mode 100644 index 573d9792a39c2a5d41bb85876839015cc387313c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 813 zcmV+|1JeA7P)>y$TC{ZFV ziGl$e2iZ=ffX6f4#iDy=x_ibTl+0+PsmuB6Kj+jre}&}Pe!_?ECZRDg9wl1y^FL{3 zPq_V*6oWK@9(W>OnzJ|^1?9|IsClLOUz)6yf_zvHW=*?BI>$A~)o5TKFB;M6noiwm z9@X|^$~h^V$cqWkG|26Qq?S=PG|ib4L;0wY(`nAez-^HBj#;jw%H{vM7^xMr)Cfc9 zT%3{N7;yIV(>OPIHQh~A*JcV8T0xF8PL(yg)VL&Ni@;x=$OE#->?-PA6+#rN7@DNyp~trM?b`7oN`*s($9An*_bs-p;DWcE>(om`9vWrGZJf8} zzF%Ax6bj!sR?564I>xff=6s7vs-4ectHAGx`py`5U}!;UWX(DJ;iff7Qi`pvGj_L1 zO3URvkMwmZVICUzX%3UnGD)4? rZIxN}ocyEr(u{gN)m!ITKj;1d*B?jyesyp300000NkvXXu0mjf86%5h diff --git a/source/images/arrangeCarousel.png b/source/images/arrangeCarousel.png deleted file mode 100644 index a92af5351914aa21f77cf63384b2ede4ee554d29..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1674 zcmV;526g#~P)@IyKw{BVrK+k_RjRsak*cbt zu%oRCqJ&3iAQ0^4VbdgbZ2TOLXXf^tGj?P<9^25Ca;2jg-??|rcfa!-1H9%#x_I&8 zg;%W8LMfqSQ8FmG`T6;pE5MtHXQF*lbbGz%4~6J5V^qp%y;$1Hr~mpT@yER{aq2P3 z4gxjz09;J%h~^jcslUH{ zbtY|kt{Rs8;(EkCc2Q@gXn+);n>GX|XWtL+q;F(XYoFDF2&Aja$(M@>d}*~@ghFN; z^64$e=XPN3o%0|msO>4@itj@(Aj96xpVJ<&+h|}q}D?VM~}@S@H`SvsKM|| zXngW~F15CTtMY2GYIaYQ=)|e`BUoR41ch9dnc25*A8cmQ;PrYPs#F!y+Zj+486;T- zAI?{e8W@HFzg_ztg2NHeG!G1fA}~622vm>PolykoAK8Ba0e;N@C8>)o$TtdE*j!CO z5m{3-6{Al^hGY%qt8Y_5?EG^?+G}uXxSE+7?rZ3 zIqpaY!u7Rk6_Ssapp?tNU^oWBCi7^UT2N0SV&1)lAVo-8Obrn_9 zAT~Y$zCZxlF*I9MrXMYWCJlxo5FOi(%1lZwpjUNH6(%xCIg3n8Vv*nBfhbzZLp{hc z9mZkQ=DnQ-_aS>j=!1LoOHxY;l_^N}2!b5N(*=h@>}zCV+QtD@XRg5{MJ)TAplqWt zKxZB7M*3c{F-W2?5FCV#`kNW-3{d4496olOSt7P{RP6D1IQce|(0hnIGP8z^SQbUE z$^O`2*-Z}29N`0X(%;?0by0nOm^yL{{QdxgF?1d8eONawhddzmCLQ!Z^j>O=g03q`>o8L{M zW8=KHo9>6tJ$3}vyi6nQe?Zc5M#E?M` zx`bPqwQB~|M!h#cUZKH$%=p8h5a^{M_yYkB5-Mqpp3W(ICYL}iD_t76P%H{V;V?(P z+o+WbNoo`vfJzU5_((k4hJDHyv4Qp=($^{s2l8Q^>@j8906J0zAi#`_bJ6c(U{WBDg+;`PI$5co1`A zap9BtH;Lu6TXKKBxrDXz#HrJ8^2}K*dx0JYqDH{ax1$r29B6Z=&pOR$FaT~kS0CKH zoL)~{#@pw+dKWU4m-tNkcL(~awXt;nhvggBKWhK%?3=;=YE%mOt;D_CUu-;F{Jd^j zqs47x>D2?obd@gWvRmoo+V%L|-@hW(-2VDduYCIPyZ^(VM`g+;DBHdMJbLZN-^7HB Ub2o>k4*&oF07*qoM6N<$f-b}iOaK4? diff --git a/source/images/arrangeCarousel_gray.png b/source/images/arrangeCarousel_gray.png deleted file mode 100644 index dfe51cae4080f585fef4dc33bf172f6eac8e688c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1016 zcmVT7Xdij|!oy8e zWZ00)qF;A@@Q1U%Vghzvfo+% z{KxlcHKTyCtPe|7^M46;0b;zaesk?zR+@(Zazlq*M{||Yl*0Rfy5R8~(E8%$JG7b} zTs#&`M-q^^k6IM)^jUaw>&nJQbU?1?D7_RcecNS|HXUBY;W0yb%(9-)N7(uO@>?u5 z6X(aQ2?zX5mo)$;iTDx_goM|b%)zn&%Jkx?*EZJZy1gN?if5Hy>0mg)CRG$m8;7C7 zArW6OLzx*CspKU}AsZJqKBMalpn(j)Hn-?fMldJ|C88h^OM+#eU4#mTMam(sX)u$g znFePHrRZ{-yCgYrk77vh7#yA$16Y)Z6*|n)U^Wk?JVg~;hM%y^5;2xK9zpT>&jW_T zg7}3V>#Q@!OB@@-DIr1tLxkXf7>6&2*ar#sL#_t-wm2$CSSF3s7%UcpGAV(|2XjMJDsN{M-SX>B;x+?= zWuC`S`hjTb=;)(3A_OHVeUP)~Y>=0P zQHU@#*LaQ^$^kVz3Roh93Oxk!+$DGt94E24x54I}dj{62@xlWl4 zO2kZXjA?e*rk4YQ@&psO!mbhSeoF_O9cexsO zbDme2%Wb+_)fZ(qLlsjL*QBJP7X{{Ll3 m5lGnM0h=;GC{gExM|4s6W2PH z%LR6$s@5hgWeUrQCI&na+jxJSAl=cmHCCZ%J&TpYx|p)xOs^_F-F|6p2(;c~oloo9 zb$46DKS1jvtJY&(41*IM|Nbk@#S3ES#)>FKy}{nY_c?s>3%*$r`*}nSMOCx+@B^k# ze#SKoF$G8oHI`~TVfWql26H;^Xc`RweJWxo(7&$*ZCM;LP z=s*OcmU1-4r;hpMikKWA7-R7vupQH&t1d)Z=dfpu8(huP=`)t+r^Mh90aKLJlLx%f zcn%Jq;g=WxV%v@9V0!d2D=Q{0v9@^LLeqc2@$z^p2s56 zv%v-}AgWl+5!m;i6cZx!i4!UUsVh$&OC)+W5GsO-`#ej$qVPqigC|tfPHJ6~1j{kETv5>>6l}QViu)+-sb+4t;SW{;k47t+B#FnP`1o^)H0DK~ zMuNdg;sqTnIs}hLaGBJb3tr7LG2A0UnWS-^vT1BRF0Se%tpr5^!V!G`N{>kq94=xP z1eX{HtC}d69${KmmJ$UD3KSD1i@^+g7K<5t-s4p?_hGm;bhHSTBZLi>4k%b7tTD7e z$x#v#B02%&qnCx2}Y@$YjlBuV$CEdo|={#P+ANv4K;$&qBJx# z_$Z~FNC4BPjZ8Ap(IK=r1V=}Q(9xl|7%(>>>xZryhR*ORubUqfI1j>1T z(^zJqP03KbV9+741vBfPis==S^yg3?kw7e{SOqbXI!JlzGgz#hbZ9uBM1U153l1sDLFxT&W;)=Il=IZH4Q?+DQ5Okbn*FIuABIJ^kXrqa$kPl{4#36*0<2g{H*FMk4$zhxF(?KNVy{3((JWVD zCt!eouVPp>bb|n93dV)AbCCRjct@9XOg3M{{x3>1j4`>J4zqA9cN-{*usTmYC!Q;_ zTyd{FrXkVWmSy57vyaZ3L)8;BO~q(EP4NM^Ha`cwkS~>yhA>Q1heO+f zDW{)PRSlMDlxF7u6%~n|8|dh}E&5ZdD=6j;(G-hA&mUoDZ3T(mTizvy=HQLZEN=wk z0-wkpq_LMua*5>wf9|GW8N6iD8xiG>W0$In$Abz}gnV4qX#9$h=+yp8ZD8&F8(hCP zfmnN@y2P%`nxe=Nep_0A;YzHL#2oCYJy-^)g~ZrsybV2LM0Tudh)Q?H&k)eyN@*I^UL&b|S34~}{=!`!PcK-3`d*yE??A~A>Q zCvhnc`k3TkJ4vh+g@h#+JDz7mAuru;YK@_p@|+Z)mtZl&#z{&{rxN25}n9pGl;ca#qh+Wx8Z1hRi!=1e`K+;@EXOVlM-`~ zUR6S+M9p7@xi7*2b`K2U+Tchjr{15$yO%Fepn4o3(4!Bgs%Hek#mQp}sqBSIy!z=Q zdWY}GB~I^QC%NS>@p(l5$e8~JG~p5-(SB(rs8GtaI0y!736%+h)Hj1XKls+-pd#ED nMl{+2ZT9)INA>*YQQgOH3NTrQfxB)T00000NkvXXu0mjfmWrrJ diff --git a/source/images/arrangeList_gray.png b/source/images/arrangeList_gray.png deleted file mode 100644 index d3fcd84216c0341a8dcb78cc8ebb91fc55f9d434..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 709 zcmV;$0y_PPP)P|#O+$o3%f^Xt`_!vHc51?WZTnJq#E^AvvLC{hs zGs#Sji`*pV-o&v;?=WE|IUoOX{^uj2oa~Wj_v0Ii0F20}nCo1I^&B3jl@vYg9R&~+ zL4g>t1hM0t31j?9tJWwsraMQp*UpWVq6L%V3-dP?p=bVICnv{Ot!JSEssu$p2}9=V zNM@Ay!i4qzr`9c*ScEmI${>>k28N!MO!2cwSr_13l*?LwMu8urhJx6?4l>%@+v7r% zLFI^Fcrhvh95M$S+A~{At+E6tJIwgW^>9~$VZlr5)1e4&n4m0EQsLS_JtYDNm$(Xi zOp5KuJri_elm*rNz6+y0R-);wofLwLz9=Qw1GhsoyhKAAJG`Hip?dbvR{qClwdT;nG2 zh!>1G&Esf#W@N}`)udDVi^wLS>*j54B@68vU;1^(K<46w+T6L*D=P=J!Fb?nvOFyT zZg31YvJTgfB1x#0ka(TS;6|>sGQ4H^Z@Z$ukStRBJA@oJk0#%^(uQO@q${l9pFbFc r7G9P@Irb2%6OW^!NOLJC{W|vt(K;U*Asg(P00000NkvXXu0mjff$l_F diff --git a/source/images/arrow_next.png b/source/images/arrow_next.png deleted file mode 100644 index 3a814fde8b190aee1228f5a6eab14b500a5a789f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1765 zcmV9q81Owy*&Ho?fNo?uFnK>Aq9 zeed;`9lbvT!M)Q1-paZx+9uNNrlbnQ@+xv}OPW6WWZw+T;-hNKr)?74YD%g=%s*>; z@5+^-h8YN*wfGrI}cDmctas*;}p45f* zFkKNa1L4??w7rN#V%fLQ{iY-dMEpp3zt*UY8JdPm#(AQV%UI`E?95A|!0Slnm&)3#fIc1~j21{7v4CvEmR?1Y z5cvaaQ`lZa+eEp{6n69)=~RNiRHS`la#i-RK>_|4;339jfs|2<8MUQ15apN!(#Eh& zL2Cgub-^X3$W(`PhyqjX5$KoSLQHjhlu%k2HpIgjBL}CDgb@MK9$KuVBN@moL^W=K zJ-JP4YU-@hO<@O5kb1rQ5LQsF%MXXMl!~ED3}zi z6e2}a0^COKnk}#^OP@_mopQD*xfFrlrq-xPd@M|KC6BXk?I8<^h>W71;?aO$>dt zi}+>F-6`h`6nN3YQUvBlY zK;igVI$rRg6oChCw^|?3h_=BRHOoQ{!$3BodIXg`4>d?Fr4FeV1ZY5hEo#me-Kmuh zpDoxc@OMpn3W*PIF=&f81`1d+3PMH?B)1oPlHgp=}i!h$V<`EMja`6tS7uDs7OwB%Wf0nivJL8etwv<3IN2sBb zb-m?zECacW8Q(cGzGL%bnaxAuayF$H<7eNcP+hl1G>d=H;fDTApqTx4TCBr%Sc^eN z28vr|Gh`s?3o*{-Gbkjk00$j1+J#p4l!*2OUw8Ddz1t3fbL`61U$YJ(9me`p9L|-K zW>6q0k3c~oF*h;xF3Z7b-2yXjIBf^jUV%OtwMisCve(p{j33==<7P-iWQ!nmR}pfa z#Hr0_rnX(@+bq*NR$XtjzKPuF%XL}852B&RQHvM z%)IH$$>}920@ufvST`i2aPk^4!or0S2Et4XoTHHZc_bX`$$14%a8K6smy67-a`u`? zZm+$qOVHQpeF>o9?YMkd7asul@hFC}#<>B~3Gpn6#W^O%XkHFYr_P%vN zC@WJ24{{JRz(ODrU|``lgDpLbWl|qy;vu-&AU5;1E0*9-OA#1Y-h0QoWWTOWKh)2` zfj$=YBm3^#@W=cw{Vbd_@(@%#Q0Y=L)X+;31(J`d!aK7ecW(~|zCA4L>SkeQw=La+ z<)Z^Qfvp~_5}A3|mD^aWNv9G7lG(BH>!NPWjxHXycXHsKU$t_u86l~E53X@^3t~TT$5wEl6oGW!CEwh{89s03VIyTv zrv?1AM)#VbhU^wN`>UTdW|kum%g0ImTczV|Uo=gF zck0}BRD#RCGfNn0l8^=adZ9rzW{i~ z&-u$0i02N79>+k3E}I=>O0q!uhj?a%ryd?J@bU5ZaNqGaTtkrYp$@K300000NkvXX Hu0mjf<`zF< diff --git a/source/images/arrow_previous.png b/source/images/arrow_previous.png deleted file mode 100644 index 20eb8a55d20a2a241b1a1f20453878944ff8e988..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1767 zcmVW7^1PFt)`%o7FQHS z5h9>K8I*lwQD$J+Mv-NJ8Ma|x1cZSzFbJ~DTj4{`8}4ggkc9V?8Kwz0`Q^^L@7#C( z|L~T(;Nh`cmdjI>HP`OFh^+kI3&faLkN_lwaM0b1$QFp_-avwcxb-T7dabJRCh4=% zUChW9NMeJ9^P7@PS(_U<%j%fYR1*KJyO@zB5RczS;)Qcw8D{NQ&C~E+`FJ~tJ?Rc+ zWDCUOHRA2)o!_b7+RDQR^&EVxxnDxse_CoYvIR2N^(SKNKBLvNqmzeqO&qL8K5xeOxUw{I{<)6t~T?L0)c8oC&V7D8LU1&z{2hx8h+`fVQ2Sj?SsdAdKmD! z)tE=F`>rd^d?=ccDNuNZ(gSM-sxDYr_^qD?zdjoFJ(y)b{yvBt?q|R=*_cJH{i-X! zGY&IK1O^y-??&2K2ppi{2;y&{;SbAf9e~F|d(a>Q8&nl)a{U)vY9^@0Vo)M5W|)2u zJVe8(Aqq}dDL5|SB(|MF&JWYDHr7Q$9^sxA&77?5H^h&!AXnh}xU$U4Hp&tF^99wtP&HQMl)&StV4iYfr6o{V-!S>QV@kiN)V2(BC%r_ zKQz%x@?3GInRi4p!8Lsq*%K_pU~(k_zeuc1xjt@(1Vl9lq3s5eG(kZ`udRjT3Urp4 zw?#8&YkJFdcE*ud5THb$cXnN3+N2#)=Rs&!BN zLW#g%^2|4~>~@%sY~(hgq40KXwU|iGU5jnzEzwL!O;1@J%R(VdI}&FTB%-Vf3EY3T zHCaOmZI7cx@{oL*g46ZA29o#t#hx}h<})Ft?ouk$kS8JbG$)A%THtr~upMLx?Rx z^ca86Nrnyy7tQRmnOo3EGchEZnkz_0PuUg{=(dK;h-r?geEbV7B=A&qce;)i%s);( zQiv2Y_!4Qg7>S{si+;=b6*TGoz2)#35}zdjBg=pifk#U_QmgRABD^T(qD68M9lmtJ z+XrijA>YL`B+M!=Ip#RUEd`AnhbB0vM?rOjT11J!LwDLzsu>o_XcjW@buJ|fxrOA| zX^83`G803GoUsh$n2`Ni(5$OtIjBKQD9T7sBG5OlG1-8z704Zmg;f0LiliZGBx4ds z7Cp9RV(5so*47+f99$e`Ak4-<1QI#Ix@JBk zUE1}@ZOSc}ZVIAdkt91=Rj!iMb+nC#KL=PiG01^uQgsF~^s=iK z;TbzKfI^rkC!79t&{ zv*f|DJ6^j&(DZ5sX_o`zT?h7gB@4)XAwu0u}@t#S2s$u)%nw~3>8-{LO))uCyK zvQEPl3DMZL-)J>1`e;FcDMbRMeSC_#^bs%vmj`Fy5)y`l<8eq2<=k(PTvKudO8e|A z?9zu0%)kZYJgJ4gpZ>Qw_RNx+k}FW!=V$D5)-nUZgb-w7fFo>U;|x5C3+i`xraF3Uw(`3LgjknxT&B;Ei3002ov JPDHLkV1mxtLW2MR diff --git a/source/images/background.png b/source/images/background.png index 9ecc365b3e3e91c1e164a742b770b6df66257a96..6f85d7ebe9dafe9b82a032a6c3b8282bd8fecc15 100644 GIT binary patch literal 116903 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 JukRTsU-vk53VOi`a6epmy66LQ zaR8b%fSzr4%~9VV=2auzI{9)*?d`ZBmk&d+I*!vUy8DwDc#p1ENkg~DipDQVT!iI) zP?9L{_gDruu)+i3*VO^j+^r{jZas5bk7KFYj}Hy@PHx)+_xq=&*kkc6Zq{hsSG#dc zR;EZc5eW1TM&p9sn;RL3+itBYcP>H;DNA?=K02mQ25D{vb|{rLQXu*oVX|_r&%u3s4)(<69IlNLt69VfR3Fo z{GYL}8f7~0>FJ(^a=Yj(WTY$Ho$Wk@U^MMEe||p{&6S~>xrMy8ygBsYtVRCW6<8SJ zb!z0tQJZI*sArQAZ-|7QK6ukTWPqTBo*z^5^6^?*xnp>GdZx}lcxBUw2;STrsd!D~ zU+^?;Bjq5Yk3-@6oLy45vZX+Vp#yEkRB$t#uc2O0zQWlSk=AOe7ucr0%#fiDBQ|?b z9SpGT&)@-I+L!06R&5tbf2Do$SKACM;S?r*>9oJQrPF+|Z_;VL=cKCX#t{d1lKp;5 zT@ogC=;Rhkgu2Fqzhx*T>V~e~_y=w9Skz#xA07(0Hm>59n>38FVlvtlCJK>svRWZV z^Lw&|?V-p+tDuV(c;9MI%uzUL5agYnULyk3nYxA!Y6Aq~C?6|kLLK`mQUME-C3uM8 zuJoAE_Z@gld|;D#W@hHNW1WDMR6Ow9 zL`Kd;rr4M)RkdzNH)>o^7sTpS6I=^T!j5~-xkJg?s%7-w5O$4_3 zK1^KhsF$)a;EcP{ye*!DLCkWjKz8&zm%zDrq7!^-uyl`*>nZDVH8zbql`UxGyXZBk zWtQj|{v*YUY0ha&i!vJy>1==a@ zcioe%SIg8G*ztLtudb`_C!UuY>QsDkF~DQU=BYUUjbG#$%+MiZR`ef_)843&kYCSf zKw=6ptUCLb$+kBG4K3|nk(|JI%InP4;XaMV=4yOmVj9GQu>|Xsax)$r?szL}BS2O_M3g-btdiCo(+Hw)^u@WWkT^;RP}qJFzI0|N5$aL@KF zpzSZc3fIUIsC`4Z-*Um6n34o&(+TnhAz!tp7Y0_Zjh$UTcjK%FESun;vF+C3n5E?5p)fbUW;Cu(#+K3dp*%*w-qnxpQ@_xSHG>Tl~`=1O2TE?3Z8 zJ}Fv$^WKv&`Iyl+FTmq;!L0eCK+!5`tW4tAsNZ`(CW3j1T~UQEH~85=Z2}(lD_>-%z^Oj9Z0BNphoiLs zLD;lwmDpFX*zDzn)(+ zJy?ihaBXD$x^JfAyx2(oJbgt~{))W)FpA$YD2Nf(;5Ja7J>u7s-(YnT{bqN$2}@U9 z=44nH*-hIHfi$isOIL^7UQxTjKsQ@P_KUBfg~&1LPJ>EQ_f|H3v*twcMPL4Y6;=1m z;rlm;yPLu^+xvjUx$jgoSSus+%*WQ}W@ls2z!IQLUbISdhh(|4d5Sq((US{5#cjRL zC$$a1i_9LkVruzCLt zIs?I}j@(vkWttLJs^{jWolcbxW%AY^xN)0QeP3nrabcs!fccwf5S)BpYHybVMx6Co zFZObQdEeTaBx8$2LPSMK9?J*p=zhV)EU5t}pKnP%KEWBI8|QVW_jggqdaBhwibQ3& z3EO>7M)VA8Ln?|RbJndD*Ag@|{FvWWvU7!7(lpkQOEhC#LZKl{eUvgd16zAV$=}~FuRVi|=3dJp^ zS=q0;3}q>hf#TjKq{Xrq0Eb26437W3oQ6KHm zR&mN&G=ppB)VBVd=lZ?Yqvb#WF{ya8x;JEj`mxjwUTm7R*K&If3oH;o&i+0HH8v@E zZFjyF*&~0W1jrj;#Jh`4C(ZA!$0a$~&;-5ka@hXxC?%8;v~c8>s{GrrP!v&S5PeJT z$B!Q?8xWuleE|1fOMGc++Sfej=ouL~pi?-k*uaU60k1ug@Y;IupDJidGa2&ytjS~# z-h`QCFz7;*dQ<9}kEx%@^S{9MfW(P>JTX7{#a2Zn*83voM&Xb3!ySJ|7*#fn+0Rd} zp+m1X%xBqBU1#)DvrwP$$3{iVmLu>4lINSs=>BZ$g0vNtbI>(NN$gz>I{~wN?vHEn zQv2J>C}9cl+*J>$_{-HghcglzpBn!qMBB$;zGtSB(b}g$K~;Qp0+lrGrLAEM;^lQs z@vYY}T(NKJjQ#xJT#rTD|KvaBnMt}U)UUOje>i>WRl*3Hsp#9T`J~WK6?VEXI%MFj zj_HRJqn-Dok7EIYNwbo#yAxBPfacbsMEMK;6Sl-sf_-=^d7yZC4CHXmCdKG%d&b1A z5BPT$Y42lX1J5n3tS|;rSO#W0&P7{qnGQNhKt3%$(8tOditl8g6&8Cqu0*;Dcp4hB z0`_lS<3(JF%`D?bc71U$a7jcf&=er*;|h<~Vu%kKMqhCLAut$!@4S^)Z`GMQY+#@t zdcG)mv&wRV@q@S4=doS-sfW#MrP+tV!U51&j?iyU8?s7U9kL|lJTDZHmSz<;_&VW& z0@K{ku(P6Jd0`q+1;i5&mH`ce!YvR6gHTa#!>^Yw*o5P;59=Tu5UlV!y%p~+6IYbCN8$+smb7e z<^5OFOcir3X)n<~^rw83F1H$H2l9{6O@%(C1Bl&2JShK?T?)4c?)fnE^thBeHh?O2 zd?P}G$b>q!NA-xjom65lr@=|3RIF`#le4z0kD1F?s9I~pUTyDh{`yhvkd}gFvkvQX zJxyX#OKWH1o}PCzh^h$(!w9o|VZXmqMl#JJ@vbr~5#wT9qrH8P-!{9Ii-yizhME8& zC(;$e-Xkw@)~HG#;%ZoPBIKZV{={!{#mZ&x)9-?BU+|ST!qOFZ@F;GZAvwmfw@yHZ zYB*R-4p+e%NM;#8$lv)xI-fKw9>=H2dy;_dMJbQ$B0WU!Rx}0wJ4Gc2J&<)kNaBKY z?HZC`7v8~=q=E(1o`Akzh4Z6e*RCLs)+IcU0vrZa{kRpWA=fZCD$cD?{^eYwd$Hbw z^DGM_=E9yBx+qZ2_oLBlF8qcAy&E-p&v%ze*nTwCwD}Co19ld<<+_Fhq+N0w4uJY0 zXXr6!8U*xsW6sEs^zSAfnBl8BH!MnXGaQE$;X6o z7gdZ{Kli_W{=(4c>v;wthHsh3v3JrvkyN#C4Wde^i*(bZEbYAhWtZUk+wA-0#Q%gV zCg_v8B^JI~0S$i16;{YQB#>_VfzHjwzTn}I_WDYcB;)TGsH0zxH{2c~rc*QFu#!2l z1MS)N=jG)!e7havEzz}cEg~X9wHpm$l>nPVw-=w?#6&!KoIYE98-5*O(edCxM%2e2 zm=Ew_UrL`~h%hMxRBREGY#VHDLXlHk|M{Cg4wTIJJVw@8Ucof>?ZMlCKhIu#pl9eA zTl`7M@VWw%d^N2qlu0?V!lc2xVceFV?*9EQKt$bvuz?OeA`fHa6Mxmb{8?))9dcUC z8Gr5@(0O2ceJq3CMm0ZwMrvg7Spjze$gv-Ca(*!TEq&_f7^H58u42B|{g9KVoN4QK z{EPFc@*H3=@i$Bs_b?s0FCd3~{2}C=+IeVH50L5n$+>8*R-Sz5vbN$(xzXgwk;ddy z!8+QzL5|1B{Z|&Fg@X6?D(k>z_G-jn@?v7qcq~C=3NKU7z=~3NO$DUD?3?M^j`K{b z;`>d%^Yjsl+t#%G_}(a9+n~yU$i7!q+pV{&Gw* z%#2Agz(12gk!NT^JHy6CIF-XtS}JzFk7m;(J9ux1_7R8bs7>*`;PZL57dAhIiV6eHc>vAQ|h zI;8rQX}Lz2_OPm;J@U~b_u%wqf@J?@U4``b?`VU6tKj0+_)JUCzlo2E!U3JHZ{g+X z_x9n@QK^WlUEr4ZZ1VD){;3!4Cw(FMd$H3rWBT`ZoX1fOOFw9Z%M6}Ezy=GAy}iBw zaXT_$VPT$gP7!k_o<|1Y&k{bnbO6W@LJUR4qV38KgGI1E8rXV-gfQ#K9APi)eGga$ zZ0w-z;{0bmKzCw=BbwIC{(s4H6YA5q_b)H~^W=i*4XVuhfO3PDI;5}4u{VtcaUS%a z+NN7@#LzbU4kxb7!ug)9~1UY4Rf6H(jXTAv~ ze;8&yXe=P#L(T1Nc7X`aPEZ)Wjt4R=zt!1`4kgS-VR2n@#AnoI(zv>DU)XMr(!@~G z{>+n3r3%VhJ3F=PsgzwR#a2n5w5+i2V4UH=Py@mOP%ZtSjd8WK7Tw||WrE_3S2-8+ z&IUPOe8{xZd(ZbrPFk%uD7FtLz@2ncLM6sum8Nt=^5;3P2N+7ehkfd4ReV>e?2vBT z-3g(x8XG2_sp3n1cYg(VHLpM48yOjq#6JA9%bT1hr>FgXSb6C0gL+trY?3C%hq!m$ zQ!9{=kOS9pCjP<1msLPSw4<&yAMBshk!NBzL@VE?r(QaQ6CebGR`P@S+aj4@4K}VJ z%n{AgbD)w5h>P1#G6k`8q#j=YVqCoBYIA+QXV?)U3q*MVY3T%|n0u>Dh=Lx^G1(Xs zx3;<+msjQ6%PWBPKVSo(zWi%#!atN%>@->h8({L~Z3*=jm|o-1U%7_g$;INMp?GJf zf)30Nh)EiQz;SXq!L{&P#X(bizpHB6T0YZi!lHl1Khn36 zww#j{G-xePM9XC#jnp6=r>0O$qZ@zkny8->CS&HGKHA0^@fdtCYdtsb9I8l&9Ut|`YikZW z@r;`OrBM7GKk*!Gi?ZnvHl-t%vN8|Ph51)20vk+D?9Az`yL(i~MViuQVp7NzZAKSe z8z!8^!0(#I##n%=Z-ANI?%^zNPQTc?7F-|s`kkl^y>s`>$M8%_g%h*M`G;D1r3~?` zVe$>W!WhXy_TtTw5q+eH3^2Powd2~TkOTGlEm(0y|z+G+$RV*$iW49 zEETr(^!5~-GmSbVH*qng%6}jAB8uFr79T4?8E%5}@;2M#+;U)n3$UbbfWS@^s|rd; z!~)P=P`|gxmjmf?+nNCTZ`j_!h|o_Ozj?X)jpQKo-jTRA&zE3|hVC-cwwoo~%soewv$!N6)Z$x{ITOS{2P0y`orQUFksWOnEEflJ|4j>anB@@^)9Y>pZrB<{hlgWmK#~X@GB1`Z2>4pP zh~b$GRc{JM>gl}yM7k=|R}I>@uATRWNI&=D+U z94yI-Av6nmI#=WVki!e7TCmXUISw?_*3i&U!NP(CfFG4gs!`L%FiON2R#J4k0o~F1 zYEL4>ks9`ukQ&wh>v{Ri41;{Y8UX|Sj%^FbWrDqq$JU*@e9D1_*3}0~Ap=ZkiKhL$ zu4)xXXW-oSt$?OzdA$0Vf)dQ z;cVg2YdaxfX=&J`hZb|mn@9HX#Q~x%n-bpJRQH&qs9t>v?+&}UJqYc%-L*-PrTL}+ z66LCo1YSsVEB)v`*kUEbc}gdmS{A#2l|;pDWz-%*NcN(%GEzNioI7-B(@8(UC?}Ho z*>&cVVS%A`W_#OgZ`=4h@BAFM)f?UDBNQ$NE(4t-`vcbTnZjRGR+SYB5N$gG)NGbe zxuhRNzD0XwNnG2;%WshNZEFV{B zH7ezu?A`77PCqtGyl+!7)h#c(d$YY38Jb5o(5=plvj|y8)*GhzmEPTrAF$U;r{YC- zF!fFEh5G7ZlV>AzRZ*wR%-Hy??(a=wGmz8$M?`zpmh-+L+)^@bPtzAMagpXqGFynh zYt}$xqonl0Ke;D{REaAJ{3>W2=L7f0t~QQI+Q;y?;clE2o%97tP2x5D5Lf2ruty>k z6{Ir+Vze*R=jFNq8~8_iv6^Wn?S8T3yT0FYfJ?p#_AFqfWcOI)ocEL*S*~_-M8Esx ze5p4x&5;|hMu4Rl{Alg&z#`F*uQ2kTN=FN!tr-c^uHr!VqOHg+9{;TeRTFsht&^T z2Izkr+>?hwG&D3o@OjI>MHBxFb$!79z8Ylf4&=@(pzu9lp0x$KICL0*tZsO0IoILg z%7gl?-xh4$J*4uC?7`7gIt_^l6?+v?u+ zf$_K17Wge6a|m*EFcKu9+CC~F$SS*!_E|> zKn;Z+^P}$R-$P3NPo}q%68c07<81dV-gkQ@yxD7}!oUtcA$kH)P*Ts!cl(sV6Ua_Y zz99KA8}R@$8Po4nk}5_@%T2k&t6$-B89K6Q_L^T_DaZDWZ-mxy05e0jaT zXRp1!BhvOMc#{RGP|)F1)%O9+v}1Ie^#^LloogC&C!n%3Q!EptN1T$J)-$nt(50e z#NB-Nr*KKa>9Mb&ugE%=CMN-R!it5e8K|5~g^i7ju#R~G7-b2@rqJEX^ZI<1 zzXOH8483;IX5Kve@E|EEd1dO~q~8`ls+)%W^P6}uhXnMy%Gj`SDwXWTW)}vK0=}fq zp9RGifqcTtyE1QI*aL);pG#b3ddzt>L;*KP0~H7VRngJY8@rRM^ZzA%Jo)go2ea1L zx^LT#8Cn(tB-q?<^%;m~5-8#)rlhO`;RF;}k@mY=)uY26()E(8b5#z&k#_QL{3FU( z!_{NFwftuP(q@l&M7L>Q%fv^3-5r!+_s<1W%)pz?89j;t$-U&GUT)U5l-nyQne8Sn7l z3GHF`YH@*Vx?n&i#P%7Hgwu!0cx$o@tI1xv{+O7`=l+6`r$BSysYiez-n%$X!PGAf z4t*neaHmIM|H~ZTT*Gh8V0(7Js-k0L4C*WV^u_W&FangSYkqQ+o1KmE(INc2;vfjG z<9LV#=f&pHnIq1mV_hmj676~b5YUpB@imlReAshkP4w$J@Gik%+K24yE}%zjuK6GC zxvi(5wo+W84#21t6m=sB#O&IFPXT+C5VUWF`*L;PDp98 zE6JB8bwgE}omlIyW7T}vbVi*XpV>{Ow@eaWTVwBeJ+;6l)|JL`;ZWNh6BvjjP;AsHK(5C86bSOU-*Y; z5$*_kc3!tb=?X)~?8;4KtrFA|@7J?(L}Ry0%SOo$iTQM3mi%TT;!^LLPgk(*>18P8 z5d0K31N^?%QcnPqm#$E(!ckBp`Iu+iZvpSgAD0l)6MFL0l=v+15mRpA65@&1C z4I3zylk|JQs`F|@x~(h`TE&X=#{>G^%dx%xhCDx*wk>>9sQB(p$ZvrEp{jN;xC|cC z&hEbKWb0*CKePhN3cCop6bbR4G`i6t-LDsW60Lmc?~M+{@bRs@F`j;h>42}DX$x`y z0ns5YubV>dtvkOiT<$dUQg!^}w2ycRwD8 zOE|JN5k1MD*&Espa`+nm)5JZ_&v~z_;OF#GEA}P7(^u(sb3C4seB6{#l-BK|FwliDV z#c55 z<`j4r_^jyJRG`+0LvMNs@^Qo0P(QV>2RDM=HrzkU7gYSGiLNrPzlvt-B6uRZcOF=K ze8kRzD@lf%C7yO)rwE9Net|^N7U5s09Hc!@HAtgBE?y8^AT@0kix$G%;1W4Q`FUSM zFV?IUrKhWcFICFtYw!OBO{ZR+z_isz?9A=nCi3u!hW6||C3=Y(dN+K_=cnZXIjPPq zOEYG#D^t>&?rwNz5>uq6hgv;jFaHGxe}R!?=yxse{qP;KE1%pP;30{+`aTLWK<&pF z{CEWB{9J^}kuKtkVfi4bw&ZaNygcX_Q^WeXiCb5vg8ca&EC!Iqq6r5}d=uZO!Bk;*!L*gLFSQ{kI(qeKv&>~Pi;A9uBR6lHtS!sx(G(%2}CS|ubBgP1$W{a zbgkbgp71QS>n3%e1m2}QF{xKjZ?g7YOf|F74&Gn%XO!?Vd?)YfWXJe$kdirb-RGnE zMH)V+9L?-+qfPzABSoF;`bWAyC=%J}g>P&9)ohJ~jsET+zGsN{50g?CU8QC0R&ga%jc|h z-j^xRnK7L_AGPfZ>x`q4=a`XG`JFsqCyDvN_P&~#Jf`33cKS%6p1P#|NM2*}=El;n zTI+M-Y*Pj9?oQ>opFSl0stFj2fA1<@VThPJqce6@@F%x`1s>ewcSL}t!zk&24IsR% zeh^SLZNSJS{0?>D4p{x_Oj{s``@?GdCso>zRr7iE=HspnE{1MUhr#qg^Rkz~eFijc zb90j$CMzqO1h@*A`15+EocFFjBigX!{on~B(a8xNJ#&BC#iC2n=fdFgd1@x<%DkMI z9rcC-Kn`D*1U7-;67hMqoD3?}?AxXG;6T9%sQ@bZn#XnD*Ble}wx|lnK%&)N79c*T>b8*5MwbeRh@f|;24<3wJ-6ee zNME3;&iZAa=xh-6Pnb)L<|WFw59KAd>22k$9YpqD8GBAP zDLlOwPlL3i>t(RscYpczJkjA<53vUiYZ$nfdU|@Zx0Q0f`-~xn5iHo#UtQ6`l{^`L ziWJ#%I&=(^YiW!cB6s#pXB7x@4kGljZY@XsFc6R6tE?u&eEi+f-rjx!497_j17Tr zUm5?XBujY%{FLHDie^jBG-w3;KeYF9&!yeuI#QWmBhd0A4D3=6GuBbFQiF2i`bf;L3!Y{$%G#(Kxo0BWdR?iVO8 zAeJCwp)Wm`y%*|!v@kufll~upr6G4Y1Jn0asH=2S!3?LG!QD1Xn!s@umik8vbxj>@ zYc=sY`QWRcOvr#fb+uRGpO1kbjHbuv)C!}N7yik~i7Yv~t(i7LF;tToyAJM92kV(8 zt{4zT2`B{o%hPoBxz9bH+g5-e^?+?L_+km9xH{uycF}Sg;JhOABsU9HxAYwIN7tvN za#6tlu=ew7w8u$}`BIeuNlr|(1QA5g9je=6LczjV8IVT_rn4KpY%iXd%e~`_M-6iX z7tQWT2cGke7RslDo~EGETmtP6liY%^&{@AdZx_We5P_LCPGO6M5nRZPDTMR2o93Iqi?Nq~&w`G*ThJL>N@u)I9?*2QGyqTnQ;Vmy}_A&g69L(&BPq$AjY6|cb+G)KRZA#XB)_M;as$~)V z{$brmpOfp}5=lrKvD}YW7)f}E|Jpwy9t1XwS_XW7(Q6*??@{T($uy*rYHzLv3tj5K z>`;QJQ-EH4gY*1bn}Ot2wBx@p+rF7PlbxMiKyUyq+k|6XwfD~J#YRugdyen6&8=SD zfb_iv%6y@L6kvDp8aH@5H6^d!QA-**3|M59u?jkxH+S>bla@o3J2GT9GYg2kKzLww zoF=xJb)T@LJWP;yGE<7;;k8}+r7(fAk^?Ob_;M8G;hGN7tO)#lY6+8Cik}*Z*82^7_ zAy6bbHp!vC`-uC$64COnO-+vdy@($~_BjX$K@7rJi^vted}A6w{O1$q($iL=B&J27 zW%~ZV9ttu(j1}*ZE3^HB@VJMBw{5HN!OITeGlg-kmwcwN;{r$frjX}MSG=<8r3Mb) zl0Hh@kAv1ZtO?F1?Bz3+S5|)7X~zESmE~*}*m*{J0PnuLsKQ*!O`ca$YxQmv#4fPa`20@k7Lg=z3HU`ZX7B5=qx??Y7k^170zt`STcC z+@1Hot(!1f5~;RGw4#z>?no7R+=K_4C62EeGY9(nRjlL9FPdkqz{CZZpRl%0t~#|! z>@xFRiUQ7P3B!$-RNMB1BQ}9x`ldEMgc};i%pon(z(54?y z1?AAGs@dLT)#^Z}ulO?PJiUzn_bi*OH|g5ZWV61*wY}o&;a2)su4@OvW{CUU;{{l= z-%r}v)f@|a>Yd6(YOhLyL=&jVePAg1081U?Vkytw|#bq$m{t}=s9G3wvMUyuC^&GCBHQi zo+e$RmEb1C^Ji`Elo7R%ueaN=8jWozYV!>P2$0CRxCF>OQ&Ft1U4??UZl<->KkmW2 znZK4mUBeR@Q?SPlmlUNN-TKyCRL_A97QvPK!p+x6de)mMNzCIV}j>2j>RLMoyOMa9(Up%K(h(t5u{UUl4q5WaxAhE#8Xp zzZ3}seQKE8c}M(A z2qVb8;AMmy8?zjp-69Rp4vuNF7lCipUKax#se%sCf>z)5ee4%qLi;J2> zkzd|a`yMQpEvLA^(3z)ywZR}_NrTzP6Wjr`VHU_rwtZor0W&HAdiNq>@T(5OI$jy# z3?)bqBJF?vNz(Xt^JXsV7WEwccnG2>un=0E*S(hYj1G0a?8x9{6$UJxkj6J8@uDyHNtIfxxep> z6B^=)$Jv0xkX$o>zi-I8YmvXwNpdZaznoZCCt6-nVP$Lk2%}Ttdy?gE;{;Bf!XD2b z%{+WH5N@`c<9D7nw+t}NmakpgzkjQr-*)_&@|zvKFB7~^QLyMS2Yv4|OOFMf>zT|v zmynSm`#iS&$B(za{!35FT;F;2;4GJRw(?Er0J+OzN9cOE(%iyA_sk59UG4pa8NPC= zA*FA#6cQ;grUoOdJ^UXPbrK;s*Z$a---tTyWoG=8kPO%&n|bYtH8@*b?<|fhupEi8 zavi#Y_rG8RTI2@Ne+!@L03fWRhXK6J)>T7KRVOb4ulE`(gj>YGe!jcC=x~714g8)M zoUCK27i%yl>p8cM2pEaY?|@?H$lem~HzAl?Px23X(L*TceTx_?>?nV3llU@NkewI= zs8naYk(+KPyT#DETjUb_cF8GSRk>mvR399>espiRnREA&t}VKbU^)5Gj29b^C%k3U zd0db-ozuK5gNfNla3NA6>s!xqKcR2>5g{*&1_b#XJN#j@^b*~t6QtS|*+0MH|LWK@ zFimaA(xAoDoW{6PJ-@CgrfOw*^ny0y><^Ri0y>L(QgXjM591bcC3j$QHd&j2e}QfHv7fYC|&k3;5Y_{6Ub^F8??oec#gUHI$WUNa-3u6&HY zD$tUM^!2gw@^bcItN;G69p;W9K8zuddmVnbV+#y?q3qNc<3}Gc&b_3xHW`+dS{VGM z!o=TpZY3sPE7z90%Y&?XrBwzqQ>34@P+^C5#IrbOrw=8U))bZp6Y6@apb=-D;kd<88*EE#uHU)_NCZM|$=2T8Z8yQ`{obV_+)VPVLe1muvPJG;59k4hi(f(Z|ENU+{;U2^C{li(vT zRV{Vq71~j~Hl|0(q1}J_hn?^T$t<-;vEU3}Vj892tGg7n^m!%1$;TXmIU4Ux-&`7E zb{dG|^BQ#wB^noR>U2NPYNu5`ardUVJLrx}SM+u%9Q&;EY6jM+mL@>pYu}J*k{SS1TnkU_7}qf4&Z1=o!|XVM=q|k zFhnXT#^Uz?h=Efe1Hs%(0y--+DjD>ThjhJC`k-@RfgU{#z6QKdzw>$fj!K9?fks+V z`3|m5flPSdeml`Yz--Im{8$K0sZL>kUji*&@_g2bXWOlh1ugO>TNwGbFo+O-w|~$z z0b-4?<#REatF2X<8>zq}3R?A1W#Vy>Ex65-?^vHB3hka? ztb&?L>%20!m8G8gIPU(DW|3a#CYz1{0xLR0&j&L)t$H$U|8-L$PBv=XEYSWS`W3P% zM(mJ(xjj7_pY3b>%0oHsRC2E#MzRe^ZFMkwG0b zoIl*a$4%OfO@fg}eDdDt|KsSa!{sGJPI9!qf z!2!#qyew)hnv_iTU%mQCalsWs7OnqMm<&_MG2p_eE9g7f9Pr%eeK#F#Adubw zRY|zGxLC4BcfZDb8~yWmetsSf804nJc3;8|fzc^ID*`DbDauBAo`<$SLR!?vf8$4Q!10R4JYF7*UTUu!NAuw@rzvVz!HAVCQ1}02q6zFfu|FI6hO#HZgE%Dd295D2z zWvA#`HDBGLB?@f-@fkYP(rJ>Ni{YM+KbIfL~yd?k41BC8}_HkNBJ+su#a2)5w_WZZ zzj%ek?OH%|BDi~B$;QP7+RDY!1a3jF8{Y5}!Zg4zz?^KC)JG-`tO(TEz~j`V>JMo ziUA*YePn1z1WL9q*(mVEwtyIPqGLEubP8If561m+V5-L4(dsRRx4p%UCpuQ0k?t*f zvylYiQ5BL1?nVh=uh+xsqV2s&)v%EB|Io$h`Yui7)yRZG-cLe9uC$BV;ZL6_c0X%K zeqHx`X&WVNX10jx3_Ya1Mfc}BLs?WJ@ajJLS`H?8z=8l$K}12OV5}Nd_wL7AV3~L*F@UI(af1d?bl$DQ z);^#PS%w*BFA z@6x%O)&b7PfaA`xHya5gztOurz3wcRllVzRejNLr=JC|&BjN6OGx%t5jT*L~FEd3l z4IN+m53X#Ia}^%T5qw)a8!N%fPWpFB#2jIsYtVEz)o) zbXY4}Tu?aZPK6amhpfbLje4OI8hZQY7B)bb?$pSVg{%>U1+zQOtZBQu(*hTgXJYGF$zL&qt-q6!Z>@8PxT@YF!*~Vxj%eQBE>T=z zgG*ev+d(tI^<$QB_578tIE41`zRMATnR%ng7%t6MnrM$C>F~OMf7uSTwe>O2rq+NZ zzu&m?+Aw5S!zxHMuetWg#^kkhe#qZ9A=?^O-O!sx`6QG~=egM!Am+6jYO6bL`Sabe4HEQm zx?mAl#Kz8>oFx35tnE<4s$U|kC+7h}+CYXKB9E)lGo9TJ7z|LuMUI({C|XRzy}i8! zaUkr5X7z+|HIf97j04ze{EbhWP7yMmK=W`zdIB_T0)X_3se)=QxC(CCZ1@^*f3r#g z`hVGth>WeB?M^kV$I?GEeiN=sz*aOnYXlB^aPa^=!2?=hao*6EdhuX|-#XbW(Zbr} z?YNlVl#fe`=scf-Cg-?!&>n@~-<-6}wG%%ee;z>W!$ZvjCH#E<`jv1qFK+V7jq~$! z(S{Tl4pRW={|Bar9v5^BERXA}=*fGM)w{LD|IZRSZVr0@z)SBzZIFs+?N%3U&6Npf zf(j9*TwT$j|}`ltIP32n^F5T}6Gc z9BSWz1HHmpJ12q0bcQANVM-kIF~(hRvOH~#5$EYYavsYY;4E0^juX&4{%O(9!ICkb zi}EVyR#*fZAN#36Cn#5rujP$xm<=r*@|_O?0(LqnYC3(O1F z-YkL~s{(^{a+~Ap52$!}akdP)cKF6^FhA+&d_WOMg_0xpudrf zwFCWOt}GtuI_!Q}*|D-u2H4%g?*_ss{FlRI!nV}IAkZ^q=v!F$?Ivn6v*RuB^ERQO zj6iJ}pMQElXxcAV5|2`)9 z(QT_LEEI6lJe1C5`2FSPLqbz^P;1!jKsdwy@n;E%6Ckl6DV&&B0Xm|6`1K?!okj z_>ZFV@)%`3_a(!wjKe9zQR)S~p}@P8mq)vD94oQr5Psos0>JpFvemsk%S-7tq}&k( z**Y-D0&XIZe+17QE?eA6P)G|nu%1SyR;AcImhw_gV@>2_?;~}3^w#T?y`QeCAI?k# zlCuP%KSmrsXC9_PX1>bgzpkTO>?cq9f(^dIvo(41rZm$)WoT(3Us~tgVXDPe{x$4= zHJk>8bHAE-o44w;-PG=;$g-r1*Wu|7vo2Vo%AL2tjfg|?nD`4+-TJueuMg(u8_pjx zXj}enzP%9lCdFNCheCkO2Xg&STE7eGxb^ zjJ;Q*#wxE49OYqB>3rJ=y&^{~6a)#lNqex+8wxNubjCZZuC1!kSb>_FI#R+mK6AILddgY@d+5~Y?1i{C1hWgk@cm|*mx1o+|AUtH zBY9x|m2};55%2LX*4g}(UVJ=IfEGpX=oetCSeN0)5^>wp*y~OwB=likuEP8~Hd{}U z-Gj*8n*VJ7ya&|N{D#+>!+x8|5*rU?atBzMXT}Vw`PU2X_rjy^#{};1^Mlc% zEbu&a_rA-AXJ`cOs~TwcUro-irjxq6Jqw(0@wr{XQi56awO(>bQCE*aOXlnClcEHRXq0(*ixIRo79-4s^YT`AQB1 zCqe%Kf_H8f@5MT<=sWRvc&5tT0w>5n+6}-q!>^E?5deqSIq!TSDkCu-=PTzn8a+RNm=#DbTvYcgW7HuR}u=YyO`l!cQ>`}M@(68 z>141%pr?Gb5LL_V%J*a-wZwz0^P-ixi&Gw${;VVASDjrf-0iPEO0<)$UKdGhsCOPM zH*M}zHeHQ>{^r{Dd%#70;3|>Yb9>)Z*6;S&?Jp!02EG4h4EU(9G(TaNPvMmbURO3L zSgeh)vwFY^kDc#NqEWrY^2yNKGY5*qE%)C?R~<(^;pfreSgWXh9FN6` zuO?;|7ROh_?#g38f(HP2bop5vdRtgo4FHF`lZgkI9%xDj3c{{Mx?r3hRnZ4Zjm-fH zJGpDX^sv7%e6evIr{g}@a}E&g*MQOhCbF2%hG!W3bIi;D8?P)PUoKH6eA^pUClG?c ze0K+hUtEZrzv}5-k3$bx^~3H4NjCUa&$J{xtizpzTha!;pZl6ihGUEsNJU%SC9n3n z-wlvlV&8Bmn4&Y>-&C*b&Chi*MqH> za3^MJytV0TLbJ+H8=bax;@kfFnY!>)3|_`v{stUeqa1ALt%dtQs6RtrUgJ{KGyTiY zix~3?m`Y^v-Z8PEZGY5Oqq*{V*0VUzF~9Yf;@aJF7K8ygjzRd$che5XOA8`bfmnSN zan%w_-Vz;uv`E&pfE9VsT`sCeV)<~EW7$cBFz4BE6&tA`}Es;e?NO5Ylt@=>W!@fy(8>6&Jfttu(~4fL2M*fhhsk2 zb(Z|jxIoW7h2MpBTM}|p_MZTYS?@c}li=_(&VY+6WVDgybl7Qidy8BOZptM7#SONi(e3|Kd@0iHe3Lp{2q@Ngkv}$^1B!tS5su%I<-_krTs4A zS}kNTwv)X(6Oj!3OCf)kJ+=m*%PiXz@BaQ_pla9~ujg|CMUh5ETLS~BfMJPH_QRG_ z{-yht8;?C;yE|D+p08_Y2v%hzYiMk&t*?(k7C@sP?D_zA(pAe@&|7Oaa8jxh-jLa! z5G}duPZs~ANf{5IVAl{bZgC~JA0=BT&zPTosAPb8K6=1C*{y;p3hqw@&gOzx z<0U0|-Zz{tw<9hFPPxAN@#z+_h)x#xPi;?tQ9@Lu4U3nrF=#?+?eR1~O(AUzpqjQJ zj&@Z@B*z?18vfCi^~9sM{OWr3-kyq7{2b*s5hS<6aB<557(EB2o8{gBypo(DSg1d* zdUBxSS&Z2Z@udHEUkXnPh7URyqrk5sEl% zs&`S+A5nWVQ8e*yDZM1{q>3Y9?yhWHN_t500c04Ds%l3HGV`VYfPu{KKKcK!?i2)> zl^SU!KCM!AaHUDcuSh>bYBRj#4DB^bXnKK*txBHc_pW7SIq;@Z{TL2dbUIp(y0vhK z;R#vtlAs*V{EA+8gc5ZuBfXq@)*c#1bT_ajpNVCO?!w|wG*5eyTjXwkjHvh%YH#-%b6t4iz%?ng*HMY8x2 z`>^&ucDmi_6V)3ZymM<5;MbD{`2ADYA3Hoy=ON4cxaq!#N$Wo1PfQT|PT0nF z3>sT)$Gs)>lRs$XW);Id9dSyq$puE^&WhA^5r&nqHE7UbdNO7)j-L6lDBPglpFb~ zlaX78FLLq=zQ%Xst)$RqMjNwvP=?}b!i#CKiy0t>A2QX_^|Mq+2)kZL5Chjpr6d_6 zx~)fa`dG?&y*Dy<4p({)Lvzm5WD$#nMlm_YS9~ze0{kM++p(4Ew4rCoRML4uDl!Hq zIuCc7t>#5d^s}%RXQ{(PdtveVAPBImH+mum`Ga!M*0HE;33Z;VIEG&6efDFd3}gU z_oxjg>m%}RPE8E@b`ps{RYBkuL~qy#XnJ@;d2JB$cDvv()2@P-wYdF})}o;$1m8PP z-n##o1b<|I6&m@R3VqzVAF+C;x)ynKCQ-0=%nITkm04<7!8n6@4nCK4DF+$Ql=DI^EZjN+6jG zQV7-F71)l#OIj>LH1>WhpR+woHa?L}kQklc)~BoTIj{wXFS+Byr8b`|PS$pPKX#9$ z?XS6au+udZYx)Q3CXLLpj@QHS_#1WBgT=yCHrkJEH0->>%fOK9>!^JAjVOs(QP)_k zNDI@M&%U9jtu`3|C2v2x9$SgB_xIYhuj<%sB1Tpf zWr@X;ul|o+HXfbvVXX0hQIua(ySh1AlTbPKLtbAxxKlC+hPgD_OY~@zp9$hGPhU%| zi7r`YZW-rOy#~=jeNfwl##NM6nh{J(NTzgyaT38V&L58dg45Ynl3~O z#Knlq7oiO?0@0`ARh$+W3$ql0hP4j_p!O@oYemE(|B+!m0qM?BI&CT=Wt=DK^KcqT zpJs);FY&Aar9cQz2u)E6T#giZq=e*eiArodN=8(vf4-fK8tm4C2HCTb&O-%otogux z2xW!c`k-|gj0&9E$$#f=hhv4KT(eu0(~*93fTAZk?H4L&nJ3y0gAL0 ziO^3HOE#Z+J@`SNmi05dWOiB&-e*Jq#Xi-PuZ&{w8!qJ8GcLAh%KxZG{s#ZmaCewI zaq{~)s7|nuryX$$Hp$vTHfrC-zhGd%AQxsqDoKbb{wD4wWCzv8h@_plP^`cp$sRu4 z_zb=H_NP+Y2O}b(d2?hh$pmRNbMSI;w=EJ)=WJ$u9c2>5K?M;y6YqLtK|RgWjy;10 zE!wp|CI`}r`oDm%V=#4n=M}48k?l=#rB`AaCJh;wl+s&oG?phT=+<@M;l^hEr0T{_ zVVsXaD!XyARq4(U3R5=ijV};8%8;7Xh~#_v5VH{zMzWJsa0w=mz0$W9-V{>62zhQI z>O<4Tq^@F8kc8)#k~8r!AB~#0`95oJa&8x8t3!p$ATdA%^$ab=J`&c&lQu8 zUzHNXgx7Cuf6;Pw1_a=ItLS_R4i;WRRD|VJHtA{id_Q=3h(h=*6`I z1`h|r!qlq?8f3#Fb$>(xr~pm0_6vHHx2rc`Uxuc!r(_r&RImIsQ6=U{kso)BMOwT5ayOFS)jf=EhMW+xZVZ}`9u&NhCxUX(0(y!BxcW7L1`+Y$yygUNbJL|l;I3c0YJ!Pd7M zH=vvk;CTMrUy?_Jema=s-d`o`XEvegXG>uZYnL{jAmMCV={MH%EM9jE+0`BusVF2^ z74xaJGV8Axp2)oaP)M5#yB9r#cm?h*lC~GsI$MmtpJIPN$qmi1ed)>U2_`QjI1C`8 zo?k&{@<0!=x1gd z#x_cn*}cED>%H$#l%eF$Pjgy%Z9k(A5EgUlD--SH6*F=-b5dO=i88Fg`*chQjDjno zwRI?NL?yn0CPvX9#0wI|;eej}t#V!KjxT)4UhUI3X;;#<@$UWW-=IJu-gG~RL&m~aj$X;1XU@0PdS zFQwsesj($Aa*CcQ>mqV4H*x038nut86FgQU!*8iqiN#)H+5H~O_@gfBDkNnAA?~*= z;xpUrJA1z>6+vtG2cz7T&+oTX1Mr39+ip0g%>mDk?=8P9DCfjIkeanEb`?63mc%Ql zZL)n;rOC!-4R&Ii-m)iE%w>=|*XLwMDJ7Cm zZ*NPodc;0Nm;TrAMaADu6cJAzzju8r58|hFbrE!#m*0Nel&sId@!0|St@F<#S;xy} z*h;(0e5U|@fsN?lQ=f1d98L(mi2=Q{_`3QaBofnsk=9~*A@+{IBb*Mar!aZo$3X-F zY=N`8Ew7~3Pt#Sau>ElM%q%3yq=rvM-BW`E|DXZaJh9kcHq;3%>G{;1W0Fr=%cF_` z`s2TrYe#ou9Z$BTLzZgY6H0}Ze6)|Z`u6-OLNQIz|2&9*-b%nv z;(|UVI1ctc*2lysiIO+ON>ks~aXGrqKyPC@dk^rbZP*BQ%a8LTS*DIoL zhKAa+>IzP-B)7UCg|{&?^B22wiQ2nKj0g1*C4{;&3i`#KO|0ES{npGPM(=80&{l{M zx&3aX=F!?bH=F&;7G*=8|7o0tJc~P42%^kkZ8L;Th>#vZii|jj?2l{%C(_D;wpsq2 zV=lokaJS2ftwTq2@&d8AgZEE_(%Ur_N7r#2Y|yS}Z6Sf(mZ@NVym!w@Ac*QeVl`RZ ziY&NN32xSG(wk-L7ltK!*uI;z8pPK9rg4=E#0~!TI~AQw(uN#DH4>26_sY`mZJytx zlyr(cw1b9{ zz^V73G%eoWUPJ1&GK`g*Q}|wId#9oWCoD9%i!a!V%ESBcc)EYTMF!uPyZ_+kUn=@~ zX(K!Ns$OpWJ2DcAnuG5S$Z^?Dh4-N{C5gqHBGYV>qCWEfn2XZYFY=C^@kS&IYa z0?b4TaFr7yz{?>ie)2sR2;yzmxQ4u*mwTgZ4X5AUcyP!#)QaWU*f|r>p9YTOHUJGX zqFK=K*d>Fg>Lqb_0hWDDJyo79<`Z6QNy&7gD1teGa2tgzn*N_`EbqB5^l@PVb@6I`IJw2vJ&RrOSNuP%853yR2_9~432~=*9_&seHBhhil zuUR|=Sz^o5D0JHzyLRwus}E*Rsn7S!)%?`uol&i<;@C>ee1DtivA>I?;2tfXL2r|E z5(FDpS4{Lv$Aw=Vg;6f^{)kF&W}I%}d+;506w$(k`jui=$NJkvA02!V)!*?|3S{BG zZWEi8VDj~H^0#gIB`wzA1!r`JgzevhmV6d{&r6qnzS!)~SlaWkDel>=+$(1NX5Y2?3?sOKMp)-q!fZpRC$H2~5;y)nxF@s|)b?PGCTb_RB2z~cCWx$a>>djYzEQ%p= z>z@oA1@3I0xc*IPHFF%Y!d+@NYihU1)MwWYggo8411N7TDtK{^kU9BAh_p5P@h?%y2sUg&c2FmjrI^!>w*dBX0yUZCjs>5q4^>Y7(Xz^RJW{kjDQ76*U%XMi_ z6SKSxKr8<+kf(SZHg&(N_|yr*8We78p84;|wk5KQd$T^kJK+o17;n(5tqw zM=oY?#IzI(!F6n=!g0o}NlSzk=^#D*`Nw+6AH%5UQW)gy*6$w=aoE2PzRpj`Rtrf6 z;!pl!=R`s?$dp;>1=0KO;v(S;O1EBaNlqbyAE})_wb5|a&?GA7C@Np8IA`zG3F=_S2o6E|52)UoHQk{s3&Ou z4alX(emRFJ`O&g2Q#%{qRM%B@Tja~jY>f?~cwb8GK$0IeW?Exu>EIZ-KdAz}kBk!8 z&5#8>$q?0n*5IMdX{7LFp&)_h+#L89?a=X@FQ{Lt##K=SLjs<#XZ=m-HK9t#D}tVg z`Mp1yhJkU;AcF3l?Y2d7!$F9G z2xfYbqQ0@o8{-;r)2_aAqKYXhziqw-LvlPE^5~ek5h0OJMT*hbv!)}ziBAjbqc4B6 z9eN-k96J|n;yN`mQj)vl(#!_!Y{YYHzI< zsrQlSWabGBuCPZ|?$(7Z1jD+x zz@wnU?Ox`+0pf6Z^cWhJPh@G@H+pncZNo8j7P4Fap<;bR{a#L-2`$@kFS8N_laAxe z4-yyro78#IvlS%thQaXUIB48KI&6JA8YiL*JVPm%4L-o{ZBU>$QKY`x zYmEdHreA<-ZjFQhzRFf;0#>lVDRzHkFL{wL5>d4LnO*$Dyv6Fl*|2bO4Y{sn;j4Nr zQqW}xyT_bF087BJk#)xlNIp7V4wOAc$~2iH~JV*8-qklZ3<@nlcq9nfq$q>qK-5x=L4KAXdf z5X9Ogx<@EUo|f^zBTQ_dZ%`E!?0$5+IA=R2Uu7yuf^6=?mN=~ zEmcywwPRJytY&S)kEpUT42-{|!i>vR9eiKa3~7%JwFryh2$}s6znZ%Cn5qN8qwTCw zvk@d;E|FA}BFVtW+7OC#_khuS{&#nCGLg%ni(Q@bglT~TQb3GfrLlKJ7Jsp~1K4SN zx&k8KdvZ;7Jst05eYKJrfty8Y(~X^8*8R<`ra`*P=SNhF@Dqp(_=lhTKwqV+`R|nr zO%4N1jpKpH_E-dSEw-i&;b;a4%)Z;d?J7)@ljxJOx(8|itxeMV9ur;*E$$TP4Hs4; z0E4t4AY72FY1ew^wf_WzbXsJ`zpJskm1>(!0eKP-YLF9}Xs08W_)sm0?at+Ezwq7A z?+TiEQ8G6ZR(<_F1(+b&f4z7iw^JnN$YP|6vVS9NOi?sNa?u#UN9bWG{}FU-hQi#gaqqP#5b4P@$1gAztqfC?>R_GMj1}T@`&2M?bQ1{8{pp5Vmj%U{7a-q_*%9| zwfRq;xZB$~yI)hFE;zPB^7P3nEN3cJY+zAKcB zhzQN-!qB(TS+>3(f&}wK%cVat`h=GiT4dgrG}F@kGygipoUMSsLGm_RPlt}iUex!X zJ{lt=$VxkI!6jwkLL8X4IhwhX?p6?l9|}5$&g4Qq!s5s48O8k@Jj1-nk#lpk^>xvv zH0NqHkK-r*n0Rlmb_!)cmnx5TGZ4o0iVy~Qdh&t%4eK_NkZ=9Rzu?Z;(P}g`2!6e71P+f2 zzdicXDf3VA^5Jn1OXoEz9Tlx}pJ^-o{i)w%3cWjn;#}-dGjR_?*W>*F)%Uo=79LVX zFlrEe+`6Ox7KD=yT&p+oQ$d;Q`uxA@e6~6D_7d4r)|*1Otu6k!W6DfGiV*IHkHetF zM=pQEsX$}$7_z~dyCvPwu=Bbe3kj#fBCtPfhlLuQbKjGM%Q+lC{QJ9A+VhWo75&xL z-qfKTDw{WIm}p5$&6k3dI%)Y04y6!<*1f0CC{D|>ex!xkFZ0?ZgqlXclZXuX=(a$m zL4{vz<SH)niV#+9SS zkZ93&C1YPYtB_LknEf@i(_iyJ4Hszz@kYUd#(6tNz*+~iEVc|SRmyX|CE1=H_eAq` z!UKKDS}q9tEdM+4*Tvj7-O{TK-N5{wzH20FDM%vVC{i;<`MDcw;>#h+w`Y-7=;YO| zo3Q=38WQ;K>MhpNnO!)JA=pb8lq1o0)9wLkKyRGR*R_D1iX>6Mw?fvob)6;9lJ~V% z14ge%plD7>^mN_xR8Ivr zQA$k1NQ>zs?8Cj6x(WI(rOk*oUkmQYOR_umecbEsZ#j<%R*g;S;AKQwWEmT&q|-$w^StN1-r^BBk^W!Hk0kxU3N`(JNY~h~=<84$ zjr=OF%TOU{!nsq?=OW*epJ6Dfb%6O^F{@srsag3o4Gz$e%GEvLcXhS#mcKj^di2H0 z<*0;Ou=5p*sr}cVE~aL;d}SnJrwr{$hzt#k^nh` z-B5b~F)*&vI56JanWbYyCw?6gNG3Ybd3abt5Qn&Dp|9(h8odU!z9|pK2BDT=cS8BH zCqCgstY+qR-wI5=tC~Qfs-OiU5J9c?w!PIfJawKXYTuLhFb#L1Wh(%rO{VzPezl~;in;{0Oqtu?WK z90gj}C^r9LxFK!SE0bJ;X{leNZ0Or5;t9WrTr^0y6n(|&ok#s=z2~LFK#c19W=WTC zI27Nmo!QfKgkHpmi$1=lrgS^GFBSS~^6fv}p1^uqp{VDpm~85A4BoZ8NHgsF+e{o7 zL+3?Zna@`%&Gc1MQ6h-+av|zl*NRC$2a%SZkg|TXc=1?ZIaSD{K+A@tRFtjf-+<2{ zXO(&IZ|AMTUfFsClEpMil7@`3AaYhoily9Edi}AwdU>z1JFp;GWYJOVS??zLsPNsC!)s#dflEmV zm@8!218e|0?W_RMOOeYK*fISBhiVdB^>A*@_|9Hf*9$v3RmVNZVtmq)KM_$F28gTN z_K45G{NOjfYkaY3UWK)EHk{@t;jlz`v4Iq~tf;#yNMP39+r{O;x)sO;W^L<&kk*_^ zg#{b6ufQ%Dj=O#lFj3!cK|hCH&nJe(Ne83BU-VJN;d{{mtFSx4iz6Ha`a-~VY%!d4 z>Sp!Fv4639ASZ|WwYIK^7E7>#>4<*~`rT^pKFUf#$VW0_}r|A$H>>?_EVuykC~ELw=Q#>@CX z_!(1;VG0G!)cUySqjQmC@u#2Wt_Xx+wIO>qMx#0$) z|C&8Y8+pV0;R&{bv-Y0^MwKwW-u(<}_0@Wr{k2%eK&<2$Yp-fm!sqqcVi*tqfOyfo z&WF~~oaYB|WHm?Mtnt4lX8s$~OYoFVl?Wruts7Kq(T4=n-S=;%U9VWPNP6{%Hz`fU z3BOPi`K4RQKJ@h8DhDNuSt>8s*Wq#0na~G&ifBs+@;MkY(Q|EXho$Ckx+o<_iIfE~rAgxP)Fi z&dJdDjlX7bxwZKG!piQS0dY$asp)2+3RfE$AS}a<(5OfskT>dgDX5LaJv>7hGaJN1 z_2Vp-w=-774+P#-P+Sc6tk?qbV*<-cMay{CMLFCV+XZXxfBYDDEN$gMVy#a?% zX6K*5s7@6>QB5L5L1#S4J(}~@(fBt0axM(19B>pIhKobIKXA<%Mvjoyw7eWmv`Tbd z{Z|XRwYWa+jFr3Ot*A$hbzTbPN}hapDfmU;@za0*&1opWSER=N&d=#5L$WAkN*Z~d zvzf=oq@@P0{HujT2rQTQCyg*Gzx*-0^iR0Z9qv^+zTjn^5tZ}U0qaal^EoD-MQrnj zb*++DMCnwcPdMJE?eQ#+I}#4)Ary%G$SJ3s=(>8bG}8aDv-xY0tHJm9vvLUvd)X^V z383y+8*CnmrZ?GcaQ__357*%qGt}c7LY?yfMFg#hIVm7G3qPv zq*T1fj%Ex(Qgq~)>>neY{m%o2(t}Ri|3~g42AjsL`2NUHv zpr`$o+Sb0!qW%Cb&%#4o#ilMS)wNO9RVRp0X3-#M;(gzb+iv7ynh|g)Inan43hn`Y z8qy?3Qz%>0hI`dtQxo0>0DC*VpKbeBX7D~WbOWY2ZAiRcFpvCPO5t4blBtMG`6Z;W3Rl7@oORn@F}+mTxDaU_z&8@V=^pOs|Xk zl|(nFw<)AqbxjAB-mUeEQh_(+$BU_WI*Dh7xaXACBOZY5K-8j3eZEkLN^I)JQwYCk zz2u`~t_3?{x!~IW=aub5Z}{1%@!I$4h7W3_+=LjVi4Eh3TCa&8_WsjI<~P*H=|gTS z@<33N{kd+0fVh-KYDOEZ?T(anW5F5$Q+6g$;E+P`2zr8@g*XM$KtUtf%fKB%iU}WS zO7#4Ks&*8N3WuLacmxq=s`t^Hn1<03JZslZ#aDazAw|e7Np%HHrr6R!)_-TCc^_DG z`8maTbgTc!th{0IjNKjfU+v>41b9|Zy1|4zQZiPHk1mReLV;Yl*T&bEsB({Gw)=gg zQ2w*J*>0&lT1jxckuJ{K0AZoHtJLY;qcx=+2-v;g-}-G{&G)M^+&rN zlbotA;`wB4O|_8(^n3I3zb_&*%q7cikw$T<1*(p8wNxo`s7kJ%{xq1jv7Xp~bW;&? zz|b-qJvd7>lx#XySBta60sir4)&hUq(XdEF zs7zsuB#tnLFR=y-%?2Qa&#lI}2W-;w2gjLOm;$iGk<4)_6!l+jfG!OzQ781GQvm|x zO)$YPIPcke@ydcb))S5_%{p(~*AUP+06z;su`~BA)FHi^m8Hi%o1lrG?1{`ObL^_3 zI>@VOlP;wzqy7HKY4Rx+ygz)KBd~Azzir4$&^jIK=R|$-dmQ#Im)Fd2X3djN zpANj6OIeoVzeIi&RQo__8r`^OpyS~v#Db-Ej+=s+;oj6~^ZKhJ){l+k7SSA)al!s1 z`$FTols<2db@-^-&uJK~Pdfg=#l*9T_rgVXyvw8b@lN(n@7=&^<~1JQf-LRImAkHK z(_2IA%EG2IcM%4&cHLk{r}4^0RiCZIYwwD;wnNH^s?Giupa9?a_1dAQijUO9ZF*!D z>$+=GRPZl&q{AzRP2IkPfR(>VdmpClZ6* z*)U8+aqoIQ-ktjAe`aSB^-ZRqxBgyQ>i`^u#Kk>q?jDKz`PD4@*1V7Kgs8~3k}An> zj=hxhtWk>mB`UZs!l@s*ppb+m%`E8pJ(`F%7VR80^JX0T$DHh}FOjX%ToB(^NgUhm z=dSPd zbL0)A8l;Qsv+Rwiuf^F47mQ23H`wZ{Xl3{nvId~}fslY)nc$90h1V|rtmO)GbtjYO z>9ii8x9cxmEv!%8I7aa-oH=sQpGB6761=F0l1$S0@e%eI6f!Z;(|U*aBMfGzbW3>i z)p8*z@DOF*yr$rJ@}zFBFz?%rBH7T1xzI&2FLyQrYL^>I{$si1 z#Sa~vpA8O!8%+ZAU3QsSIU8)*QlZT>Wa{EmgadUIUTrRa&Vzi34AMc;En%#zRm?YZ zf0rWx#%NPD2t>O#^_*i?SI9_B&prNqk1@ZWfsXsoecj*Nh{=mz?`^gwm-%}76qaDA zHc5+52xb%5ly!-?1fH40Jw9{RbJJm6dFH8Y*(k2LFg0UF3EJf`G%(tPtD6X6Yk?xj z-_JqlVtuIqR%m6$aO~;3LT59Io#g+@jLd|mCNJ7XNp(Zfh^CSpM?wIy!E5eNOW6|N=pa&1(DWl}2(n2)#;vcc z6yU?Gvza|63SNo9NMc{Bsb~Ee`^cmSWDSW54ZcJnmx4)sHY;1BhMr9oIvIgZ2)}vr z@%jghk%Tf6@2`@S(q;MI{8|386@7Kd?Np32b|FZ>Ah-h3qFR5SQ$)!h6V^A}*Lmm3(wil5l* zk?eS~-1fae5tc5jqTdk0b;!?(?V@((pi#iK0dM|<=WD~EU8e;&P1GzfJioM1*jHl5n&hwP9SHC}W9PX52SX6LYpLS56>z3rRijj~HU3xvW#=+uKK6becs zhFB8OPciz$=ekv%!Qt^rJ)YipZq1^tj&|{Sg^5ASq(48?2uGFRVs_h{7$@=80lz;5#Ri5%&N?H6_Kr7!s{QF=5l%#Wy22C_b+;Y++i zmD^$JG|?>nB^Na z{Yltx&4^DlL?U!OS#e~0PRjvCv1(% zr1d=fJya*Re#b>H57KV)a_DiL4k`f4Bd@Q)8$h76Wd{Dfih4E$&%y`)GYr(il#HCG zwXf8g10xxhC5?Io7ZHsYFU^c z(Q(6ReaX=D1xYKr@~=I@yO5k@69|aazC{l}BLNfedEr6>sRQ-ITw?JX+dE&ju$^6L z{qiSWxFVKn7OyX1lmES$Iifi~A|4LN238u{c_>kZ+9%Q>zbFh(qscvCFc(3B%yvaa zv$x#=vv9u=km~<0DTl1p<f( zSO4BP1lOy&!Y zguuCLO{ibi0f^oN=UoI|Ni(=wb835b#KZ89#1zUgjXMH9L_?!*BfqF9Q}C4?Y(~Ap z(IwPVtE>Ui6SX!OON$h&q&EmAGU5<3;v}zdce4o%CNMi-u$VvkT=$=pw;gqrH{?+y z`JRsAzfrEO5XlCDs}Ct4D&p(};ym9hgp6j+Gr>62>6bD>6(`BLfh-dwOKSu#@r?f} zy3)O?F?`RgYKPdia`{|JUtLqsm<$5Fm0OLGb1qkqiwwRA$1-hIJEmq{J(CMt)Ino) zTn4YagN1IS2LSw!AP4DRmJPAwL?T+dRqsHO#>WvGO-(FnjupxQYe_whJLt8`0Iu4X zQC&bXgcrxrb4^xu#)53+4DXLR2|_M!ir&|r9GKL-oy8rZWSINiJdEXS(ncN0jFdtO z$cV>J5nbBp?+M0BDU!`={N>2@ZJX4MHWUtfy=@_tuQ5XYkN&$OWA0GPaF!|2$8qF* z-$Y0o{4v}hi~HxtsS?S|vcJo195tb2x8Hw;6#Mw?DC=$d(f-FVkmK2n%=p1fX>yQy z3cjo>yG#G_Om*X^RE?yaM$mJg7Q|uJg{yx25{mSORl#{1S-#0AdT`o8#D#c921(P-J=dfhYgtBQjZ2p(`^ z`X2!9KoP&zI>;{18TWKuSAYY)_rbSfZFL2xCuqOpMzkaklD{;6OQH7Kn( zzbK@hS=V>a#+xw}#mZ&2o{7M(>TAj(5RBi`z%N^01WlZXV%^k!$`W6~Xd`9IXZ*Sw$_7=8gJD9aCIxGGBAp}WNSUkI+ zH+2B!02=l&FAM@x1(0tKffFBI?Q963ZZWCb6doNx>7`5Sxap>wfQ!#B3{wVx?yWz3 zZMU9Xp0i0eY{px^`2no0u0W~=v$y^*-0J>af0x(KV)D5Ug1R|mzJvLj-?{5%bZ>eG z8gZze{u;jL9dE-Qe3EhO#3|2E+IhG(dXOfX@xJPNY*++GFc_~}F)=}qPeQWABZd)V zgL|jGzq%n|Gur?7+IkoO|NRp5UCn5CjP+CTCAw)skFEqc8#wxPt=lAvS70=fL#P=D zU2DgjyC?}>_oQoi$ z)EH?>QDDy~P@+Rw)6X0AZ))^y!Z?=|xX@b97(r46jU#E$v8V&NSlo=tLun{;RfkuK zgGk4%`Z+tI1Jy3vYynVgBNwqbX(Y>edr4eOu$DWF2-3N%uPYZ{Bj>C*{~q*MJ!U>; z`HzK5I|58=bD*6@(XRh~l5P0T-MMqGM4Y}VX0I=#Xpr#iVALHt>%7J=YWIlI)HSAcgK1r3 zQq?fQ#NvWunxaV~?3;MX+4z2)c;?dvjU#z>)3EXSMGDNIIGki!s+SvfFpT*HzZ^pBypU2j09?nAsg~eB_%Nqi!Yb9Ss0Og>UU9Rw+ zNS7HUFOYF90pRkH9~6rYvSL(I-eB~KWz?=Ni&@2mboYpfqukcgK|9#q!bqTRl*#=l z{pu@@G2@Lc>e*7jaj`E*<*w<9EA7%E8Da8xDD(w#_axM)fQOw)20l>wcu7$JCm+i>}`?0G*5DRBJFJ z>y`oh5!u8TGdR%Bp)m6RgAnITGpR=Ij3P80L*`G)#U1i#fQ+1nPP2n}k2PTr%$R)+ zp8MzVkLb^W5{;-kJGa!>IcmbqT)^AXO}kX@ua&7Fe?T zbZ)mv+G5W1MR*@e0C=4;fSU26-4Ec5?Yk11nRd}mT*bCh$vPC{)uj27LWdM+0H_-d z6{D%xbYM*QSuNJL`ASd=?M030NOrka6#c1;Jd$G&8AHRdbG9oZb65MX2#_>urCr(? z@I!2+4?wT-V9!*&v12j?nw6gM(>L+X0bL8UbD$02FBYLwF?!FKzQVM_RIqgz8A)?L zzRhaM3h=B0qlxmoMN)y_G3bs>u7A{C9>awvbMqawm|I`yO55S`*ZPu`u%fiaW7 z687&#!uqjNuK|z=#t}9kHUU(6K6*#!GMe@&G0s!sR z6aG1DZ~@P4hpr3Z(@Z|JB`{kagbHli!HLDeg9ov;wubu53CwP~3(nLpDfp|OeGJo+ zUxITE)5!z?u=)D$!tC(9mj!=&zVH#4jdR%8*ucmC_>(ws>S-_$Zn^m|>N6)`CwtJX z?hXRyhwesw{^d2ztpRWX$#HxwEHhPty9MbNU8m1_k{nDkH7vty;J*%kR^nf?!X z8$-reaUTsps&g{dm~jB8$z2&n)S?*0_EeM7r73x=!;tRL4sKx}GY zW$FPS7scl;urA#kXxk8}qHe%r7p(}$vKSQ^?=c=_b+O=c;^EK4F*%vOmP~{E1d_rC zSTn%MfDu@xI*z*wH+o{A76A8n&yb>?upHNCLEOc0oEa~6*)Q2CA^BKX-&pjqDhtR3 z8DTrd_CHXVxM-IfB#)oNnbueGulVn}EhckTOTPHh?qNZGoQh!P9CoZ{2U$E5Xagv6 zA$XZXHsHLSqp2%Qsv0C7`1R&4@uOVwjlKdO-0V-U@cpz#AfIO)Hl5kCgr*8Cp)sgT zmB?ff2dlKler;A^S~qCw3UyVXu1pyF#<4K+(E9Rv9QK8EE|_8*I`Iox4lN@#Fq+m{ zJay_MZn@8(4kfb69!u3jlx%7cOFDWr~ga-;UYgdoKI? zd%yhqsMgP5b8{0P`=d|d!o_tEF`jwuGz>FtK70tx*%N5@U53dd#_T2!0&6?N`HLI4 zaA`eUF8sC7gLV@N{ED967X=LNMxc~&X}etzsO3Yc+tc@=k_9ZX?jjQw!Ht!^gSET{IK`xt4G>b?|1{H8jt3*# zCyF6-<#;==Q_OjOUxvMkkZE0o7n!iC>OoQ(gH}M(ctB{v1+Q~?yo>ET^JhC%9p}`T zQ5K9ViVGd7HkJ~^Wh48sV?>4{{&M8XCeJ<8<9nt&!o*blj;`uZVP`xDZYKV<+Ie{2 zA=;+1eg0nrI&mMxwhQaDf`87-GOjv6g?3pxJZ5kXra3hW$If^~2tC+5?cvdf^06Dl$us!RrGoNGLwq9G9 z!Vm<`dOe=C9lExIYg->Y9LLQul-hP^+c|c2cCa(s4#p23P;97Q)CmzfYcZS8v9Y;< zOIw@R*xJHuX9x4HLn{KY5*S4(jybKNbcqF>)DU2$ z>xc-x`pDN{*x>&A@4Kqs-Pzf}?|Hh`S)vE=Z*FSt(GJscgz;Q7;dZ|DkMh;+F zJc?dKagS;9h=;mA&0dnKa*LxdeKRXt3Q}jO()fuQAwu0GS+P<2=BTxMB}mbFI?cl9 z7!WGJTcxyf$>0$x%)rHnTRVZnjj*cwFB90UX!2N@diF17!P(Ah`(nY@3^zkbN@GAf-mBeb%)jY=fWz~R^k8U#-wU8QQst%Vo7nIq6+PG6L zv<9Gmq)%Il9g{6SX?y_%jKuE5CYJL4C|ORV1u%0CMw!!FXJJEEa0E|XHwOV&S(zj) z9}$7rYXSpD=L4EM@34gv5A5Qonfl)$X2kFm31eJ8hV=_oV|)xvtb6mLS--GK73R#C z)CQA!ifL1$F|{8_lg|cBYlWZ(9O4I+&FL&U>oB(#omf~WK@~t~yB1FzdjfS;VP$0n zb<)DVc#rwK#rX>t@QFYCV?6r!6L|XB=dd!JV$Ys6RMq9fJ2o~q@#)X~8P1)%=*P9B z-Tj2)Cr{zP{=KM7g{EmP`+Qs5JNW1yei~alGr#|p1V^A2&CDP%Df5vA_otWpu?P(A zwq5j^LN-eV@JgA#g>0X^$REXS6gDmRSz7RG#W$IUER&SX66N5+6`{7Q^5aaUe$FZF zkrKB%%9+GW#IG2fIP%l1%&z-EZEi9%P#<(0S-Fh)F@5eI7dKX7KhCV`K8r7YZ!!sE zV58W+kdqhRb7yT^rUBnV-Pb`T^zVyd_-nO)Xzy70z1}^ zyo(Hhxmd_>zNjG;9$kXc*5+d_r~Z&a%|*GWM@$~&I9m#2=F})H%Ut6EwCeN1seMW# z%vKR5t|O2{`g0?ue;zq!VLOYio5OY;X0sj4 z+c|dH8M?L&%eep^!{8Yp%-R-PJ2PzVY~s?Tb!=^Kqq7$C)?)5FC>5)lWT;=fC^L!Q z?G6kNKn?q@V^SJNDy~l=3hcT#eYf6pqI;!L9IK^FAUdZFqhb>Rs^hxSsr-9VfEkd` zJ50=;{R@k52VZ3u4KtFWT+jnK>FXky8Nv)U#`iEIGP%|lCt5627*K&9boAvOWd^M{2~hlM#vqC^cy@ ztaxyvElvy(#ne&G@@clMJgJO!7njady8OZ}Ifpq9)`ch#T7X$Yxv?Q`YZXSjrq12Y zO$|(^{@;lF&0lQa;NiMHD{mITUvWVf#RiQnB1%vwBkUCw7a}S~_KET0qFJKQ;6*3& zSa^5&y~NDAe!M6nKrY0Dr2PoR@QMo79y@Ka&R%7L5d~EAVO+9vx)o;B@TAUN;&J9M zKA+P}A#$^Y?f_my#AlxiAvT7Cwk-Ac zO898KLpXv{LkyGJKfGJmA1)k1sR@;-FllNumDdM0brasb^M2*f>pSoaWU`UoTqD*S zVytyOU|QV{eBUr7AO>(Ul2B?o?3r~bqZ#D3`~wSzi1b9kGVb2RU^o#+lXIz<3sVj10HqCZt2q8}TM^>yoB zWasjcZgg8Gah%J8!%1(00*9hIq?H4>1g^ly@u(yjQA?{wp9vuP*P6pSbxmMtJ8K~> zbniNw+CM0aU=4fLs9y()2Wp_e^mzc~B(hNceM&f{Ja7q2Ry3GJf}8`eBu;TMk&y#& zBAAH!*Md0I#$Zy{XzBz0e?RW`u5BRSRTLJy60W;FJ4kuz#PYEOfUjKO_w}NFuM`9>dW!XMst*7NzHgM=WMc*#kq|oQ#c5Irt!l!Wderx zY^uJRO^@_Pl?@7X$Dm=M!T~FJ#7o@g5eQXP|95R_D9wOzalPV?zu2RbzyB`0I{K6(4=r>3Y?P(=b%_0JtHA!FjEJl(}#kl z&x0u!G66lvipGOJ50n)U6j1ni2}HEl`w=nf%3xYgP*)9V!-28%@7b?w6!6zF7AZ`B z3e?Aa;olF1HcG#U;jsP8oWNk}u?`wXP&ParS-_7pMTOcuuayjpZ5n>}iyDG>5Ev>l zJvjGijdAi%ItnTd(uoUKzS3?R0))dNzytYs-RB^Ei0rPu=CP^3TqQ6|a5?Z?K9&IR zmB;!4i<84&P9R8E{~l-oaLfXiQLur?Z*q|xp^@3E&N++j-gwf-py&u37@m^$b#U_{LFi)A;9`2k$T)aLIffq@6_+`G+DV<-HB^|ia|MeQ^k8w!EiNBb$C0nNp-Dj$P^)Vd z86!gmw;WGrMwsH5EH#m3M9ygBOYwc3wOBgAr395yux@1xiz`N{#kuC(aKslS75Z}? zEEbe>!j3G$vQhomIU_~4aKSd0KzKCBSA*fe1O|{3gPkQXQe9`!wXHYJ8w1<5V8f_P z<&7axvq;g?BoN!73&_toH}>kjA`aA#EtyibV2@GzygtJoXjO(&e2ecCrhv7r*BO$a zscWn>6EsbYx~e>I3GdH|^yAt1Ii@BRjJwT)p3Vnmqc^!I#*KrHE-{=!%Cya?iKMSR zlU=kg`R6T&?4W04NjSU%=`WXITR4ni$j|o%qQ3=;yW(IMU zg&p)Uuzn#*T&d4nM(zPiK)3{eUpMggO78|FTv4Jqjl{ap2y0SmUVx&}r0nP|1BHtm z!K{+33@#3NdEgndJ*AAew=)kq;wl>Y)7hPypu)C>D_>gRy#%=V&y5;GD@Sa8C-swl>ej z%c`1?kN3+cl(;CU>rf%*^3kLI%&9m|!8vFy0k9Oo(ixCcT1cWHcp6)9xDj?u%FyQc z+|u`8^Dd|1X!$?^@}fzEiXLM9dLp}@6FNw{jJkpDj&?(kzOYBNVA{j)wZU|t_m2|? z+jS6YQB@U~8P2vLldl1pkf#?uPZJ!uw(HPZr^sDN9v{6~3=VHG8XWxZi}b70N6J_U$CaB$WG`Pzh$eNkCS zDKdrvlNdNzhk~ir5)!2Y)XguiY&5H%b`G8ygM51!9>cID{d_MhCg`SGXIa1TT@kKalvqDkVxc>9nGX~ z@krgbq1w#^4dA5lW74(*=5ufGfC_hxAW*j|K#<^KGh9d2XKqz1|1nO@IbS0h1RTmJyA~RGVnQ*7bwOv zYkNWNDqo~>*+u=*g+ZYafsN*bpa}$kI^r8xWZg)iV}pwgiPs0JsEy z7|#!*1t5YJ|0<0{s0>1&UCuOR%mk}3o#bExG^`7|Y(pR-nFn+{7%c%EjLYCKT2Fz!GYkOc9**>dAz`FGVE&waVeCZ2g>3|cb zj0ebpq9{!u7wsj2o>j%j=Q%bqj_&L+CP^CrbW9FO{~oo8BO61HxL4zQ)0uto_^4~Y zEfECrSf1TjcAsW7S;+{HOA2BQp5c7_og!I~gCV#fsgANS0wc{DuAh53mm58@pV6in z9gBqAYyqty>_@J>o)!7|A{a7xX_lz9h$Ds%4HA>-ssxA&)|l$}>4JWjLjW*^h7i}a zsEk3y#%BgPi^h0XFtTyJY7IU{g#^}mV~N!P;RVqq!PQG5evBHfC!)r((Tz$>p{Llt zW)*aAM3Fg^tSeZochOdC&{PekO@pRsP*;_Yw6QYiw#XgT@q0AXP{-(%kXh&o9j|vb z_l+8eY~@&|^fk+nB-Q%GIz0(mN;Vu0D+fb_iVZ4efE8GTx-N+fDkr52Lb}82or2yq{ zG31!9S6sAMv2BELc0-Si%f8}_AuQr+sEl;s9vIX$Fx8D6vE9S;ZrJGbZE6opcD6nE z6J_d%4p@s^^zSqq;}kQd`(k;7`I8~z#l=`&Fk*I4`!j1MDp;TRkJ^k=0urt3ltLp% z=(G4_gc{0jerjCpN+W^lnU3$L4r6u~z;tFrkp;)F1K^|aoSkRcdN|kbc9Nag@NXWA5x(>t$!N@hH^#qf;MrBL@O0n9G zcexbP@Xry1g*rXwd}|34`D{Jv$E=ZVCVdXc<*xTv0R&UKiVgb#eFmV2&o`_>{hnbD zn4R$cNuND zFEZRn4!gn)}-Jf zCo(|AzI`MS0%;jDpv1ppVWwmH zs>l?URdS^{r38@KbIVZV9y9Lh;NIn`2b)zGJysh0ReiAY_Ks)%tj*n*dL-u*W0SJt z%EKy*PD{67HexSabrCd+6fWVh_g{iu=2 z|Hi5eQB)ba^0}#S=+e0RQDmfei27Paj7-Rc#)GYQi^c&)LZnA3@XBpchm8ZlLQs(( z<0XBrb0B6krh@Gp=G_bxvj>3zyhUfP2`rEXe0toZZCmxv$N68u=as=QgnB4iAv5q;5Fow6%2qM6hS z&NAx8;R;z~8Gu?{^L0Pv6|7h_6}Xu%Z$6CA+zr{021$ z3agLpy@uoUroGC}fz(_rI zsZAY;ae(?&HcBRJCssnKn~2 zO&vb6V1!A8Eam4f7qLF2gd&X0J#$IEF*952m(UO);$Ur?@)F}n*g6ZQI2I0O zniyQ2_J1K=7}UM#DTw69(186fG_%^MM@Bi?X$b_E0Pt#o6TgaqAFx;xK?`n_SP(xl z!U7E3XV@jAlkycF74>78R%$HkO*?SSg0aa+cx^cnjI5psz>X>Ze(dzEo1ps(PT;!s zpl@r-H+bmQ2W{}Mn(=e0{bB)$oaOdOKMpQyrOFW}R03{hIKVLGWo%T*Jnod$F6DI5 zRpU}^Rv-@Jn2{PgDr(L2@l$SZHgZ&Y#aJiED)%umCD9yW-R@(q#G+|{QcyuOB2UmA zxPy@`<))JKT)Kx?0UnHid2xj!9J$^OMU7mz@n=q6H!@O#NRXE_Ge8pFicco68rq6Hi(!<@ANQ26VGbr$pa9FtJXCPXkMI%64C?L&yW zd5bQ(M}ui2_Q*OXsW00FmM?CvuNzkyIztJh#j3QZcdM$P2{b+eg%hxlpm^v3n+HeM z`H?vOqtN*dq%`?8O`J=h)<$p}G8Cy~;9o+#6UWmowxc+N zHWl$>;gGRNq)kdTX92SorUheSD&lp<$UQAhfS>RX*Zx`#9;rxN0>LE!+?DxzHG{va zWC6u~>o9^r4->JaXYGGWp8!^Po3X6i|%uEgVj045L&Qv1TDmG>vnOs&tFv z-MS8}Uj=Xgh|{Tm?d@$~YtzTP#2cnnEgw2&go_bdsc9@(mo(-M43iW!XQlZ=1B{GG zDiZihBLWq%9@^wUl!q7V2djpS*zmz7=pDPf@k2&FQz?Uq7j@D~9u1K`TUEzrsAnqc zCS)&micO>uz&UofbFoj#8?Fpp?*lfh7|pW+Nhzz3$D=v21rK`7~MgqQ!pA0)4sAsH$=9;Js+3CV$OVA~3T7AK27*;hcr-ELz)P zQdb^4v2X97z!X-MH)_mhJ7_x(AYEYmB$+m(|8maPvBhu~)`?TWRT|vCq*^j!FtdsJ zKtnL8&P-_olj+6B#zY`kRR)u~!F1A~t{OCT1s1Piw3;o|i>5_p4(b;Y5&(Y$zf7EY zw0b7+r35=sr|6O<)49;50z%Ec=8gjJADBUO@VlsX9CC`mmwsU_Zv0-R7bfaBC-Onl zR8@Vh?2BfUSpvW%^Y^L)fwY(f9IX~|81%2Er(q21f5t}W7|FTQkr)^c$sGh3WBjH) z&=e}+e_i#gQQYPja`dYUv(7CMpDt6Qb`$7jFDRK401#<)SyYpIJ)eZv*Pph5bEAY z0aR-RUE9Jri;5XFn-t(owm!*c*M-nTbmPcpU;j&0t+`;BV2`7dbPtNHcQT<_#K&F;EQ)gPR%+-Cz19IToX# z1D+!bmd2No2Ra)C{HjWsNJ4LK6M%z>6BCvHem5K}04n_8$AiBU1p*;ka<+!ZW)ijVyLD?Vk%$ z5tmC3$Sq!l>&XI}{!3_y|6aQQP#-7`*YA6~63Tld_iVSioiVLhmc7TjAeph}V`NS+ zD*9WYMxo+*6GPk*_AZkmVa=6PfcdZV9MUbW6cZ4KB*A2OZY+j^}cm zUv|}wbsU$+&zSBkfIpdj<###y<=2RV-s1N$W3> zLSu-c!#KY@SP{>JiD&JYqMpu!o7UQdg*l9WO$d7@0VY#l)3!64VP`h?>|fLY#=zvD z6^v#Lrxpex(Xh}n&TM>KOoW;u;sc|@_k*Gl%m!8EgQR<$E$T4$&tR=fF)9@s)OGD! zMd}7k z1@M>h?VRe2mGSXbyy%o#zp-3J-J+oZT&YFNZooR5Z!F7Chi_9Jew+v$#iqq@hk?*P`}x9*5Lw$Y1|@5pP^KWAKZxT0&i2420)HD=fY{99x_lhj-JGyyxqh*s!=&ST3r#mJDFqzJh4>fe0&sG0*1JsM1Wbgwu6;PL z_;!(|uCX?qU_P5+dp=9xQKUDCIOn_*H-JG8QYgpB;audfc%m3c9kgs5!iXun2N54* z!^AOV31Ha2S7Pcx>q5q}FdPlOPdPiN^@7C6WeaNR7k@S*Em+B$t~Xq; z1b`UNM!23?zpLFRG`vVG8WU>0#lQ(%7&TCs7zQ^mDAq5CAd*J|qLFQjKc~T#)@=^fP?9rBnRZcf@IX?y$teehg9U_SPEsG+ z6PU{`0FS!vHG&v-Q1j~@7rMc$(oVVP z%UY-gL~Yyb5zD)&*}>7ti$GP$GcRm4e>J(5XS7k-mswMC88D`CV&A7m4Oo2 z-PnGSKu#Dr$I7%+CkN_XvdSbPVS8Kzvz5W5uF=#rs>(Bp#8tQqx@)*k6$=s-Z$zMB zoYzav35MaY_=xCKu}9G{TzTV-Tuy?un?7bt%A}b=8M)PQK6x5Mm6?})Uo8RP%Le{l z3#{LjB*Ig1BVGU`X@L$9JpA3#r3*JQVU}@lGl&sUd4Cb)5%(RvhI?JyScr2~2WBwn z-b^rhn97GbuV39p7u$ z^$uYKwvu9pZ~>TPg!RjGcF`Q68END-a0#&L1%Qm-t41SO(6gzT7P54St1&*S&pgEj zX(kvdvyjzds_gBh;l9>D6^ez|Zu|lJSRCszk|8Q1&fv)8T9>ni%6nsjAtag5JI?^d zb_@!igJDKf)oJrP+rkiG@18Y?b=chA@!i2LxKy3@0DJr$fLqicG9~cG(*K!4Fmw!F z264*&BNG}wLM@#O5k|gs!~|1@S_6nnE@OoEX~X*=@}uoZ-Jq#!)FA=~Y!Yx?D5Y4m z@Yll!(YnAZnDD$rKoDto-dD!OR$nIbB7|9wCbrxD$}`cc9%mf0pJq+ zy>eK;%hX3*?m1||@6lznfCKTa4EHsS?0@ZM)w&n$`qfMb6x(G?|HLuRj|1?FT0d5f z*1Gn3KM=6J+JqDHc4k1|^^Y+q}KA;46GrMqGzLnEWya>0?w1(4?sQo%rLfElv`V=NF5 zm?ql;Ve3YYTN%;Q72@&%TUd>aiglKq^u z5D50|-2)>Y1h&DwFImoC?+i{V4|o9Dk8XXe3_OavWF9g+yerCK?H|DD=YXzB`0)1YZ;RBS+CA9*d3X$*7k5M2Q%8ksh{+>e-_ zC_`YzVZQ;p9FkYaIS%jhZnz-RN&V%*wv<2+V`$b|0>D=h_`BZ6y;su#ITEQ-j*@n} zSd`3x$nN{NY#PvF_)P6i`N}o}JEkB18KXv@MTHxi{@){mIGOmb&H-B+z{VwDXBO(p ztP-z}m>9B9-_rT4a}P_Vj&qX*jfCk+;i^q+sftV~N3?NYM7>yY`XcY_)r~1J)+2Mx zsr{2Nxafgu7xY|O|CloGkVm*^FjN{K#@1iu{)l?JG;%GC48?KgtOxor)Gf41_%;Bg zTja9Yr#L7xhw?~HSxL2t8X@U@UT)u52e6E^9-!2dq6lktxvMt8^ z16bf$IhT1<;DuLc)9?73@ko;nc}(cB!n-M4~VXUZqM4F zbMxC9uV2RaEJJ;*lLQv~oIGcJ)tV=-36(LZjb{Q)RrxMsGQGZVbaB1g^*)Y)7qtGo z{5a4vrvWgNZ+rH-PNrm_d13eMay23&>>!5GTBBR*Mkx2!4hVde0>JAL{4F};FPHgO z{2Yz36(i407lgUVw^>3xF~luD~1Nec-4>s5a9+o5{6%1uydxB@{y*F z#2Eus@!z^ah@WK=j#P(57R}n;?Od9J;>a{=`kV}b#^8;`@MIop8MCpb8F?P{H2U*0 zO1K@vy5nLY<=_<~bsge8cAU!?do4v1Mu;BLCWr`PD2%#=@}TRa3zcCr%wR07^;(4< zmvq2(IsOgDnr3!&vkP&Np;XbSFD90A1Lj+Xaf^Sp`+J!*t5EZwTiK^xs9E64!FpmIW^{0+aSFO+=oYpF?b4J z4i#*Q%rvG#Ro9{ZI>gxs^-(k+kO}?5?Bin~y(z-8jG;5w#q2_VVK8h^1pwJp73#*f zk{B}Klq*7{^LhUQ5E%bPUw06gz;|R_DVLKlE1lkpG=v`ByVL@_&`b`qZ85x_y+&BU zR~Z1L>lpl9$$_?;TdX+o<#M}fOhCTN$Y|jhxd2T%Vx(*nVNym8lSjHlFj%Q7w+IL| zc&sa6vf{tD6Cz%=wt#utpTw!p7pm?I!!f7Mha1$1jRjPf?HlL;L1~N_``DzoS!b*% z<%SInqN&XLlU#TocQrWAq$}(FfL>cy21{#zT(&+i4_DV^q)@rC9|Kz@OF94y=mU#& zreX?e?s~1D4n8hL@I=F#gHxmZ>`*RE5UzKlXKf^s13M}fPrM8G9&~4y%(ITjA!WXB zLl6foX6ItuUogp38om_MrcFCkjJ*d5=#=YJQM~8uSki&>G74C1crBwkcdc`v;5hfp zo&TAps=~OHzzlTrIa=FdZFLoUCk-}t=GdOk0cS%5bZF8ju4#@WY38!^1_;iE(B*JW z$JaN+Fm(+MZ8^^N=Xh)kG0ZSksFh>R4y)Ld5kZi(ebpKWsEr9dy9SM^QPmZQ!+1GM zQrhieUW_)!`k%j!td@k&lR`xwDP|UdAtaKQ=pI^{NeY?Hz&*Vi7`#4#;HwY-Ua!D! zQ8v_-GK4gKERT(m7d2GKl>qCJjJidYa=KN-L}t(Qj@HWbIerlo#tvU&`Y~VxOLd5N zan47)tY7lFKijGsv~rd@w+ordBdlq`?!}xqDm#r!;7r4D*doS7XxLe+wT1}<*`5({ zl8^Dbw(r+P`5cU4>`%PoSygveFvDeim6OYiOGen{tTT6P6s#I!pcqrFw~Iy!XY+j> z|1I_vSH?%IBxm`uEK{4{rKsSx()($=XjRp!E zOf{Y4q2*=$wGzoxc$T z#>JyJ8%{-k9M*N^BV58JbZv+EYzM2;DfX{Su{E0o5ZLzyr$KCLccegqQ(~xGsFNc$ z;ZU;SFr~!Y8LnVL6jh9IaY17kfnW@quBtl3#&F?9D%wOO^zDX55>qkQFe>(}ps9^_ z(Gn}%e+8o$t?5j=pI+9OnB5q`c%3mbea3b)155BIi)+WIU_+>&39l6R>6=}~{)~(S6YIyJo3}11-D;oNXR4kBOst<#05gmO zCn4gc?Lxlare^@-s5diSEI6ODAW`)0SE8ZLYQX%J)pvv0Vh=#|Xq6U>+H@0!9(6ix zHFG77W4TWwJ|ubXB9iMIW}gq&{7e=h4W#>{4egidKJ?2qAS@L`+@3_zrDCU3WcccAOS5af&o z%U&i^aTF+xI6x_A`eIy5yl7RmuV|~9Uel#B{-{`CMZKRfz-;DSz8mX6J4e!KEn;P& z!?@J*L5-AYtQWb+veP3kosTvaygR6i8~G@8xN|ZcxO@y))_*bg`aL~LEQ6F~Ousd9 z1JA$`6*@l*O$UqWOubk&>JwMd_Q{pJp!UK?Vj|D6DdJqQBkLywi(Ed@hp%cNSu_`okv(q zj7$r#dkA+{#|LCFPf(v*F)nt&yg-Pd&VAT2Ld{!b<4lNDiAg{lMyhSw!mz=OYpbx% zVtsqtk63NqauOLR3eMl?>W!nw)L{$;Q2?L{XfYEgw0lG&gAR5U#WMNPus3*ch?VK9 zyx;U42V^qtg5xIij ze{}-EB>;TIGJ=<@eWS%-F9LvyKAEdh135jK8;f6{{QdFhQg%2J&7wVc z@hUw9JDYw4IL7EYRb%Ef_;Vv5d}NdxwR;&zD7u9;nOW-HV&cA&1&2v&(e%8dKNs8Q{Jr7A`~WwT3sUH!Y7mDC_vFCN5UP~kTQl*@wp z0V7Sr-rtnBT?8<9LHFsPK%pHjLXtaNjg{kji*9=^%ugwjsW2uDqGv|5u_cfvDZps) z`Re>bCSUg*viGcV(0gs34FJla3K1-x1vIFb&~+W=vl++`_OGsi0jzKDz;+$Fwhhf7 zPI&?R@$94rZxld?bA6p$3^AstM1H^wA=p#L60Sk$S< zp@b&1qXY>H8%AAwCeV=aW|Jz0E2HlUrmMN9;1vi~B(Z@+^mTdt9_WoF3S7-(j__&& zf=dASievh&rniu;?EB>naL}Bv8wI}r$fP)w$d;MF`UM9sD@SWx11qZ`tT_Omy7B<8 z3L{`$sl{RB+caMDwYBNZ9y>e!@2RRvhun@aH)<7^v~jyo`=T{cMSyOpqbl?K^nTVi z@Y3lTHCjf2GcCr~1`V%7_kXtC5a5XF0WL>@8S@t+aWbYByRdD@b$4R~S(cHA5%Ua& zpwJbO3uD=PdMxQ&o^Qw_NL;$ULzr1b@My3{xl?yg6NfyaMH??%(Zfr{;vmZ*<2)Zw zGlqoWu~33!QUTSPiH_gY%_?FQ8;BhAW$hiV&%?~Zzk{oo3s)~AudXXu&aX! zD0uhyjcgj~9l=Z{0f4B|h@;?G73Ux@Oo0*Wft&4G%w}@{z}`uN+8Aukd|10+*f_Kp5sCtk=~r0=6OY8|jKzzLjvi5fU>RPY zS%XJ44z?}_fmXY}c?6JBzKAG4+brC<7>k#&5_(Z3BW!7bqM$*DfB(i`=6>RaE z;LRA`oKXeWs4pZuuY8}BE5V>ri0okK zERG{el>^9e!Aby8ul0+j5Silua_fCmH=@1xF+y-HQ??_0pJ3224u*V4FKo@woD75 zDFDBi+XuxG)M4B^ne-j6CYV1e)3XCk-TWpK5B>ze_9n2t;RBxARshRDG{3P&Bl|#y z$?6*tsWuNDaebBGL+9@$Bf*&PUxy3x5JQXV1&%+%f%yaVOpT6G;bK%8ozqdv<%Y!U zK<5S-eny%#qy^Ppn)MqTCj}Fn_h1ddZU&-Ukqudb^%1Z<=&Dv=LjzyUs5%91VuVW; zHB)F4BUsfVN?Ft}pg^7$Z|U%8=J9P88HsVxQ98&?AY=WeM7u~h3QeH~lX1}yzvqyT zl%4hNd8^J9CUtHq_O1kb`uNIRr&7d3$}l!bkAXECoz^>)#;TD??Q`@bl5F{su@fr!RoNs_vgR z1v~3r+W>;1(W7ZRJF$5wRJv{Ze7_<>qGyMs2N|LOSLp)9h|`yOcwuB70tOlxp_Dgg z2L<9d7w|`xE`mAhMqJ7xz&wqJ?GOM#-9V*WJgE2SR23S@f(xA}K)V|QExi`6Tw7!g zYd3Nzj*M7jfjB*ZM(Vd;Mwq~IS zL~G#)nTuCv`IS1|vU!Axe8LDi^=MWKU{)GWG|m`H~y!wSR5bVPXu{ zrc-oXi@EK5OiWmKk@(mb7xFa4xs>ha+bdks+BxT7MS3}I9M8sX;K;&-48Pcf;Uizf ze^l1L|J3$D1U9h=BsAxS_!^POP*MVd&id|T5$EgZs!F+qgM&GI&UtLiqI-laZ@E`} zzrFtU*%AQ0szBhCftk~taKPZ(B$jZT{)0OrEg>K3?< zWzZBc%%MZU=3)F;O@LR8yknSiVzER;>PP`x(T^tG0#+^qYZ@4r3ylTm6x3%!1+Yfh z9HO%<$K2bBl^y#%+GQ|Mg2s4`x!9c@^o3C(5M>J)m@KwCxr!CQ1LygcgUN&6H$L2j zLd=S9)gY&uB;u&p+0f4`Ni$a&4j@ocbc%Hr^R5dHVaA@7Da1LnVU&!hEexYx=e*fO z!h*v&7jS%Ev1YCRcUNdTi8xiB1)s6+4ECI(2byXDBVi=$V1p;8LREz@=~Ck=6bvE( zP&!E<&|fCJDaJ6PVun%sI*p#M>R#~bGcmmU_vhqQickI?p_<5*$H{JajMpG2Ke5d~3Hn)IF7d`lkdOs~{AAl2HfCQyr z$%+}|*f_1!`*F#9E--pPF@I$~D2Gb1B+!?_`5B$M#iq0Bz_q1DtsI|~4mMqj=2YkH zNJ#Ps5jg0E)g}|BalPK)o>7h|mDVhCk}JS0YIH?Bf-)%whR)?#ic)|IZGceBNUwo( z$_YMpij4$TYjcSv2Z%;a-!k$@U*qwlsQgn;Al-kC!41^2)( zW&skB+GXBsVmQ>wnF?g0HyOh~d68gd5xBsJR#oMHm%KjEa0Lb_l6`FKd%1he5(K^$ z9!miDiUWXG7|49p?BV5r<5(UZ`f;xbnSD-jU>F0PCzFuv$9>qdF@21Z1{KD5mau93 zjb>xrgTIYUZ~Sm>BwX6%>`M}+>poh=6vw}X-m;< zAQ>>?Vc@t1hN8BIiwr}}AQFaMr?QCMr~LD9ZWsY1+BDMT3o#uT6A^|}3pAb0somdB zawfI_seR~k$ObeFLmYrq&&~_=Z5%x|7SyInz?s>bL&Q0BU5mEuAkJdiOu+!=Z5NCl z{`nB1UPNMBuk$0}5K5gs9_iUbr}kG2fN>JC1DV5jsaJ$BsrC^`m1yxZPyNC~sTY_G z^-DV^Ah>WSQEC!#&cQkdCJLE>J|2e+p&|;q+ZCDdauxTZJAK6w)>Pj=nKd4*saPDW(AD#*ckt&6_c~ z=1S|fB=ovYrv7&z-r#ZZ5^(8~Z}^Zd2Ulg8y*3BP$W62q&u4g;#>Zi4oGm$fCk4pS znP-s+%doc65k~gRxeJB@5xk1$A;sXuD2UYVVfxCpIh@Dq0c+x-7>8x4=_eC5*ss+WchGZRAw#MwK@hx*K9?=;cRe^j(kMAkwnzEP>+i> zaMXy2u}f=F+3Ml)Ur(br49x`Pev}2IZINR$QOiHl4#?jua9005i1 zZ|TS?rF0*vx*<%0GnfgO&wZWSrFEb0XS=@6NVhRi!9ZnBU8jJ841=3R89AuvZyk&; z(N}SCG183MGVN|e;S7z;hwg)QZag1PgHzG*EMXhtcrCI=4mpURf~6}#uHK1m1juD3 z0^|`f`hDq4MOGRw6yUmypAiMJqftd@KvE`Y0FAM4CDx=709v%2=)UCG7o0J|K;}dq zWY;18w>XB5%^oqlJL`ciD&R!3$~?kat8H=x^QA$gLk}V|J#OqeUJ&}NqkKve&sg7g zrpYZF#hL3{kG_Fyd>z@q2nM?@&#M%@$O_kzC_0u)btMo)4sx7|-zk5z1nGK3px>Xj zy4fac|B*s6(T|K>(8?iZ>4khfU#eq5RHW;fL-C-lP#6bTN$C+P;5RWmrZAj#3?5(AtThHnoqX={ndL_^Ogn`7Q#sBW)c$&DS%6PQ71~v#}WW8AFpgi zkd#4!R5HIdd2kr}PC~0kRTVcwQ31y>+pp?-f2|GqewTpFF!FVFw#r~Z8PPH7QTcG*o3q7) z+;ETqW0!|vXP`rY9#`u9pxD63N}Hh@w?xcRw#`IiPmvL*jZxVm#O3cJi=rtPLnF*? zPDvr5S}C4W%CU0Mt*y^J!Vvr~8prF(IbDmEnRn0!otN6q1k!!fi3IaPG-rtOJ-HIb zy>WkfrZB|11ZQkyy%4*7;dOz=a9{#E%;zltU^vI6ZSl3xe zwQ>{|%>J}wzitR@sdK)uqzW0RU1#B(_$s)dmyT}Xm^&!J4Ngk;OYmc0UtS|AcOFDA zh;cI_Rm>t!6w1uGS!TY|Hz1xvXKp_9@1aT(OS|EoB+AlD(I5VX(`W zUQlsihGN|dE#nMk_L)g;#v&Rzm$h-F=v9s`*VxgEprwnwyIvFMO&iG^649x*!4d8qZu?|hsfDEIZwV?;tq3bL$mH=@1xX!>I^|PxKjS_%g6~LRRg5IwICM*7XnHGz3SE#dn7<3%JwL$N< z8G@a=t_Y%aISUCj%GC@=F5Vk=F~*xWVO-3vZ$MC*KMn56W(67PWaUE3lvsC&HT%=#mY2IyvC;<_m%0q25oOdzGun?}QjjzDomL=n-@%pr;) z1Lb-}%^tdv)hk`c1xq>rdamE5(m+$Tvgk$+lDsh`RsV7EeyHDm;wu{)YW-tYyXf*- zNYQ4le0u~E@V#dMZD0ly5R9Wt=@~Bp&{UNo#|75;acFHS*w8aP?>y+Mng+}iSievQ z=X!HRFGW;+!U5>I5RpSnDX-5HbKc2Zu{UryaggBF1#tqXDMUIQ+Hn-^*-Z(ikNA;V zNuJ;U4yo7pu}Q=>1udh9*GNie6|o_Hsxk&_DD(;=MOM=i11*rA`oO1@|&vVqD#62Gbn(u1Kg6&=9N4OzvK(JNiZW%o1}Xr)K|LVeZfis?1?N z77JC3eIa=ih|_@EGg?o8Q*L460bydf+4q~0}6(&MeRS*DeXVG>oY}m-=#3&sO(^j+Trz@70JwZyPvDO@0Ji|%Vqb4n_hVdL z_m+k0cAmMS(DQ4mew?|p65k zJvNqNRI8n%RA}660dhnN0}b`Sr3@5KU?JS-tSt-=>V2|i!`%4iNs8^$hL+Nq3hit~ z{{EoBA{OiIbk&&Q;pj0lzsN|CaD@!CDHuF0=LogC?KMAVfnpaS+FX zp&=@nx^#H8GIB(w-(i?{sq+U*7FI6=T@eS9&ZWXUGNOl+klkmabJzuTD+N3ECL1R< zgeseUeIgFF>%#iA0*MEUUE9HSEr=OaRl~XtT{M7%_rQ^Nqu5`pbNK>W=^Qv5I~+a- zBJyn^@YQdTQFqqCT9;y8;7#VBLy;qEbaV0;InJRD<7{&ySks@mlOg7%> z9NfymC}NnwJ=9e=ehCDZ0C4$u6#>8Eq>Ta3rU_%;N`*VuLF-rd3=1h{B4vL$Zw{%0 z(Ibw0w>CWUH{13M2ko{U7@9To2sj%t>cC->k4UK)J&NScU9Iy26(*8+Lv%y&eirts zO)h!_SLprpG)zW7r5-(wW%Uj8i8|mHc@Q-#u**e8p2IM3SZg**wx;}lCd?ljF)EOu zU9Mw{qBcBGVe}X~CbIBpHJa5x76m(-M%(4K7XjirBhM)fYMhlh=NC7+?l75rP{hBe zk-wG|=-_lJ$FQ3DQu`)`QqxFlhX(Nx{5r`QSd_=vm?5M<)Fo3o77GOwq0MFFj#1s! z$Qk!5VSM#5nMF&|0@r-LkPx^u?)4qL)*Bt1P0rv*&f3nwRG#4?1%_>BAp%sU0)f!k z)@%N{4nja()o{+Cvn?n9B`3Ys&|iYcvuNTVv9c~Sh@^tM6d{8!Cg#557@=9jdbZMs zJ_q(LL{Sj}$P3`tD=}2xFDDgYiqZBV*?t_%aV+g^A88+m^nknz`;P*sjQzr#h8?nK zxwd>P0pRlSiUxl~9<&+b89SqZUloF#o2D1H$5E#!)~^erj=JgHz!2ZxyMD>*{koZo zb1B@t+lfkwUOtbGLI z@jyxECwcW>_T1%hG?Ha1Dg7_tXh|SYLd~0#)XE!7AqI?IGc4lA!JV_HDnFj>I?wt! z>%y404gk#trY$&>!?v;s=8pKi*c=jdchZk=IbL5yyylJwE`(VNc@Sou^P^%DKp^$8 zFp$uM5}Q-h=PMMIV}aE4BnDFZwXTCrj9{N1C?h%H%f}J`E+4OG z)-T+oOc>R29Qg(iSO?%&)&0#%3RWTZfSM2ltw&4STRz)wd&`5w!A)6;?JEEaDV-b^ zM4afBh;p=)dP%jGP=P-NF!{#LuQ=NwfJ-G?I+Ck~Ooa1ERBSb>n3%`t#Q}eJNb! z+1M9(vqfZALHVCER;}n3meR~Z!wkA|+#11P)@7{#7AeCrDb*CL0x z4t)<_5^B<1GK)Bs<7a{1=bA#ABiNQ;;IP($jRBJfflj;;#5sqmuD}9V+XXkU2X>Kd z^EyA9UN_Tpy69dGj$O51qG=dhEX=NXC_H~E<{UZ;1U2XAFnXrr^h&9M8j41ii}_7 z1D>0@Z}e~>t4xo2l1>eNJX}{j!_irv>$kDqk9@QFqcTTe#I2Y{SX{VCG1B`={ZngD znYk^C8K!m!Yi3BBMh0EI>SpR3i=7+d~l~T;-U_4fgh!dDo zfX0;hf&sv5KtnQ&9?@>ja%3mP`;0%!T&yh$Q^G*+h5R`dIZrhknpjKjgR1pnq&z^l z826_549N`=PIC4#v7t%_XRT_|z(_0#jW=uPQ0q(^stiYEfV4iAi1JY^6)an*3>#+s zN!~Ux+C(Gcd3|LI36;i?F$`GhH)Z6Q5j6@QVQ4c@k6~KPK+{{YokcMCAPUDbaFX%^ zqubSkJH08!n0{>tK8Uxh!zF~me0jnL-Y>kRP;vhKNmrwXf0ykK%<0$sb8K^ zYFJK;U}Pmpe4|Je7L^jNze^Cf1c1xO*A@JYeLHG&OwUefqem6kzt};WZX%(}Hfo<( z89gF!n$LmF4Pa{>XlEh3mKHEQI#5=P#o{()Q7x345)#9MqOCxEpB6cLc^H>6=A5M> z$|DBYT03+T>lkrSY%{@QXJ>5TqL=iWgOj?7*-WhQ8hTo(8NgQ zUokE&Sw}8%IZ?Kf3|?UIB~H7SOVdw};Ibcg0ieV_U2$Gx=SRXW^zm|d%d7}ii>~eb z=+_tz{#=(pWMwKC!?23&69~jgZ~*u3Rm3J8AV+{I!7#!`6}ULx%t5ibE{v_oGnO%j z&;&Dw3)OPORfe4rvk@b!2X9g#6MKi_K*+a|Q23m@Ii`1zN2WCDDE&wouyAQyZHQ5g zOe>aPa0vjHkFO^Hq`>%@!1%Em_13ljiXbq#QEmU{Xm(%@IzjH4v>5TSxdH5K0^Qu- zSarln7Kg$ZR7vTMUCmPHo1Bx8`*djpD3}HfK9uV%72jv0xH5Das=dJGu2zu|gfqgB zWlmxsjozuK8q2n0ZM2}`CQB-QXT+FL-jub` z!$}bfQUr5rQ%lymQRcoubqA}RkwTeAa`6&ts^UiU`_yjs|37Wm>`Gi7PGu)9gr|%5nASzY+hm-Lk>)R1JI;|Ohj;heFbRUCPvMh>Ad$rjn?4h zrT;nWV1}9eCOXGHg_*jCA4zHm^i+~g@LD&omi%6wDpup`eu|p-o1btJOPpJqLnVhs z!%1JD{(D$kEXnPj|I!&L>SvSwz=mjSC;i1lFk|&55uD#ak-s8p&4)aOP> z0VrE5;;VT?pRDuLsA;@OVkh&v?ZY6|xP=U$oin3v66zaM&0VfOAatM?rV zsUjgh&3m!S^!bn1yG#flebSiDkqZof-984e=L9=$Ek1>#S67rj#`*WMSwpk=(LTY} zj^2+)r%dwBKEYFroZE5C$^tgP+ifU!qqHmM0Oh=+nMOvL5bp7MlCj)+c^TWWWPxz_ z|APnuz^y3}oZkUnYr2IZfQ4UE@(ok7?KaDfO87L|?WTTxH2eGF2-U%G(^^I%3;^LedJh8ptPlnOg(iY8;2c%S{s?3F0{-8m(5 zr#2^yLsejwffU!1w$!@k`({(FF1aMUKZ7sfl9q6j5~_V&r&vLv&Lv)a7>Ma0TQn_w zMrj(>j9?7caO`6{thZq@*kKRCs%Qw_%WoVqd4d!bO-NEfoJVA$B4S3A!|%khbF_|8 zveud}4(Kl}q&g~pc7mJMa~%iEq=b1g8rK^kE^=KF5gcN^JUZx56F(SUUw;4r!%fSt z=Lz@oK1k$oy8(&Ov-;?Pl%IhZ7}V%+3sm;sx9{~URe|wx8y@Jb{ZIJl+ z#rUd_<(fTAb`MQU_6`$Yr+KV44i189XjM8(lwJAioPCeWszqK6u`y<9g6kf>W)Q%Z z_%byt_BqBfaeVGOL+l1{YyS5+lwHZ%*N~t3jlEop;+UwVY|E|?RJ_gQX_YwQb@)X~ zxs-dnt*_5hU4zgc$Gnzf0rtk$L!F{^LosYhFjw6ul&nhO6vaS$EDe2h`56|h$TQDA~}w!9;!PPCtuOYv)8ei!H_39JPSnt3vVKTW60q!WJr4cj+^iGJ8u2= z)WF%QeJleXwim9UkU!|8@BjP1eb9r?T*Pq?9rh_5u`&JfV?{-#C8gA;qy(jp(f0;L zdlMI%W=Q}iwc21WGA4@UoZBH0w8~3d?l@_%Pa0;J^3vN8W5>dTB?k5IG!cDPMU0AU zswTrM)mkMHV9mL;-wlS>UC2NvIa`j~9tIrimPH4G;*ifoY3oacpwr^E+2lW@3g@ z39Af=5Vl?>rV|)tn4|R}5tPz4j@!9OFQhIdIuQ)eZU@}jt(U5064`D_+oAR`N(B2R ziId_5!6cf8^b{8PD*{;f<>b%&I~=`F@8x9_7rj!Zl(vU3~CcI~P+fZ4k_aVeK_*VX84UurnE=WJw~SC%waIf4Fr{J*%C*E$vh~BVr!H_`?PFPy$r^~j%?BFZ?gu*5F)~WU~R0&O`VT} z@1OiT1^begq%{6ATg%MVD6U~ziqe>25 z85?hICdlbrOYlO@5CIOEG@Z6^)=uRJgpHUrNGKgNybV{xL8m8wvi3B0x^x;Bq*U9>#zcMa z1X~{@>Eux2WZtS}TuZ zp7UflO5KGbfQ5IHKbxN`<=%D+gC4gz1;6YUf~)KXWJiTA1r1l14GG6oA#II zks$)Dd2?Z_xJH9$#C0kdOfTkEE#?>-HI?H8GOV6~2j&la4#d}`l!X31#t?~SvV?8#9D=`3fbu@H(Gg$=h;UA) zyZE%jZ#G6LewMI%WuKt|!wVjU2PYnvL%|OHl$r11AW_+H$5q*$*CCu`QrFapoyl~Y zf&pqA8_Mr-tfeW1o z282;|)gcO|vqz}41}p~B05T9FrqOivNW`8RA|}y9^7~Tc9c{`uJ?+i@2e_Lw>!1m? z28?}3gzhr9a%+It;FR;$tcNJ#EC~Y)b7@pd7$LWsG=e5PuVEA4!tP1fFj;b7_6Lro zOD$<|KW0=Y0$51vtY~`tO!-%1-2Qo)Lmo#n>ES$w9Pan|AhOeqO_W2x+3)xI4S?^# ze0Dbpn>`fl;YTBAgft$muc-1zQf57jl}hv#i&Ls2f-Ng`8lp6ES7DuITw>-7@x``L zG3|E*xw$k1BDIuFqmmXCKb*Eas;+7d?@8VYCiY)h_0%a_xKa85mc*4vxLek525Zi6 zjJsQ`B_IrB7%#u!B9z#jAp2?1ILYc%B?to*hK$FF;#kt>P%?JIOBk$fj8`D=uZN{q88GOTv_KKvtmRc|@`e)Njm z%zxURTszUuVZdW&7>~GFk1$sVW7ai$wUCW39-AoU^CV~uhmYPd_-8j#M&_OnB7S}^ zt@T-_`w1tVaKGRCrF+OE?>SROh{PybHix|sa{|e=LqZ5gItRqW7#8iV|7^cblw?T> znHf&zF(h&vH(c*?Zxmwx_WQBl zr33H#$CjwANd9a&GN^MH%5s3dyf}s+f*Qsw@o%9Co~NPdv>q}3hB0S0%NT|*L}EV& zhdx3jvxn(PgBXJq{|ucX zc(U)4bW_7gd3+>`z*@S6K*VFx3z|~BQ<7-43fYn#-c%KNW1$iZjEVCB6;-$~Y&v3l z>Dk!^iUQpLp-CC?0Dv1H+=RT68v>DQq2X#j1DH&nht`8Q)DiXyi@zTvpOaU?c-ch7 zO!i?-ys?r*ARgu z737qXFc6Pk!Sj@IFLe@lsv$K3oOFuspQecLP$cKZOv<&Q+BKOFW)|g95=iE0P|KM6 z7*fG@$iPUyCg#xkjFx2RZ3$`z)6^)Nah!oc=ms(D{f6C4dS160YnN>&v=6gk(Z3>q zg=^xcTeWtR3E#u?`Mvc2RH(P(XB;Re2G=0hu)qHtcL;%Ad47}mrK3g_QW4Y&9mLXwHA-f*J$jDQ!0 z0})=Z!GY53&%qYPUi-0B?T8?)q|9FLQ4Nf}h4xF#Y^7hctUH{i8#2yovi=S#)1 zMjTJ*M|l0mOfm^fb0Sxcfk=qc@Xdos0uejGx}QLjGu&?dc!*B8zn(qIm*)V-oqDcr zSNu9z)LTx;pJoR0Niw0!8dYVb52BspjD1oI076B{*XnVrY3>-9_@V(6; z4~=qbZIZu}rqZR#koNjDqwE|%kEZHZbr3_3yoC_TWl?0--`*nQ8VG1 zS|E(9-X7(~WAc}&`~R`@t|3pwu!)&68HGBAEu2Aw#P{ywk_Yjnl()IpWoAw7d#wM39fbY3g-aL6RF zIaysHo!1|uW*$!>2-qZ1gv}loVW+Pv34~GvivWIk0_ZYi#n$DB#P67YPtg1O?)T~O zr^d!;%~EB6LRG*YKLEae?kz z?tulfJgOyc-kIEmJ|U;PJz9)7kgP!FoMlE}P%Wf8*oSMgWZ0e?oH@$FE0BWIN+4tU znMSl9u4>srFzqoUPkg4Xsv_kB1~KX@HueMgX6iKx?)`r6Lm;;XOx>sNPG`^hZAZ`M5aOrhUM<~{ysr|^ zo?(0rQ)ZGOqSj`Haqsi%pQ)#jXm2Ae6%LlZ!28(;Rc^p^$NARUZ2=8V(-b zdjsQ87K^7ROG;B$0%uelhjX3JYJ;StJ9%2#o~VN z3f>?-F}D-v?-O<6_v0G?{n)2^q;g+Uim^%|AgrEq@n^G4Ui157`Y)7IkEH)B_NhTI z__Y=nb~-ec%SOr8_WeQfb34P?q~@tgl+A9%s4B)DM`N48;m@7gLnga8lueV_8h>b! zaO-)8Ji2ZCp7l%&LkKRhB2JIuo;;xWdBn9lAbV~*G8$A_myp40ng;~ZiDpQ`MT^NV z5UnL(2t^XzIMG6Eh4K!cehEU&|@!FlfkcBE;5Ws;o+$#@84Qa z+(0BLL3h(;wUn6?xICtL8{iPd@ArFGEN|WVMMLQ@cAJP=kI(?s|B$Xa zf3-6Z>p&=+$6m;`b;@W~hBxJ0{cfYLob#cJ9)i0h3j2}qIwzMmpUc_1Kp-~p-^0W( z@!XWfd-Nptv}Nh_y2+%eRn^prW474J16BIIwu2u_IX#fO*y9?9zOqY(IadwSFE&Qw zMP+#xmw~~I8`ccqIJMr;_dV`t24DR(4mEJ(>H@+^y@&3w1Y6D{!yFXpD&7fqX}xK9 z$YJrw@dfFx8)+mw4QWOnqId*$k3JIrKuz$F;h`o&8jL`62WFDkHZwtP-h*XoSqC~! zDGLM3q_7URj0ipTo%C%nC^lP69MTVcFDx6sP?TbH8ylL$HZuKsN)0Rm_!S7CmUCmT zpO$QG0tB&?d|&0CrztxjxVx*#bTCMs?~ng=(g^gEieK)X!IHh&|-k??-{SB^k9~GMwWO4Mqa8vGuSe z<<|U=09`!&T8!OeZ?p{dn90PXVG?(jsBdVdM;Ma6zR>_D51V-YjQTi~w9^o`owr;< zejHK9e0YbG+*xP59jtvI8zGxWMn<(^VbyI%OdJUb)WMCx)6cUDqODhBPKlFaGhi|L0EI+pI!D8v z5!_F0Cw#}PN$mG)?+XO0%)$6h*^o`8R;(!~MDTLc0TH>Lh*jI1q)ryhqs<9nl6#|} z8f}~YK=Xg{Q==q2Py1tvSBhW}z)wp4RN=XG@^>?;pQ?Rh7y|nPFxvMT$OlF&fR5pRLidGsU)~6Zg}%mcUqJZg=jo zJn29d2ca=hY4P0K0XaZ*LYMhmjf8;-qjXvxNgPw>v) z#Hx;&S_Z39)-G;!o84ruO?0pk<|O(%n` zmGl_ikn`8oF#3eojrK_NZ~+SNnBj;9SJ*pZg89$RKkEJJ;IhriTs12weX2c8D2dkccngrHBKykKDAFu<7IijFS6HJ$shUsluo~oQd6PS`J1KFF`hkLjHYP;uC1k0Vjhuaiik+-g_R!Q4xjETN^3` z*^r5g!^_ISuqyemGpB}qzbwqsCQHi(bMN!J9XCS)r{XrwypT7N5-c!}Y1)&f=`)Xl z0g6S;B$8waoOlY745l>GzpJHRjTEHwKBscEq&)LZ`hO$)+g*O9tAPx+qd_}vKx0oT zU4tDiWzVlG3C8jttV*JNJ$o3G^o+$4x#o0^27jC-Sh7>T zW`nSh5%gx?cEDl~!nUfjWJ`ZGUJgTqoh_}lgal^3K^yN#I~>r2(y)0=vgKb0lgCC0 zKEmp!xNNE-$;Stj0rRiOo)!|d znI(7kcGC>!xrwp8b^svuFxnr-fJayFPWf(Gl)u*G&rg~|A>i$4Sn{Yf3a+PQb}e{D z&>d24KKsv0s>tXq)Zq-C8wtkQOWREs#K;-|4k-(hB-S8vx0?Z-?8Py~+||G~Y<0RC z*h}e3M^V^b6C$dKIL_AcnUe5NTzQ2efd6sXR|v@=6TY{XPWJ3>RUhoJ=%0rb9dE_XQ$e2hLXtN5Zf4bK!V2<-%5BGn)c&+tl2 zmNK>;`{7l|n0~U%WhA9?oBKLc?L-M$!=;jm9Z$d2fcbaj^;&53B`FlgpUy;BffFDHlYli&& zJ5@g$9IunU*52jSO!)$O^+WT45Apb8?qu=&5vJjuT}1I}wGKo!@odY41-tM%@}UDT zF#FmF*0K{Ob{p<++ggIAP?n7Z=4ey>))EyXwbawlsUG3` zu}09A7-T(!Aco-f{OUvfz>)PiNv*Z(34f4It4bA>M=Qgkw|eUM`9Lt z#^44QICw#(eWM#2n0UT-CEi$7XPUlx_Ag>SvfW7NIf0P2vIy>(TB*Kt)?$N)4Nw zC*IWEVw8qb2H5RkP$y#B?3vT+j}b@Oh$em@_NcXfnJ7W*YTa>&s>d{Pc;zbSB#JuO zniehHn~$YJ&<=!KJIs>SO`)4i9`i7NhIyR8gK%nt0qSwf(8}%jr^ny{43&~42CgB_ zG!u=IGX~O#O)izGLaO@5CT343-DjU*(YqpmAD;ZdRKJcFfR}&!WbSczG5ZigKs1Tp z{dG=a`tJOxrfEj(Nuv6_CjDtolGOBfLRl9vcXmfuRiB1l)wHEfEeCT#Zmfr1)VnhhE0-EWgL`1G<{B+1d${3U1li;c2d_WfaA0CBo%3FyAOcZk7So=IB0dan;_&yCu6+Yx%;zewov`M7jAXmg=Nkbu4Y5;w* z4EP*?`D6sC`MBS%ttB^tvh1SFdPHgkf#M-a|lo^Hp{>6J+rQR8Pn5e%aTa14wL z`=(CKPU;!Q-Q@ZJ#$y;$vyj||eL9(lN7P(vhoqIj*r3cyhoyC){|$pr?LowRV^=5w z_+eDPv9mvBxmT4R>v5;D`FR5T_%6gxdi{XBZ3S}w+Qxtgh$W1eIy1jPB*zCk;lwo` z@p=VEW3MvQzax~08|+PV!|O2lk|%_|G@EA|GjLrjoh&ddE-bc>%shn1HqWDf?S^aL z8%GvpiLE7DxW30?HKSACl&F2^31dwDzz`{z4WL-UohfL8AP|_q&s>pd*~TGxT~3;- zY>$?bJmfGn8wmQY@gL%JxGB>@NUn&bdyHx=uJ6+V4Y02j^NgM9m#~)Tr^S6$KwLZ2 z?jXgA(;~$k3N0{rkwJ??u|jcor#K95#ogVlxVyW%yUXA@z~!9t-}`=_{(0HilVn-4 zcXpDsz8G^d!awX!ON>k&BieT)?avgnh0DG#!Cn~d2A)^}tyMtZwJ4W0k`}H7zb>}P zRaYUp8EHv1M8R*}0BiSsSWNCu13ASr@1Kav9Bv|XR#I{#{FQG~5Y|Lc-Ob$9Sa&Cq zqjt7Mm7~u@r{>^6j8=#q-6T7)Nzpm?Q;pZ+d9MO6k1{-pia{;Z`5UL?n-Fm4RlC zCmUIJOa1UtxPb@g%k^h9AKl>8=s>}R0a_QbJ+q%m64`uc1nP03twNwi6PbjxRb(2) zh7DTYv_@wo-i|x2z7`D=qa)7T-+;uhkXk(NS?h3JR+f~V?LJ7h6ahGS&d@eX9uCbV zV*J+mK_Qy|vVu0AJPjdYAB~e{C=wcOZWwtSa>J^S=t?byvMB9bGRTy?2liOi)ioK= zp!HGAQ$yw<6y$Jy@+Vn7*h|@K-P)$!H8ZW+HEYHi#wTdeU4Oy>wH(x~$i!Kn;v0^+ zsPYco8X!3RZV(&JDs0O&!U4AN&?Alyu(LSPqz{rZ9;Lb;njN^;@F#Za39|COH&t7} zd`MpcmsV>G1LJrZ^$YL5ko3cx&e=!H*mu%xUKX)92|>TVUex4Ort~kMVbzDI{^}G3 zfI=?=`_^{v#fCDPKG$#u7scbPw>ve*U!^b9R;ZxV8b^w6t!r^UgD;TrU(-k<+eSwN zRQSB>Rz6cHOU+h}bk{tTer4p~uG@?I(@<@!G3=}+X~A)tmWPi|E<5#`&jAS6FV?)oB5V? z?y>)NC@k7q2|7_CH|Dnp9f3(NWC|w8g4iCa8@xVnhcUw#E62pSS^iomD%l(Fcud9Mq&I^hmdR&ax0{rjC3K zWy2QEU9Z0BK~ttN_9F@hGMyvSjyE(`ve+5TwD>KJj57yn`#!nA36n8(56HN4B)31AVvGV=yMYl|ya{HJjy*WM)=UexDTH#0; zC!G1BydPT;5ls{T{drzYikR0GH|7WJ)nY*JH&vDl!r!aVi%_H7)N47 zj2d;K%bY)^qos&E&G^l^tFQRXTW#n765~7+;!>kT)imTZRNrq$RNdR5Hos6Pcsebt zf_o-Xy&67QUPMXk5fJ(aWjXA7XNbLk>Y6y0n3V}UgPhd&@!|aeylBmiqp}m#^Y50# zGv0dVRa%JvKw$B~J9hczg%S>#6Any~3m%!lJ3bz@HQwHYCE{FUjF7Nk@*PqJn^T9>Ic;ChD*s@X^3;G=n1{Vnm!QOtg! zEgS0AI;P=xI!h>F{}clPHQOOt=yVsF?x3?HZ|L)eMCo=-y!xLS%*EPkADS0WcZaYP zUp=V}-BHv!gq83PqaFB`s?gLR*{lz(bbjt-ZTV-;ldxj6F(;YWYIw_Hhv$mno_6Rfc7_*RGfxqy zkmvG+waRmqb4`luaeCVQYCDL=mZK5Y`4r6^@1dDOfe?pL9Oz1piN~umI8*B(ZPmr8 zNPE~=G-hc^AIngiQD!;z)*JTIPd=(0&m%DNoUZnK-WTzfUK|_y%N3Fg@EG5G9heUo zTEblSvE`_Q#0}^3mSwl3?(3wNVgv=OT}|H91`FDm_hE9Ui#P47M<)le`zR=2tVmc#yR?YL^?pWID}*nl8jWu3M}nb%6JKD7xps9`3OL5C_<3y%)@f2ghMUI?qSsov~O zDv~m^PWM1!?)mAHTeu4AL1khD^$_7Ff4^}wH|HAZ3!L35v1zv`06aTpMCOs|mebe^ z^?b;j5H~Uj)$FEy3>Z@~bn>y2j&9XaYzNl>^h;XO!or0|b$S7^5P$f6uOPlx=n7;d z{`>uO!dFvYnTI+TSkXNw&=0y4Ic%XV^|50P)?4=R(=2IaFR#wna1Uz9B!|C-CL!dz z@#}izM*tKPvsCzlyC7F7w$U`N!Y$UU%usVAF5{6w)3XOt@m{wIPuMR zvJLs}NCY>Pg;>xR7d$&gq8(IxDkVPU@r)GXBF#5yA%|(CpINhHuR|Z?Fi3b?`*m1LIHUi6rCKj;}T#8@Q%h_+DWsI3n2H7e3= zhqiCJ(SLw}-V9~Lf3s!+oMuR%4}5C-BgiCB@APnSN|8ocXlX+8BWb-!2AuQxp6)Zf zJdb`j6GHQchJ%~xKd4vfURK1$=Z}crhY;`ABslW8!Zf!d7YRr6<7S$QwtF(%X1m-A!KRrXfYSsXXU|!Nsd-JRhOmv zTx^!M3+rYY(x(Umb%~y6T~-A`?e%2E%XCfeENE)<;A=pL-RI)SIA7_tg zv@CMu5!nh;sC-ZJI|xD$rYZ8(eI2)iqvJ|`e$lM$j-u)c_>r}YA?}joMvsrRiMcCZ z(8MnKT{~v{Wi1&-nnp9=kjTTon@%kOfjd6y1PhT+m7bPTfXAx3l)-$-SsDP7<~sVv zn@w1biKTc$+U%NpK}AvrtCPa3J@`JUbZr@A|Cy79fK4KW>}&^ev+VC<>@-@Z;rK$a zbr%Hf^iBJ%j>u=Bot7pY))PT#yKLy%rDiqkI%qpzZUPMGlqRM`q(D=wtcj@zA|&Uy zdQ2$}i7_8=Md3J?Q&fLp+rO;9ncf(#-X2$zB}p_kViJY$T~E(hkW36e(Q3IAK|TpC zfj;5L#lMKJl(7C)0T!B6M&NGyv1z_JSn3<@q!t3oUkQh5=v$ZVwer3D$T^LYZ#^#f0!yjWHs8xa8y2%f_upB;do2y@S z+h(Hi#(SC}xtj~n946nDPH|+3QzC*#4FW8a`$fs9^s`B)2S-|rafc78KU2pmTqZhA zD^%0Jl9oAK9mu2eyOpmO-NhDqU8=RMSSYnzOs^nv+E@V(P7F_9v;yV#_sz5NeM4b* z{b&CbV;`#UU-~f$q zNnCN%B4SL}{^WWg+h>WI49Z^?K$4ZZy2`aZKQ(F$5mU?jQX)QNeS^ee;UmS_P|Z-q z`s`h)A5VP~hy+4~AZyn*WK3XYcAM(h&+mi5N#UakvUIU2+|eIdM~~}PYNFXOu@m!o zRI_yvluQcnyNtvsV_*6!I7hdgv^~$$w$Z%RuqD1{d+706hLz*IbE1FMier7)Qq_^E zw#iK_e}Y|YwZkIDbNi@E-E6Ntw7H4)_r&;PYi<8D>RsP9a${#=T1lbZOSH_fThInX z8BTYRbL$|5P_eP;;1s@#d|c&d2yF4=b}FVieCO#Q)gaA|on9tqD6ERQ8`&U*%B#BeeSxOJypqu1|l zCG;J&Pbn3vg|IsAO2Cvur!>MOfu0qpm&Ux1vvSRc?Wg4#QM`xSW>5+>j}EHe7h7+M zNTLVd+Le$&8xf=7+65Qpoy95|Wh%E@J?7PL4ob{$c~AziQpI#9kyd?e9GUv|k!Ja1 zPI^ABGV*m1wb=V^%I|N7BGaTMj0f6QJcNo!yb=*^(d@T-LwrO17NW4V#_MU?78Guy zJBMPtZ~{jR#j({mav403tPzwQ=RNWPMwO0Z4ZPQPU;av=N?5+3GwW2-`}Q1L3B%eZ zOzF#H%WSuy2g3WBscVhgKe_T;^-4OnMxg<8Tjp)(Q(ZR2)q&#U`~?%Q22-f)+=M!TCMug0M@!#tRdHv zkGV{fsh1vRCY14P598pz!jT4~=E6q;>xRvF$G=hPw^_JPiOxC62ELzF#;w-t;#w6>(4rs4F4NZs!%rs(V);ck0hV8Q{jX;~&;90yMFEfqV-&uEb zKfXHw1fwT3f!qSEx#BP%z^ z7iV7-LiQhKr!GftxMz`yR$CxSjNZoAtB5K2xoCFPqDNPW0bDTRo+|>+!6LXz!uxmP zASHE%_aI0`VX+tnS(>{H1yfq=scq&GnGN^pJYvDLY_c83a+Mm&@8$JQ-)tq7gIWXb zk#Csla8F3E)Okh)CiEaw{TYje;Q&+X)naEz&#=r`)ss1TdzUO$&HTFnDjXG?Y6DCz zzMop~yza|6iRClbcUF6(biVEGrlP{`6RMS}B@|atqo*QAllu*P)($pKNl6O4fxq$6 z=<1#{WLO2^8-isieEl1AhhfiPtveNhNoz5C7ZuZq9+Uz3LRgoJ zXA_q@m!OuP#H~_uOUf_JBF7#{9?gGaFU&NT65amZ(0hV)fZ?fI4C+=;!{2K3OoauF zNviq=Q}QP{nRr{N&Vm9%62gSjdDuYZ+GWfyydHif)UufD8-fyKBAygUODwI6&_FB} z@ul4fTbv`p<#%}W1sxk9at^S%67SP|dYDtpb<|%360d%8IQpI2A0{|*O|^Bu_@AyM zr$w1jP~(U-;Lk1Jhs1MZY=_~JO6F&rL}D)-*QZZhkb~@{gD|I-!;8S*`~!sOfr@M# zt4};}aOJ3lx~IckxfW;NyoCpAlY-6s*yp~;P+-JVhR^(AqD&jib*w6jh-cD2-$|4- zXEg;*9?L2ZU#%${g`rUib8Y7WyOzou=v*RErQz*P#1*7IXtK_9Nw`WKxYKPU@;k& z;@=?m{!WAKY}&_dRjE@Ejl z$a<@+#G6q*P;KQqt3&FVurM*3!R_Uu0v&9_3FOlGN1u)Yg^`Fd>?8tCS)chESc~d*LSt6lpslzkV$vA2DU4dj+5;-%pVCFfi3=)! z!btX@Hg81IiuZ43EClw!>502%&F<}jC10)xg5H-KE|~lr`B{b_N0g>#!ap$C(ud6X$vfmV{NilUx-s+XXb?5yGT(}7!*DJCs$Gr_?A+TiI zYY#of8O^7XghDaBR+y?fEE8hr=BdYnURhJwV;?`=DMD)3@)L8HWde!-AA*Dn)6&9% zp+7j;Rs6|`2 zM5MLQLhgQpO1w?`Rg!e?S6k^==V?V=lXVAa2v$Q)|3Mu1iXNL9CZT<_t5uM!nRd(k zI|s`Q-+*FI`AaRlfE!{OHi_il?tGfUAQN|H{f8-RP(TQWm&l$PO@B-}$Oyzoh!}}r ziq_5AECZl8p$%VWc=yiUvfk7?Y;|OIhP7RjIYjrXU?}|E!i}E;Ns|ofA~9UMXRr{| z%lz1$G`xYqdjWmAF7yRxOdjmjA@UWcf2m)CKHQ*f1MC*_>qvE`=?5UnAtNZ0-EW)A zYYgXXpIDYdvCZm7x0`hFpuIMYKW}(@iuqy7O|N1k(pYu7HIJ3hcbQUhRaQzKmlF@} z8=_6J*^8#)q74c!UpAsFD6V7O*yZ*?anHkJZtJkNG=Qbh>onfr{*uxDax9uM5k@%C z(W8P=E3T^tJ*V@V2QrUnK#QKqp!UeXuE5WFK0|VOADoD$nYyjW#E$Mr;#AK$RQj5p z=-hs5XpC`0R<+e2YILV|y;VJWx_brI=P&YGo9)coXsaLoDu=<*M-*XhuhhQ~5JiPG z4mbbwviQcob7MyqP86U^@|Y>3TCQd&5bE?zu>)MQrN$+@Rc71$unoD_*R8)ctMfe5MGUiO?!G-N)}W zFHD7tSfi|ZvY~GiVw~z7X*8dX0}g7}9tR{?SkoE~<|Au@LF-f^(mNFA*&oPfrU-_= z3#l0Qj#;kwah#;#SQ+btF+;mDs`LaKN=shs7Io@3@8O12jQH+*o=5iX?_n;U9H`Fi z`ST?hU7FsZhNrhAElnSC>p|XA?HTr*M+rwhIokXrP{k3ZqKD_MOT7hNx};A4HXNH_ zn7bLGs)HxrOVEM^3j#+sYe%YTyCwwvIyAc2jBU@S6>p+Mn+xN=Tc)rAEt|M)f=U({J+~l516XiYh1;y zl`|=HahQ@dCXc6FY7sxG%tsu3_l#F+7|RR{T!Ow^bDb;hn4I{jB~m%bTOtA8Vp4n$ zQiH$6(X0MikL8w2P5f$4)>StzHmmYuw(4P9Ck1;77NcM{iHhE(%?-H>9PNsh-4+T4j&IXe2Lop)Lv)e9{23XvNO-|!iT zIV3+CJUb3v(;|?Hrr_H*%TU|(%tXnNS8^~(BFLe%21)$AG@R-h6B(6r&PN!CS89g; zm;=8Su1pQupvsJ^*bAovZrD=tP-SLo9hf`S+jF@qnpD_YlYWqe8`9wzqq|fb| zJH3%;e_?a+Trv0bqUjmWlW}H1tm*V_x{HjM5mDYN9|;hZg2 zj_iUuW2rKJ+2N>1_>)<}vyX6m?2Bt4wy&!9M`Fk8M6h2F25k>cuUlPfD`ZP+!ml$? z%>50NeN`KJb=6qHAS_T|XAuRZB%8sN|5>419DYhqt(Vcsmqwt*A%L<~G|E<)vs(eD z_(uyVK20^Hn0Z2`y*by%$6NL?Xc9+$+_zFi?!MS}-x$H^ePrm-afb#Bo35A|Y35C) z1b+8W(hH~}y5{e>0(aT+Y;+*(O9-JFcZH(IS6C6PdIh`vlUM(e ztuZ%@q$}>^!e6M9r;FAc7tBI&KZs2B7|n$6hTiK-Izk3trkG6{4M6b!9A>edp?Yx9 zRL`WIPQfiw^2vW*BjEkXQ-EDQrB^KD`&)^md){x+T^Rfrew|qyWm;ITd?C+thCo+HUPWITBV;xO%=vCfcE)3PX=E^qS;EI=A1< zvbYSYP31}WKom^Ml^*6LN|ef)tZO+u>$UUcU_-* z*BOPVFJpaxQE;$)sCkV(n3GoI{C!l1oHT&)FnHZP8siT+-YqMA#$tGSh6HEFeh{gM zo!v!dBkxW;U3kTkzpCBrmXoyGt|66z-+KyvDE?i>q#?$3&2IuY5?e!zepbl>W<-&` z0O5Q?%~Tz(^7vdBXCdb}+^D^ofbqQj@pvN#ta@Lv?k)tODkMuPMD;PWhmLQyEz&-U z;OE+04E9+73EG$!D4*fobA5CU;`;KmK_${kAgy+N z))S(}!4YtDKR5sN@~$XW;O1Ruw<+s){dgbGY))((Y!gl+MFwU`vO;WUSlF&pla3CX z^a4iRmLOCM4xcffl|pacfsDgldt&aL1iU1gvpIHhdyUyvrH#H_u1hfzuxopV+;@O2 zHTH1*_ygQCYZ3U2yourBQZ8ff#$B6qN>P?*$+OV_`WeQXo#H)N?k@nNFx8pEeXwt@ zpYsx@%GLR@*`5@Qr~#@gbHkv4x}6dPM4k6RZzet3`@S=BK(vS-+eG^MUCB!p0d6BQ z%-C7EsP4Y0-w1M%@b+TAL@?L)d+t2^45{?W3@7}c)1fx#Uv-GfRQ;3ai1IRphxQ+M zjy%I(6>qtx zKwy++#+fu_?Q~yT;N+By>=M~|($hoCx?%me)XNC$c*`%Z*{8E=_fd{PgZcS>P&@CJ zLp1m2%&plQLkSHXR(G6?D5*bUN~b280>CWVtD>N1`$ZAE6Z7c>ftsXR$EmnI_%dY* zOSz2GUbb}Auga9glfR@=NK(RYEQj|_s)Jqb()!YQqXn_jU3$Dcfayqp*HfJF`epYo z6ylUenJ}5xd`CXA!4#tb2kPw|&LCrZUKKoYku5|WS*;hx3Y7Lmv>3F zKsfA9G&OBGHJmspD7;#`6DC$Noe?~Q>Akr%Ib|0y;DDEQu$iTWh|@%!Wr zkQe4t2Z(8vd}Ep6u1%oY@y@fxCDy{OeG#=2b=E$4s@n7}9rr8PLpM0>SeOAx+R~zK z@pHj>-=IT}JT?>TJtq!GjLIUINu4bxW5t*ZECGDBW-#t|<^|t#w7e}s!4vXR+#SE2 z>CI_8u8jU3{mpBD21Z}Lx62E#B(2@rCsZZQW;OO#*_hh^NwGNBGN|b3>j^VLsfSZy zTcl?>+q5ceY+k!u%=;xN5CjBHT;PHy%Nb}I|ImVL+rB>z?BUn(b(VYEyl-b(L8LLgT?JjM`Tm#yPCp~FP7}K%_7`cXVvr~-%!Y^` zX@QmMQ$7U2a$&BM_bNtaf)6ggwfG^=x1GpjG|h%jy;^*JAmQ>1<>wPkLC*t0-BO)8 zPG#}o3O>uPMi``ooxt+8kz1aK+^{dh)A|D>ZGD(77oTH0L+5m2J-)c*+S7z^-7sOZ z^DK~oWB*d2KKzjVuC#LGlxIh?AH@wR8{v=``_Sy7d=5?k3vj))eC-+U#EmpK}wu4df2`zWyy2EddfJM-uZ z8nuur_>8po_lW=-NeEsJaL*Fkp#o^=BsW{_L|sU}$K%jB;rK!eM})SyoydZ5r#9XiZ_-esp zl8Pa6Z;b;_6TDsTp&}(W@83xbY1=MgoZYF_m#wS?+7eW74Xy{F)%eov45x*UbSe#F zs!+2$Ua?qDNp1mTl@7X$?ek8kSauFgPnbgmc9f;&qJd-JexoU&L|6iJKU_v{vGqH= zCrnBvspo5p?lD$jlIFwpjMTCoV^5^@s}O&tpscHRF(w@KX!dr8uRgRVM5runUfpy{ zp%R(NtT8s6esEZc&LRtyn%02|fsLdP1@7}<|7P>};)xo6M|)p6j+=`DQ{<-_lnu9m zb>k<6uwOTxGA|@UvJv8xR_V zbQ(Dk3C8`#=}563mf!VzXp_AG_ApAd1fgV7st-2SNUj`kQoW|J@fEBCULM2(^uu5F zy;`k*P;Lda6q}bBBwujkPK%w|GP_zuUV9jg<~JYT6rVhP$Hosqk$Zm30or6Smxn4A zcm#W4xv?c{fG8`m6!1nfT(x8G&QQ;4ahg1>&h6MXa5m;TP+hNc$TY`4bqx=rZQP)j z|CVenU+YKvIsN9pWKx|!8Ef+kj9VsYY+=G>aW;7BY5R!P$F1|?dbf#4<)z(9{>?S! znK~m)|KZx3PlD)VBLu>oj3t&ceh}Q>Qi<)NkVdov!Nu0yVHZm!Od>}Rcl~fWl$uC& zY|cx^?sq+8P_&=Ptc9#~5P>+kZ``+;Vp5ND<(}k6_BMXLxuXE_vtPq3Z}?}bT$WQk zc^^B1D4PK;R@OpYOtfC-oqd~OcQf6%ZGjFCdffhj3HXD2%RPE#&Ks36@8U~yv@2^t zqORLl=ulr6D^4yeW;@puBy1Vr9)uPq<9V%}___;YG?h_5-D)u~5&qjNsU-}4I5|fP$4KiDHYb|^$#zb=G4*w{<~aI; zklSvAPI`!7>@M8%lXZQNF06BHYxZVy-a@nKlV}S0VAMT=Xe1@fKJDP#y9c)(0w(SK zD3o8t+MBIZ73BcrNstluCHt5D{818u>q<9!btd5Wia+|(G3mY5K1-+n@es5 zel>F&I4>S~CPx5VH1X{ewGdP$Q7eGoBkVk8&BSO(e%;o2QLq!&X7uzvFAQDTs^ zLmSkxB~C___tWJ^{t!mTH{BDwU}{snW({5b^S1-#)Gui{5N+1NKvb?iF)}3DOA`ju z4JU}=YgN?yHYcgl%3`%6NkdjMlX)NX3#`f4*;!#$w2d*yU_0(0Y4B|=_~t3B?SHw4 ztEw$w`a_LJTC|z1$TrY!#Tr`O)0fRJ;G%y~m7kYLWM0>k3k?%BR5)o*K%A|gBd$)U zjvG2VQNx}@D!#zi&RzK=A>+IDtd_Ai_>y~9Nz~C(w6@#+eP?pUFel^CbhGuoYag+{ zfkThfAMi7HM<1;mUXFW2($V>O(g&$QwMm12#1|M#!$5`nfi9-e%&bMVF;U?(MM51o zu^BD6#$9eqTh79hWGl%N&8sy^P)+oCc{(x5m4bf$E!ysSy$OEXS~7NFmFmgm z$t4n|@EvK#1|dElYIOmHK@TV9C1=QSbFoO7y8pTutl&p(c#}|m9YnAu>4uiSh*yl) z1G+nr4KpD4vVZ%h5Do$V7jtw|HL59h9fCRh?=wlydBg~tHv3tG%)gZQs^@IJzJ7#( zJ~7>uOGEk3T^3~St7P0GPd{&|`P5L41&RdUU06^0^pQl!K2RhsaKr>QTbkU$#FbI&uORefIhVZbh@h&6;17VH;5x44a*76XO z6tg>Q$>bTm+Md8|A8?n3o0^-iT6Gv&Xvn1|SF9tZ#Om4S!ayOp{*rUOom)*rwc zEfZR#F3cr|o3jTVFAkHwUcREVPBe}Iu^N&FYhkrVhybJ>o+kFmIdhMJvuqMk)X>VI;)r#}ZxG0s94LH5%7T*9?^>+4KvG$J2ze9__1>$sO?%x=G_U7Ym zGe+`!T0^w_lsxLijf5Q?u3ISjdg8@TZ}D;IH@50WQK^k}w~ROx)q5U^%xIRL^?A4k z^+s7E9SSb|z*^(=l3IyJ%uE=`eZ(*~l3lNdOXBn3-GpjS_vnWC^?r_{6R2_zg!M#e zq-{Fh(-M^6VN#GAkO4x&&+fvVHaz!Sry5Q$7)p?y!wlrFw|M->VQaT|!6lU66TOzm z9)cIL6?geD-;~3wdYcTHCIb&XnmpDwfadZurt0sHH7Q;ludNUTc9braL-#8 z=k%JNFM_qJsGmf(L@l>;!+JnRx(FNdZ8dK| z3-KLzPt8;ssbDB#)*=oAC|Y|KF$5#KBh%PI8*1VnuimJ6``Ci7{C1LGcRv8AHd z8=s{g;Kbd}qz4Z!+^2AyHi7rDuF+z$c)A-KTThlzlef2huvSJ((CXj{d!9{0K*>mh zH&VHSXt-#AnaRlPA$Q$-%{nu~<+UuLEs+8|rAAMV(+|~6f$LAXe_2)D4C&D}8f#S} zVN0#xst(Bri|y6{qHzs}{zh@xKq-Cmq+aj!g0G}S@Z9vumvi8I#DlTlW)?c){7K$r~@{_vndf}}haL|!EtIcYD z)0gWw9_b7iY0w5EqMYJ81RC5lP$|zy%IsWj;D0lj{Z4w>2&9et8A3$qmDmF| zveTgq0)Y6o+P0r<{)wTRx%;KP5!DU`))^;coz!D5!x{eYflIAE=;3bt1>y=0pBr3% zZG%~X3@Sme!gKr~kt*#%3seoEFVi7n+lqdzu{~Y=ls?eFwd&w??e4$OW*u6cc|_;0 z!bZ%~d?;_;-nT_yr6Z`16tTOhPVr{up^8?Wgkomd8Wm3A6F!til={*GM5oPZyrKN5+mR&#wSU~#C z>-rGcQ1bn^=aeq>-u8<@u)P={>2>>fqx}S-iQ;ua;tBK$3%!D6bxSHxxZi$52Pmr@ zzF!hTIJeTrLe~D&pAh-x_2e%HReJ1RYFC}kl*owX*12`cNP~S*%%6LMJ`;t$NGU`Y zdC&R&WoNz9+3vK`WXV<>YJ<0C*nA0O}tZ(FO_+25<0=wC=G3Y>w_om*TJBy&APerj2GV8xr9Yg`gGhqL` zfkiMrEEkwjc9tUv){4*U1S~f&r_QSJK-*^Ca{uy*U3D{WDLLX4Vfon`HEjUrrfn<$ zP+kxzfG$@q!tGdx)!@0*I92rmYT{CMki$EozhU@Ep$uF7h08kM^L?+vQ4QD?+vH`$ z1xm1mxDW^0&^jab(2Jna^%TQc`5Sm)t={#rcdXF1KbJ2$LgrnX;|Fkx?u@k2()_i6 z?!Ca_`vd*^H5KzGIqUYOruz5(+QP6frMO(dWRPYSlwPHy-{3iF7IMwaCY;S3JMIK*_39#Wv~uR56fM+f=_Fj)$z{&C;C3>FYk zMQNXfyH}T&w`oUpNP0;&)VZUSi6+gAX}?M@1dn5~uSIf#UsUVXpWL)_bnu{p1Ca9P zh}k7XK_j-a=W#VwoNgVk3bp>_dLY9^T`p;4OorvT{l&Gv(5Bfn9cHg0O(;r!OtlMvm@|+~e|2rs@^#i`*hx1u<_u*xmMwr?j zW!w1;gZt<)!rljG;mYF}bH5B0wC#);JR4!yw>@x_f56kawh`&J9y`7t-oY^!YilOI z8z_%48mey@wAE4&0#Dy4QC0k)`vAlEfh4m1RG2udKwC4~pH@86A)45fgxAxE+`Ao_ zomhkJpBFRAcqAxi2=!8|dfeKTkJD z5mZCed$_}k2S4aBDZUB+FQ@d@qflD)IQRD;k1w5{2pg7vw9uCNlb)FV!{T3=bB57I zFvT@p{k6qmr~M*ACn{eT#da_-gk?ZAAf?~kB zp~ajm_dhnkOO*umO(*OQG~aD8i%}}i4LQutrm^?_Z|;IZx_1>{K7hAx>cYIYGu*;B zHTxV|@&2Vt;py-h#q)lOHBU<>asN)E`J7Cp0ZAw8#~aca-3JuU#l3BnNET>tLg{Yp ze~eK4F`9ZbQA5t->ZQMw`wM0LTiX467r5zK^ej~idK0*vuuN9)jRr5A*6R(B+Hcb` zeEO~AKMhLv;Y9&^fZ?#4_!r~5|1lAYznlns45%v>?ad-x+JQ%J4TR$F#FSx875rB1 zJYnN!LFQY{H8?OF!9Q8;@0DS{zFoB?5u_d%-oymGb?<-fWnteG-h_Oo_xgw3n*!RX z?C=V2*MG?L{y_Ohv43vfZ1P{K%lJE*_kY=@HUvtVbf~faD(>G^K<&FL|7$^;xK{Mv zDx1@MYhRA!wf{4We-|E=wi@=n|4+iV&x!w$^?xh%?}PPUGyL<2{V$~c?Tr8O h{r^ruMekn`0R}PTNIv^Fn1HvRgs7~@Um+cz{{xTQxdQ+I literal 50213 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 Rs1j%pgQu&X%Q~loCIDE-B}@PS diff --git a/source/images/battery_bar.png b/source/images/battery_bar.png deleted file mode 100644 index 3aff74110f8d216e1f64ae10a42bc3d8c65d59b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 225 zcmV<703QE|P)3}~2@kc28EtH-F#K!m>xRFkddynKe7$4-w{~$g-2R;R99H7|a z0OH4Z?S}^Y*8xmoUy`wpv`uPStt_%!zi^@)K7W29ew1C0W)z4*}Q$iB}%t$pI diff --git a/source/images/battery_red.png b/source/images/battery_red.png deleted file mode 100644 index bc09b4c307cd341e81a8f00e8a8524a66b11c6b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 138 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<jv*Ddk`pAj9?V+w%uL~* z{ed4^cI^M;d1fqNX4m+p!@iYy<4yh)ZXPf8M?LQX+54;tt~4&@lPP_$g4uJ`tG2x4 mL<95f^Z1z9@1;w0F)$Pb-BLe(JAOaVa0X9TKbLh*2~7a~y)C)` diff --git a/source/images/battery_white.png b/source/images/battery_white.png deleted file mode 100644 index a2812c5acccd4cbf5e57de89f093d80d3a16dfc0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 86 zcmeAS@N?(olHy`uVBq!ia0vp^96-#&!3HGb=lz)rq+~r^978H@B_}8_NH`v;S2!?% kfl1)3%ZZjiRu?9QMfX@lRvfp|11e?f&c&j diff --git a/source/images/bg_options.png b/source/images/bg_options.png deleted file mode 100644 index 5b694e0a45c316ca24874fe46e8774140027260e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1765 zcmeAS@N?(olHy`uVBq!ia0y~yVC(^62@W=(i2u2R@(c`YYdl>XLn>~)z3uNkC0gdd z$D3c77KsPxJHGn5MPvHj)@jN-S`Rg>*fO1FEBM5)IC(7WF!-4twWZ+UftH@f74Lr9 zo;l!LvASB^@pDbxhlg=;?&9eerx%|y-a59?^}M~T2}*lU z%uD0{@2~ML<+7OIf}(k;{B`DH-`%!W?%uoiZ(eEX*UNYA#Hf3pK7IP-)6>%#d>a0| zua1g}^6GVaT)j8$eNJB9KK<6m7vCRw6k1b}oBQ_hn>TN^_xAQ~*}Qo&A3y))lP5i2 zl~@7wZQi`Oq@-lZw{PDrUAq<*6%p~``PqZhNqmkKO=%+1Xid^%pgeqB;oIrH54^Op}EbUZb?CGlQvjjrqCf4K)|$i3H565G9d z_fh#5-+wzX1~e9YsoGmoQxoH&{NCi&W9#1A_u91H={%CqDiagzz7ZPX(U8?~*3m_| zOsdc(bl2q>TI|Ykb8Dr=?*MH%x-;yJj*f!E*D|S%i5=FxGiS~`ry=2g>R^QozjUwL zAA{JK7>hQh6)SdJ?&$tdQJwY2wztUO)yIOmx_!I%?~kv!v4}CGe7a!1zpkDhpZmdz zV7_CoD{kbNvA->|=4E5{64h-x0hXk;7Umci|Wi(s>Q)JU{&8VyT$3X9NTIEb36)l4PQ)6>Pc7d%?T zYR`M@)G043TU+154=*$^avWQGutJu9*4bwZ?&d8&n2>OgK}*Mse{I<7YYA5#AN=#D zro6u1J~l2c%AlcZ*S>vz?(XiHg@uI{T*qb?8OR+!?6&yg$^X9M;^KWv8ML&_c&n?c zHO(LX){xLYb#O*k`|8!J=U=;iy?gWOy8ZbN8MJonwy?MNkB*McOiNp4%yn#Xk-@uT zhu^+^TMjJ6?k7zb++R>yn##zirQ|oQYHysCg@p$~eG0pfh*Y(JwA3rQ|b8>i|KYMm-afHq4zZO3q&b3(H#lIzL z?Rk*GBh$@y-Oby0TY#_OB)99G$Rliupt7rK@4wPNWg%tz%WglBzjHdSw;Wi4O|7?l z`{vD(!-o%-6cq)rur%zCzY~7^c0l1l*>bT$o~h+x@m?D%LVn-uS@bcfX1SpF!=L;m zo3`xP6H_yh8L0T*cUxUuUD15!r?IZfOVU5Sj`&kxV;cL*m0{Jx$Zre2#ixJy7P6=4 w_Z=lBpEVYtRkLi@NP;R6iR3f#GwT_yUtW-^WydE7tiBjLUHx3vIVCg!06tM{V*mgE diff --git a/source/images/bg_options_entry.png b/source/images/bg_options_entry.png deleted file mode 100644 index db4e24726ec9a1047a430d12558eadc6896e411d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1106 zcmV-Y1g-mtP)b@Zd?jdk{gT zhaNC}h(AY#o zo{r#mf&F23x16bEJa>Ab(LU8`g%D1=^C9Dvj-oFj@)QKW4|KgOy+|WJ(g-XqwHqf- z9-GaKv+n*D(EFFa6%mmN1%Ci^4-N*=MuXH0&XMVwT{yQ`UuezEnc17}yv%s_uM4;$ zA{7q)5aa+qI`zzH)Zm3P$Lg;X**7+KpOh1Fr#fjZ;LVTEWL*4=Br+$Z&FVf{ovE za{`HGVO&1nYQA{-SQ~g1nAbQ(L@E}1#(R8EF@ZaoL1qvp?`GqV0aJ~fi%av(BMY%bt7+AUSOJhSA19jx-Q|35J^`u&k#{dK*6Yh|b7?j7JK^tH(%B9#li0kc_VQ!&fv zM|*sB?--*&>DO*;41QaFu!B+VkqQPs0QHauN(pmfiHkf#a=|Dy1{P% zbM<!*T=n&oR@Py@*J~gI@<`YmFk5c`e&3p}VygZ{O_f z9P|f$;4{qbEA}EH)ers@Fh^dq{ZQEU&VF3EwX)mW?cX!_7Fc1t$rqrk{|P5=M^07*qoM6N<$f<=%TT>t<8 diff --git a/source/images/bg_options_settings.png b/source/images/bg_options_settings.png deleted file mode 100644 index 0e5e0a62d2cf5831dcd188b9ddfcc4087d4d523c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7799 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 diff --git a/source/images/button_install.png b/source/images/button_install.png deleted file mode 100644 index 4af67f512909852b316ce986b8e20a98320a9565..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2372 zcmV-K3A^@*P)6 zuB1o&78ObLTJy!ehxbY61AH~0N|Zw zCk6%vR>*|}*mSSSnBa9ZXuj`@g@pwf5t68b#P2I5u@ok*DTloR67h}j*{cY^PS}r% zc9eObuO`74i$yUwIJgYH({wa+MD+jW=j=6E%8;)yhj;+d#T>)<=$mRk5$h(PHmD=8 zFC4*w?N^$oY&fAwpc8bbl+4fccNh^pj$S{zkj?HyRzv$9>@YASHWC5us!xnUmItAI zPQV3A&6}Py<)eXfkt`t&4PG1D=Wndhs07;G=nCMVXZ z()4yW@N7ZY-n@c{o0pL_)N@?GrtD0oupPjh%ye-Seo0Ar%>=l3@1-WQR@+mIfH_$& z@a<>Q*r=?wSCcDcOzDtZ=K?p!-45AqPlO!&XymuHt(U-vE)h7mUTB@(?A)~E&YaE& z*YkyCLmG+X^81txcVeAVJJ-fC34AsT68Pj$T>jHhki|w?iPVCO!l3;+ZcjlEQ^*O(DT1yS7Zydm;m8m5*SVi`YkGV= zcjSB8p{=zLaO5AbFi-=@;o;Ojq0n_^Z#C2&pxmS`v*@;Qy7Soad4iZSig7kAagtk zHX03?mGCYE8+G-3uS1S@3J?A*UIxrudAWY&g1cq{>V|-~1+_Qb?1~bAxtt^@CwiNt zC=~)H2|^5`PzF4Vd}OA01z6MbdQ5$8mImNwF=yyDPM0TMJr}x8s1|R$)^d6R_REW{ zjF^Iy^z8ycl0*f2fCf%7%K-6Qn&mNcpT=ImHEx2}o?Zc389$%Ee3Xy#{(t|laOT9E z0w1oK0HVNM=P&r?{K-Z^1hLhwFk$+JfxtB&xgV&~d2D1@eD;n*;=ulWGE-^b=Ch{h zahUZ^IeB>Bd1diGFTLT;Py32M&}}DP&5`mf><3&2FFN^lsjMdK1kuf--OL1SexL4r zwq6wV(DG}S-g;``wdZCPXulVM#0R0j`qy9iV-J3Nn)||3kh(8}?R_Na_gsv*OcbzeOD3L(8X3V3jDo5@VK2yfB$xz zk-vz8J}X9DYIh#$yWIYxo@EhfD3 z{HT>oJ(?=?A1fuJ6c6AelQzokZV}Ml*MxYH#q|7oGbfr+T(4g~_p_;g{qE$#>o4dV zxkz2fmz8{?&AOeoZhzv~_Uw+)qnUvnkK38-kwFxDp8yG7Ir12ovbx_zxsVFeBh&H) zY*ZxSSC@`gFTVMwYtR3AqH^Jlh5_DH-mmqN&qjV9utvW8NMC;Jw*C3heRtjwc6qO`c+NyPNF(=1)H}v2^z3O5oH&1AI#XuPGVD zH{%BmdDBuD`}okn!Na@yZu|7X+%3C4ljW#@uwfg0EoDR^!*r+HQZl28#^89B0MrNsW%u8VIbXj$JO7tp$b!Ih61W$o( zstAOu0l#TK@)^5&N<}22`jmR#?f@PukiG)nQhm@X+k6-VOd<&tm4tDUvJ3*DvcLcx qtvCEP`)Ay4GKzbZ$6M|Ht^E(B))To}ebEvC0000FK@Opx^=bn43mHHn)th4<1N5A>l z;xWkVf)&TkU^$<~@=t#KVfJ4q0N?`BWh)sbpE<_(1TuvsY!NJGOWCs1kg-ky++m<) zm-yoV_1(r5BWMFlAoD?;q@|mdjYltTZNs2o#!*XUu05MzTV+s685ryZ@~^>`)u_3 z2-fCnhD_ueqhXx@ym-CF015CK>@C=3*aqwpf40gbUw3pF^fv4TY?EyZw##I?EH9E= z`Z^NU3Bdd8^<~&P>?YfF_V{TI0{aB^2=*BEjL8s@m$2ZQNLVKXe~vx=HtaU+ zTd=zv5k1JIQmn3*BYkeznW|X1a;&k0Pp*H*8>#pGp$1Ne>$=)(+g6rksXWhBmSrkQ z5|yUu_&u(B4icY+74>yolA#FXXRyyyNz!Q&ykC{>~A3z{%d?#E#70NnK#(;ZXI&@ zDTA-q>l(ahy=X=7^4k2K&Jr0SLhtoG5M6g%y%zZ1*LaRuwujp<1ND1hmpB;DKFSFP4dEs>&(B%uYo7#$x}LLCi0t}&Js zcCKei-!|mqa)^Y$I)_fZj{)fdDv?ww1^7H~>!Lo2)L<|~#TgwVAXUjsYBQo$fWP}H z3L8e7vcOJuIcFyXqYRGQwN1zvY=>3H%=GMc=MMC0oyc}>}w zPSF!2?#VMb;kv*{Js}`@P>g`jI$Pu!SZmU^#-5@Gm^YgTetc~ivyL_Ps_RVEYLX6- zD<-%(?kZ%v>P)KT3S+9zBOnp*xr{cX&yf~^2A4!Ddb2obX}6U0q*^q|wYPuoW z&`d1zLoqidBuD~oB0pPX?^ihoW=24Ie&1MKsYUjJRF5KH0wOliwq-*?xk~XFoh{pi z*T2;x?=$?Q z8}uQak{S&ob#QQqDA@WMntkIqg)_zxt=IjzQZy=&5Aq(qbB(3yF#^S%1$~sQpEL&i_1 zyFnV%#Fm=`^1{}~M5Kev)>@=N38;A!^3=KW=je?FMeoVu!zfXGNUPKCsH*2Hzv3YR zwz_;}eX4U2rx)|cyf@E)?)q^@v^G0Q~7H0TS zX_e=X$8W)FgK(f~m8M#*H77ORjHrw?RRs7ot>Bo!AkQ)?U9si3(vjw770Qi$8);){ zyF=~piirj$0%ipu=LWIqy?;LbPqcB5P4bPum#saT^2C&1i61MbV0CmItZE6TyDJud5P1g=eyvo}WcT zz|%ns|50v91dg&KZX*wRMFMU?LLu+T&_a5LH<@amW8J!e8ChBYs^ugJsv-hFS0brW zBvSN1RE5$E3l>9Wrq%_tEchn|;Qtu<3_jTd_sNKYLAH|<^sxb)7#?dDbQ^6{e9d|(r|D;>GvMt^;5S}+blO% zI=rot&D&PV3>ocnYh5>5+4a9bN(qwe2i3u3N5Ndsn>!E1C`klN0y?iS-k&k9BrbIS zRXPeEB!k}bBn-AJ%iguUO1J3!sR$TRP{n@3=#TU>0NM_uS#qtEAUxTWG>YCYdYwp5 zBtx58kmetP1@$Nzdp=L%&2%{UBI$P@CcXBPEE+w7_qQq+FL#UHpSQJW=0fptQO5g3 zm;XtX2{)$&_#G_x%Xu>CBxgmyOkg_t&^eXo&%%lta=nM=p8@>+BD~p3_ki%OT)%{7?-oeVmLn|#OV;cMD+H9vBbDWc zn5g=%nzd0HjUHvA@DV)!IO@Ip3f_N?iR&wWb#149^$tloInnNPfrKpdo4iJrt(Kdp z^>^UpTj1gl_;J=Q0?H2&QNuQS* z%e&RJD?M-JV)RDO2WF5kA97rfr!%P2H{iYNh{guiz87&Wo#?Sfp7pVgz~mI|0Q@#& zvlR#3og`@Q#zBWVfGx+X9MrGgCh(;D^eoTFoWjGsCKEXiAZzGTE&&V(+*X1rR!BQdsvco)$19-icM#ByOzf8ma zOAu*gadc>x$}Oi-?*jO!x^^`=$>Y`&KPTqxN86a(e9jL&SD@u>q{FZYSv0aZu7Q+~ z&&o(dY6(Cgjd31<=m6mR0NulNUCgo_)cKC>mV(maYS_GWFFxrb)>A#H=V(|)i7gwE z@iF!LAmPEg9vUzQ$>|aSfTh+T25?9TtHmUu#xaD)L%ZxnZwma(|0`kqpM-5}$(Uw? zjE$OZ12jb;1?UvzQm?zc#d9&Fa_WCE_>cUv$7}xaW7gP{9fh<0gUA2X@oysqnMgh9 RR;K^}002ovPDHLkV1luP!kqvB diff --git a/source/images/closebutton.png b/source/images/closebutton.png deleted file mode 100644 index b2100d98df2aba97aa7b466264e2ced2eb74be11..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4765 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 diff --git a/source/images/credits_bg.png b/source/images/credits_bg.png deleted file mode 100644 index 3ce92fd37798690fafc0c86260086119f95be24a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 60180 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

?H2&u1c*yQNOBe1q3iu^2UQUBj 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%0D_^bCz6DAz9VMh0b;` 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 diff --git a/source/images/credits_button.png b/source/images/credits_button.png deleted file mode 100644 index 877773179e3c27d6fe2326bd87416d3ad36dff1e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2897 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 diff --git a/source/images/credits_button_over.png b/source/images/credits_button_over.png deleted file mode 100644 index 54e83dbc9540f8bef042aacba8178e25a4eff2a8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5039 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 FV1m_P0HFW? diff --git a/source/images/dialogue_box.png b/source/images/dialogue_box.png deleted file mode 100644 index d16b96cc057650f7ffbafc97296dfc0c318529da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3834 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 diff --git a/source/images/dialogue_box_startgame.png b/source/images/dialogue_box_startgame.png deleted file mode 100644 index bd684298e9d453b078ba4e8f7be67050cbfd797d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15834 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 LsxoEL(4hYZmODkQ diff --git a/source/images/exit_bottom.png b/source/images/exit_bottom.png deleted file mode 100644 index 5f957415c6e37398735eef83807b2d61cacb88e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4820 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 diff --git a/source/images/exit_bottom_over.png b/source/images/exit_bottom_over.png deleted file mode 100644 index 03b1d2965b233ceda2f56368eb3761eaf6834c0a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2815 zcmZXVc|4TcAIHy(5m&adO=5<+ijZVU!l+c1LiT;c&%R~r+KpS9%C+4J*WM2a)7Y2B zEXqY>-sTiUU-m%kdEZ*2b9h8H?@>8ePuGO((HFi<=$69O6NOqD;zP*sv3)Dcoh1KR&cnF7KdB|+xzH#y3Pmk6$WuuQ55-Hs z#?C80i_KkKwn7~eK&V%}&!}rahle-^1qC^w7!{S+q?D8>74G`EIrrwawua{B-v&s{ zoxz<6d*|duM^2OVnCwGBR8E~bW#{8_zPAvIHZ(L8pvqLQE=Mumd=A@Ha~p9DnoNxA zUaR)+$v398mAG4HbvzQV2@vHJQsQReLjBg2tCu1HNS=4@yg<%7)+Q^s*{x2s6gzxK zNJ>wSAzz<=pD~ikvVs0Ax>N`kVPw3Oi8jTCuBFGv$A9VKDI~9G&ka{!Sf3wqN&r;^ z117t@-JQCAlE0h#P=&Oj=f@=C4NNM&CU}MWn;j+$%jYGXD9gxc!+u`t!-o6#`IWJT zx2de&R9Sg{@*Ntep6+>Rlx6VRbyEig&)@~)1(7s@@GhsYvb=RcPguw1>ih*07dR-MXa zz|Ps85~D7Q1s*WI%5CNm{Q~ljetEjx7a;Wrwc-~hTm9_h1Xs%sr(kgqk zv!(>CNz)?-2Fy#DYSihkJSq?4o?T>=W9&0t0~EALB~&kBFkTM@6)5=%# z{KbnGvt5U8#G(`~0rqDxgB2z~1I$gsr|LTo=jx`NKN!8|QMiY7gFrdFjtN+jL>(zM zGKx*Q_AV}YNT3g|rKA`7fj2+jDN;2Mzgb^jf0G?B8&UZ{qjL4F>w`Mxb%q8lZ zHtWpHx8%`L%cTV;J(1B#NlA|)Bbj-aYicyhr31ZOl-5Jqhwc;|&AaS^Omt3VWDgw4 zNKO6v6poANBzmBwOoOSYK8qBA+Pa=Cv(T`u%FVToSW~;&@^Uj;808||HnYraXgTM_ z^je59&)&4-At^Pixe0;Ub24@@-CDvXB{}(tf?IDt2Lcxn=W3Df(HJZN*1zpl@+;%~ z#C8-uMX6afwDwG-$w?M_4wL%HfxdI2v{5Tq`-Z_SopR|&8jlXWw~{gfd$u>N4Q_^) z^fu6Z<>I6qM=^zk=dj@R`n((#e0^>70ZK5UQkjp1XCgEc&)Y5!%=B{*`9Pc04RTo#Z%RGh zeyGC3``gmElF#I$pP-FOu&%Cn>-Z|7>oF}RLf=GN3@<|$5D&z8)E+bP%Kc$|=w2tw{g0!Fo9_(>O2w!;6dLOIImuie(vCr9j zSL!8Q?{>Paq0P%Bos&v`nPRs%LNQ@sYB%h39W5I>X}y}rSfCVqn%8@n;wF4NQ~*$3 z_+bG529WA~Aa5})v*%VGNY2h3Ri+%JrC;RX8V+&rw)N;Q5?!EfFDTs|Qx{SRXpa#E zR{SpbSih%V{4!{M1&L)v%R6=2D#45xcPs7i%mqPWPL+}y`9~OQ>RZyQ9`@c zJ)vwBi5Q_Lm^AW<8Twg)I%%1b=?3eblI@I3qA;JIuG;!WRb8i~$3Ax^NZn9HN3T1p z(n!6J7DHb1AE(Olj#^Cc%K|I4#gNoGH+0XZ=+av63LEJwSd)*VinBwDS}buoLhwt4 zEQCpHw;JY=!7t~y!fzM;`G*QC)vx3TUN=OL$JC*Cea6)aV-a15z5V!jpHa(6VC@~0 zcO;kpq;6PpT}KExn8@ECuxerans=jATH7SwAv9n(1H5_Fghb#Pxti=?8I_<}*af`F8XMGDgBOh(UZByOpX z4X4IrwUR~jA2V9H|LV4oGu^oK`5X)F}~^lLh53*g|HBv58%2l^GjneQA>Z-i%ZiU9RDaNFS%+yLjptS$^`N|@FA_G6{M%z>oW zAHYBpA5hqD_`#2!2Qv%MF9ENZSoi1q-u&nh!L%SW&+p7N4=Fep(Edv@kAVME0>$zk zIFYLXz~L}X83({;Hk>Dd2eSAFga7~l diff --git a/source/images/exit_button.png b/source/images/exit_button.png deleted file mode 100644 index 4fbce7ebcad497088f79bf811579becb410467ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5488 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 c950OXq5dNJKUkRX=Kufz diff --git a/source/images/exit_top.png b/source/images/exit_top.png deleted file mode 100644 index 759264fca3bede7306fe8470f15e33f707ef946c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3254 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 jRroh?Fox~`02+-B2$+uha diff --git a/source/images/exit_top_over.png b/source/images/exit_top_over.png deleted file mode 100644 index 1548916fa033504083059326c2e6176b2fc9993e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3485 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 diff --git a/source/images/favIcon.png b/source/images/favIcon.png deleted file mode 100644 index 1b1314b978d9b6437c45561a651ddce92a713388..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1553 zcmV+s2JZQZP)2(doCHdl+~~@}jpa`Zlcl?UI#V>hKLUctn*kPu5uKoocMMz> zxVie^lRu8n%>6o%NF+5HQQ$<7H^`h8hYjR4z;d~qO=U8xD{CKqHZeW36j~vU9a@1P z$QuUOiDH5%?gA{A%RX>(W$nYyauZWakrN{4P)Y%As0rh+L+$w!lB0P>re;v5%X_F0 zAhwPuws^gQDBZfZ`iJ~PX{jAMlyO)KM)!wb9JQ^NG#fQ+6k;+t{LILq+x-X)T1Oan z8T2!`(Ytet*B^$?(XkHY6arXLJr<9z?`XIvWN+&go`N6kzjL^WSpUMlYA)v*K+=Wxzad-)uRVw8Z` zc#!)$TZF9^I0qt}2H^;tV;B0e^74h^I7(@!0Zbm6Is%x#*LF|Ok z3Z1yS-9=8Y(r*>I#ZZ`@wEMS<_i3E!u{EF-M*YFbl3EMg|wZ?PK#j$fZ zQAq!Xb5=GoR$%_;_o)2$+0nu|CvxMHTwT6%xqeV9loGsVqgE3UtCTjwwn&YgA7}>w znM`J=@j-K+FlduZXNH$Vk1P*pxhQPuWF}|S#jhMTj@jFMfz}FfZb*O!?C)%oxq9sq z3~IE}ct9g;w|0{0Y>puShGD?&<_ok^LsxJZbZAtznO%5qXn;m3jOhZb)V4SOHd~xp zK=(K9v*VyvrLnh1DwXOs1HJH58D0FNG`@iHD zzx_S=;zZY2J&)OiYm86N(cW)xP^)%3LwOL$WU(b+cRa>^~a6X3{pQ{A@nVDXTMOVAqNEL%g2R=7 zU)1Zn_a5I|%}B!rhxkV52?q^JTym%MG0;k6?cU?1)tr39HYI3}-t!4)wQ^wxaBX7$*3{rsTS)whii{>49WD?dwUrJa$IzFRR+93=+b6l zNczgR<&FUZ42|0l%|s9Dr73MxG4As(lUNR!Bl(}NtKN~5Vpv?>&antK_$uDyct#%q z&RJmb%E(OVqnMePw*kZr`Og8zoT16du^i!$ODe%gf^w5)A_qVrs3A6sThzW&4VZ>GWD!>OM zJo6C=mYkdnizCAZK8G;Jj`zAm&3NAg)`Sge{6vq;%Q6}uMO$WvsgaCUNTD)OB3a-q z5}wkFE`jQzD15rgN0B>XSXCHzKt@I$GG&?jG($!^tZxp7VVh4#Mq;rHI%TsQ>kX<< zXfz5%gAW<_i=eEmx~668nOo*&|`AsDg!v@g1V=v$Rve~if-DC z&(XeF_EAI9mC|-Oh;-3mtUcse_a7Y=O@QpPAL5T-M{xA`JMdS%@x9{k#Sh{M#-F4y z9B~`~6V|u^0rVvj_>Hf+6z9&M(|hN^SfbG027(5D`NpjzQC=PuZV-vWUWGLkUC3qMrCmr^enloX-~asP*6g+VjJotm zAC+qK6VT>)1qdx++%3o=Gt^MSkLjysE_zS=%Ip5l{RiKTndPJ(^a20?002ovPDHLk FV1k*q+m`?U diff --git a/source/images/favorite.png b/source/images/favorite.png deleted file mode 100644 index b8eeefe7fad8e1ebc86c23a76b0198b771e4fd8a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4108 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 diff --git a/source/images/keyboard_key_over.png b/source/images/keyboard_key_over.png deleted file mode 100644 index 15e352dbc511079879b838dc05f14f7cd4c7dea1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 909 zcmV;819JR{P)eBoto|u0a7Vz`g>JvUv%8CP3B?-84A{a@Ae&9dUXH&99(B|7>IPu1-~SZ& zuD#!J@4a;&72&SqYCL8z`0dPlf80&e-W;&X+)sboj{ET4cTkm;+^#vS%qC_$KRqWO zzPJEB=%(o)se104-(QNm-+7hm5Rd@eWd_aWCBL`x3V-~?-a(r$fQJe2$tbr66S+t3 zjalxA7sj;koQEwA$c}scekTDwo_L3Ij!ey4Z*S9!IfVT@# z)F}o$8&247Z_{#mr(oV-G`nVWU7)JuCV(9#K-)xcqKH8511IBYvngn!7tV#VsR*|`yBNLVtA=GAx*^Cl%!>FY;>iB>b znqplH3&LiIM668<`7e488p~-~09H1$DLqJY9^9aby0)2Bk*L&S ziQj{&iZuXLNSq@{9ML<_3^T>6E&!c#CEx}O3n2u8Dz;?QSAyYGNZbYh3ItPpxv#lM zfPobGd{}i6Z%t-kQd*3J9AJkF}eoeaWW1VsuFe z1_DaC3c0JJB4{N~3q~)22 zQ*3nh6!?5T3RYXzkANRq`v-gNy*E%-UqhRBh5yS+>V+j{gkTg|#`OFJesuN=@UWYv zg9cy)c?f)kYaP3tU9`1@Yi+N0?RGsS*Illh=Ov3W(D{S_bc{MI@ zKb&OLuu71i%EtN{doNz}*1LQLJj{R(h7-Ftl11(=FL6;uA2BD{DzduNoVh~9v^~h0$Mr*XKb(}a$W0Zbk^@xm3gV=l zK>!h&7v+^8budv?#8)Lc31bpb(e@NeW;q1UAWrgzR5L36vy0_pXQM45Gp}@v7(bWF-D>)cI8FkiC_d3vfzR^ zi3=hSO)0Abdyg_;SEiF@vsCa?8=PdPS71`LcqL8%b~E6y6r)eT2(tx?E{T((Aki=b zF+)c-Nb$fTvFgph5 z60a)Gd}IxqxdCRxXiSTO@ymV6;o&d9!+xIcwgjmq*#f>GbRLAIWwf(E=-l!Vb>^1x zVoaPAl%rQgT{S-M=XrBU&W$BuXE0c!x(50#u;s((%rU=GT?75&)!S`n`~&OGCt2G7 Rb#DLw002ovPDHLkV1gVZ?9l)K diff --git a/source/images/keyboard_mediumkey_over.png b/source/images/keyboard_mediumkey_over.png deleted file mode 100644 index f2c821cbba6b3a9363a5a5ecc73fa6554f0f901a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 992 zcmV<610Vc}P)h07z#?r=w=E?d4Tu6EQSk@pL0VDJ zkOC|rZN)Zh6NI#ZDA{D=;E#+w_fX8(>&YgzQ~Msv&DhnW_nh~gGk1hbwbyPtV7L5k z0{2+%dIJ0l{MbsC{WBF1_GbuZrok6LMZ z_8P#wcKZ|HyZtVX)i>C_y-wm35nW>O8D<5^!?P}-d&=gj904D<(sXYEuvFep&${aF zzq`eITW_Nx#HzwPI`8xA(`Rh2<|n}Wtu)>D<;?r`ub#NIH`m#2tnsp+5&2D_vjU(~ zWvjW#!Sm;hW{od^haUK-GqihMS>^6por^p~Vlz~@QLphdtk5KTu-9&Hdf>xu?r_eL z1?Z3R$Z1CPhB@AQPP5Eytg!2WcSfS9Q(pA?yj8n}Y6Nv%{d3+!RT-K9w&Q`CiQq&D z27jM*Y1CIpBE?DtgU%qMGZ>;OSgt@`^Mw@)B7%rA%mat#gGlU}QWaDc35ClR07WX_ zShK3i$OEVdq7mRt0FF8N$>s8*Mt-wr;Z+JO;DHKJf%9e{Aj0HEqX1YAMpZ?K0B1&N z38-kbg=IVki8F8kfZKSX zrTk(Jyg`r_0h<8S(upN5Qs?EsphdR|QveH!6DN)}BL|9AjJDdsF~%&^!n_uwWgMg< zz_}(8s%HCYnIJ?HSxA6ZGOD;RWsHe4aIOMXaaYBd$tNms9zv#N_6lGbVu!Am^QBA?mfn`jqrSlcd7d*kJ;FN2e*&LF^@#5Wzz@moW~0`)gSzo! z&Z!K!B&xK+Ah2@qgTykrv1(;v- z3B!!M`!Xw4_hl+n1y~#f=KNy(#mL3F(c5}S#)`GIo|jaLOnO&lL{Dhi zR_Q)Ti>4cwKm#&X^x)Q=EuB8 zU(A10c>d-7^Uv3YXhyFM+<>J*^t;sUkA5_W837bKT>Q zt~8gv_G*jni_*2X-$%Y*!Ozg4V7lNk@1X@6Ds_6xJEqL}IN7+rsZ6e`UGJLo@B94> z41(qyp4KlSmWFM0v0B@4hKH$0U97+Tc-XB<0e*%9nOz-aO23aXvo3kxqp2`iYDV_6 zg~{4^A`A%T1#IojX=E+zEA9cV1s7Vq?svu;pjrifuVVB`>X}LZDsQL*A72k?U}#fj(PapRcVS{9skr^jz?O(za-7baB(qP zM)1P9?T;pUv>*Q5Wc+Gw%)3@;KTmO)DP3VJLl0-}ZhOuAOO>JF|Mdrz>!0sWd(3rw z`d-`UsMtW8N#}N$=e%S;_gTESSS&tn)76wioA%}3EN5u&C_Mk~>DH|W57-pQSt{Ri vJsoTE%*TR%t|o(n%H8YB*PfG!lwB_`Beuu2;g#M~1|aZs^>bP0l+XkKrN3CB diff --git a/source/images/little_star.png b/source/images/little_star.png deleted file mode 100644 index de0da22c20de5913f6c33190586217dfebcd7af0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11046 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 diff --git a/source/images/menu_button.png b/source/images/menu_button.png deleted file mode 100644 index a455091f57499928bf20878f640829718fe30333..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5439 zcmV-F6~O9=P)*uXXm(Im0oha#n$;~D)Tj|RG*P2Y9AyYmNJ=F{5Cvl-qAY?eP1Ec< zG&?lz`-;0YHB&Q_R3?dkBsEi&%4qJK&-Hhj)4$yN-s|SR?gzYEb&BS_d+)oy^Zk9# z_FL{Lr{s_Pkw5ZB{>UHsBY)(N{E$0 zSLuyJ+KHSia=FN@B9lcP5}6~iTx5&LMv-Sl9u;{|WTME;BA1E`5NR#aAg|Ht15i)o zTTY4No#Ho({7xkBWz6Ek!B{7wMWW6T`B#xLk*Olz6X`8dnAdh{AexAD7r9nso>O9_ z(nmR^U%m8TaQljV!F{E>Lz%UDXYlx%9idDwE3f?gmgW0{E1o+PUJFoTs)F^NW70U0 z&ag0#z)>IyMf!={EmDEPMu?!qOGTkSF4-H*7NxJ+uqD{EX;UbhH*ZcWdM>hj{np?S zxd%XAyrd!o)_}8BWP-?t3X^Srsy|o zw^xE-0YK3^ckT?z%gcjZyLN@Ld-v{G(Q^>4;aUrj1!s(Mii(O#(a#PZJQ$wC zxm>e%@80lw1&VtrlPoxsgq8TIkw;D0LXoiq7$<7ziu1fzaaCi^y#XS)PN13C*Y>;QUTTEH8^JDU?UyA(5n=IjT@lg}DPvkoy zO^;VFzU?yQ|HU?sUv?nudCCeJuRzdq0Rpo_&-OuxQharV`*1(*4=|WD9~hnoAERar zP)a4-Cj53L>_0@VrbKf*g7HI^(*6#8&KpyTR3KXjSap-k}(B?o=0P8IK2}GjVXx( zLKRva5YhqU1HJTn=q{z~9k} zZgFPHfpK^&Lv@ZJknaF9mn1N5!GRSHd zO{D@OjulA*ktt(%CUx?d)O4T_eT_Prr!Yp-BA1GUIJmFz8%x%2tptMx&=?x2V5Blp z*#sgLFgyp(217K<_nD&R3rA1%rRA2fN1glyIWb!4Dz>{vy9}HMC5Gq0iB@P74m?w4 zWE+SmV0acP0RW<<7Z@D{3XCTt);wi`_)3>NE@Naf7ow_rpe;p0^&6V>(Gbi4QA`{d zwaJP&KzJq?tbo{hn3^wj^qQxr>B2mlZ2r1B9aE7XFBbW4X#3RK?NxFO!ds#idLHah z2cAn{C?J?ovUdxJ4+?n`plF_gIku+DmGAdpG3t^XkI^%3av`oYRmAif-m2foH82pK z1qLf178E*^fQ%enO8J?{W_43ypbDD6UbJnyOp_Ljl3J z=~#-24~lQPv>>Tbmpb?hTo^oTVa51bjkx5;dWyUPJLY-5gWf|U(wVAU0E6e!>aPXF z2gRDMR4l=l5N!@yaB$_&d3%d$3yk`1GC=Sh7g^CmlpWYw*kPlpTmwS^fxY-S9}EkM zZ@PSzSYNVHbm9ESS3{oMabay{HK)A6Neo6Z_ zu*X~*1sXP+UI_Ro$G<24N6~sO1h#Umj%Dz?>(;Fc70W#^JBt=A3g*wBA1qj~AOs~H zAbzwJXf?ZbskqJBa4iI&UC;y^U zdyRh%LgRhlI1dHud3p}Q-}GL$f9SY5W)KCUJd|jatj-zXoJ;|+jy)>UVhWTCeIFO~oh8yWQRgli`6G+@+{YqGI-|dryU?YMcRurNeYnG=>S1t z)rqpA9Jdbta;-*4)|8F${;V2_VlzWR(dZYuB#LCLq0CwAD0``j)HmmH@~j z5rF7~hMEFmeSn6nR?+;1&Yx1BqM!NxLua_aSd>^>fTS^5$QdHZlv3Pk*{5;p(;}QY zVI~i&iD7liCIG2yP(Nb*2MSOp4TG%mZCH$A0McgT*#;!aso$Yaefo+y1`sAdFw3z) z5`dg4GJ_wP91->ch>nHS1Q5=nVG00^<(~R~0tWRfe5arDn+g!mLvK|uREgODBwg6c zr0g*4eQ4=)0|<`2O=1;b`GHCN2!k+wV#q_GC=GpU0tmg%njSSxIDE~_wM3%l>Cyo* zLvhvEU%vD;c!rht&V z*<8cVx}%anEmsgBpC?+Pt0&Oh+mZWHdi#sEU3 z)hS6p28sMTKUU&~Z?*i+L-BAt=&_hB^$!XNOwa_-o`-_?eH5xmAEq-MApBjEJS5Zd zJEr^zH;g-EZh1x9(cc?w06EKrzJ*C9hil`qbsmmhqv3B&MhsyI4TUM(QGs%s`yKf+aA0j z0+7y01JXz2h;9O4rva(iN`fU82=0N2s?NlOBms$HN1VCBl%ty=Pwv=LG~)7+9vI0w zbu;Vz33|c3-b6VyTTmINM`LWnl_@9|2v`QN)TinKjJPR4aU+G-YeG0}>C8qgTc7O# zqG4~7Bmt?XX6phI{%W+PWfXdlZVG^dPZx37b$_}lwyuDPn*|>=;o44aVB*Kfa4fyz z&pmE?;Q9!2MPk@C@$q%0+p~;~(2lK@;#dN;X$Yn!%5+%}?3!`TuPY#`%ML%fVv6m# zb2gQoHfYrO5r9xSX`T4wIX7XBo#4WK4O6j%9z}!5!s+>Ty9?b-0TAkv4VljAO~nqI zo%i{dU;WdmjSKol077xGRU*a32vFFr=p9({q_-r&vVPz*r?NjlqG(|h3TR}x&c`xv45_Ck!ndB z`=IEW^}dtm-rKN6%YG4HXoOXmwF%hr0R7p(5|-GKyq}k->7rrK-!81o6;Lu+UuaiO z*~p4{&iIb=e!acC-G$@F#IPgTN^cAxO+|j7Tf43`J2*s{u3QBr6&Q8}Zj`BdPI57~ z0{3ftM?|RW4^Cxw$5VNb4kD!^OgY7FP^M!g)}LSoasd=;HsiqXHxAIfwA7L7O!vVv z%YM_c|L`F(U?e{cD9r@AOGN&xrc3Aj+NjG1MVW#Ed{Alwn3{m0duZvHhwlA*{?mJp zoN>dXt5Sf`%gs2cojn`f-imk7Q<&Mv#w^yKM1f+>mjxx;z(fJzJMbtltlyw*^VeFfZRx{lOqE7g&9c6{En;;pd$=FOpIp1_K;>4j78La<8hvR<9LJVp0mr}22g0(# zf{|(iGxj#oT^k0^TC*@k&XL{hyc!z{d{^YRgn>7@O$E|{633QIz)2_m^*$r4iPF&4 z`V4>LGT2`nuCgt!=sNzM%NrCn@0W%h*;$HEok`il7FK+J_@cvKk}TcmF~#4xT1}V_ zOeWxDDtdh?Ae0rlWvp(ntUd!~jC0$?p8w4L&wKrN=B*Km&vpKaTebh(zKtye%ta%2}lokz#%-wkiW@G>crs_;rNX(sAUksX2+Wg!(o33OL zJq;S=ZNP8YLeI3osE<)_EI=v>lrQ={=PMHw1T{@Q5K&u=lV|Au?>KOLMh0dI>EXsb z3Tid7%H-&E*Tc>FOnTy+a~@qcTNjM7x(J)>?*Xsx1yNI`K1RXu0ZJvDrvNAu^i>wR zgS7?1vSR7_tzic4)(QTdRZvXli76UJnW|3Ck>}(aj zCq}%kLK&m)4N-9P-65)26@71reSe6RsCS9@?-9{A@USN@E1&e`E@a>&eQELx-&9c| zX_-@|Dh8B-qT+Gg&${Qao5YN*(;1M&^h^whdb5tQ#s^42N+o)p|1uZdKAhjMuR@yW zwpMbxR)0lpigHMr3_Qwjw00HUdZ*<0L8Q^NLDLo;+6=#JXutdCO&a>tt{3&4A{V+k z*g9v*lr^bdd*r|V$p2gcP$u{wF#9qbc6D!o8~#lReK%FxYOq4V=;qd=7aR{@=y9qG z1KSt2>)Kb$*d=HGeBsX}$$CK>h*c{9IpAbfD04Gxh#83{Akw;OxSm<*kE6f=%n zFnmzjx!%>A5=5I}mlpTDbNYmV(^t$E)*KdazS6<3vE~JlOsrt9N0_89l2l<{6yH(e z80oI5^4`Kl6@L*n>>TjmlIh)kFm-&Z0V9USOi0MoXA~XpU|3KJU4zba;bPd>Ca1US zkLi$*`Ii07&9rJ3{SQ)n9;P0tBNggr(?5WR8VR~nq;_r^A0UP|# zwySgC1t$U+*3ma{V+CE@xO0`p*K5$QPqQw)2DQKBh70J?;&AUmu>#aDgh`J|G&Fbc z%+=2zEU=W%9+B@JV&#%Vba!;SdCK=OM;Rt`nXsaV%QIRYFVR$u@|07)S)JP6+2mdc zC@*R0<(S;oC4CJ~L@=UE*y*lh-NW_Bx&}g{sE)2SbwZh_Oxe=h`Iatq2#f;J+4+iQ zCj%=|`Ig3RmPV0NO7~hYWxbsr>*oAKYu7m%olLCA1eoT|lyz{?O?Rib-U)-y)%mg0 z93%2TqyVO&v)?ToIPD#C&Tz`?;S}2|2B_ZdyPgivZtmJnE+0D00Z-J|;AAyT#{v$D zYwDsil-b59wu5uPot+Qr;{NXFKy2&IZRNl%bS!L`XG1bUKz-Mv8#%=`aZD=oq`-aG p*qz(JU7Ke@{>UHsBY)KF_t|fNYRJ2=E*D-B0{YyjkK6;Wq>bguwz? zfLLT~$pXt7G3{=QvQQrM##xK8!IBR;|o9)f^W~<-) z>wbV=`jc<_>Nx!+j=!pV{GC7ka`gtt>c;oQ@y#o)bEw3AUYUL7IzjTU8Gt}M4@B`D zkM(yw2Z&Pa_2W`~?pgryuh<2-0EA*Mi+nFo-*o|zhA+fk7WtkN&}GB%uSgAA0c`Y0 z>|I5}(JGPZ&=B&PQiy#~qo7Lz<6jX7HmWvwgG$rx^ zmj=ea0uZ4Bz=lU@snS%Xp`Zjc3Mmx~HoPo}DyagMJCt+bVEhY)q1}>(0He3XzN7YS z1*joPsN9yP+*KirnSk$9aUF~B-7uU#$v1*(FtUOMjqHbKSt@RG7x(SM=M6g7o*JA0mXj}Fak%=mN7ztU_)=&vaJfg1}MAsd(LBQ z_^-~r7fh=Sqw-b4l~uK;R#^kTu!cXTa$@(goY*oDASIa8p%y5myfPpT7?E;MQV}<- z!Ef4fOB8;-Z$EeHxM1-8DEHoOWZqpW2T{J%@% z*BH!S4>rB@RYCw)^dZ6#m7m)3Oep3^1bzu6lWFlPQ2Z5PxZG4n!C+OqB_Q0P@{WCO z%=l??O~11-JOu)VX8_G+^ArpTLAxyJhP1oN^L$odeC!zpgW>lW%-;+*yzi4Mt6r%E zAU>kxZhDS-$^b{QYzI-1S%ID~U`LmNPFRsiV9f%5PT?>Kk zgOMF!rRupnpF)JI3LP{hS%+O&2zjCATnsX(p>Gn>WT)+ z$pXhF4gO5RKmb40icKZ+Nj?pGHa=#Kjxbk$$|<$H{nf8~kN)Bt=XP1HKrVr72_Uxx zkPqzVyx*h@>hlByC(7{wFtjQ-o~-JgY7bm|506OlNs<_4XyAD5%XIvkl#>7b z$Ykg(du~-t2UuN)SGA1m3fFX1J(1e(h?v33c*x5515yR*7C1=;(d+eQs*qQzOAYJ7 zr~{<`gB7FU$=C&ux1-G4q4fNJ(iUIH8zP%>fpGRdE>cOfggRtq#p>t^b?DgffMW)( ztPfg=IbjagfB`5B!j(0>P6*2=hYQzPToq8n8=T94Dv{rwDrLi-tE=;CUSEnoPbJ|B z>X1z$H>@w!apOIk?s~sOF6vjQ#*GsL2nj={vX=>?t{H{{KD#xoP6l>BN+~F&Jf6ms zjU62(3{?xRRLG71f*QDwdd447YRh#Dz(BmXjxbJ*j1cZh zwx4m}m-QvQk8^BKy8wK9?)%mjJJvQgL?2E|bUT~+i?#7`Kx)*XV+R9y%hox} z*EE%*2F{f}2}9@n*9`^((ODQDw^j=t@7XQ_yRjX1t!=ift+)%iX>A$IvwN^aYp!-z zo2n%jX|9ik!r$H)o@x#O5UAw3!jSGt2lP6n$ciQ2!#Ou!xvsYbknI|`HG|@ETfvg4 z?!2aTlLK-?A;W+&bfxb)!qC}OT}PM%!YVtdC#Erb`*3SqYu*14@<$+jy!wrY!e{=Ps5A+H*^D%n_fU0qdO zFkeO?GRX5DuNhmsvLmOxy*Ub52t>yZ-Dl1~Q28-KbwUw4IP;LP<2r5(15NA80y$+M z(I_gRz!v+j#*FPavMg7xqqj&Qfg{6`!+W@xesMiGf!)>5f;#lDpmkIt-50jczN#p8 z>BnXKkb}it-N2`TINGnILi9*P^CRfzkOw52)c?P#qpo>{&-;_FfcQooRn-&j$~kgh z2KK-aKm0jBxGv&#DWeEg?;HEli^{InHJ~0MB-NqIDoysz<`ruj`^TH~n_LHR0XZ{q zHL7u0dZ>?_N??H8wZ2mN({-{c9awemoir-CS-J9A_Zj@2_Vp(xC*JY#v3Y-UbJL{d z4B+|m=ibw&PtE7<+_~f3ym@osvAZg|eE#@!iENm3wq_xo7x6v} z%-g}ifyw$_zI-`zQ~19J4<4BB0`Q|pkIZ{`{^ZFM17sbyB|XD!2IBiI`qOR|MlFo( zQ0kZ;Lp=9T>UsmWw=X5iasG&06!1son8o>BsD_?(On zP!j(ZTvQy#27+!XInN*pSCGGNM`F^G(Acaj+N6?}S3f_}UzBClO-GvzP&!ZwkuGA{ zlf-AxdBqhgYyjdiw64&N$Kx~LU~uka;)YF>-QC@pdZ8M2i}=j_`}b!9FYevDw^G-y z3yQRjIWDhiRRp9eOPyUU?XtAn3RN2Hg}%F)dY!9{Yxf*WSRrzlD6VQ9aPc|B1KxOm z+brkoc4v<<_6z?31*tOqo%14b_n+yzC~8$D;}Pw_rqmE+GL3yB-OWKZmQH--DXq@~{V7x#9PrEEN3r zIxt+eXvmA6U{pokq+ui7_4b8@dL8YPb8Foby9Ndm{H&C1& zIK7S=I#)~bY3oq!T0%UhLQQI<%UZJ$MJ>t z(x^zK*{!|KtA3@9ubGXi>0oPIuw~(UD040|4-Ef|{XG58(0 zBX(DKA89GOH;yk{cabg*YGX)O0fW!~l_o1=H)EeXBllI-Ev9w`h-)P_J=8weK%}dZ z?L(_>vSW+gku)^BD!h-;EUXe_PplNUCa8!NcAmz=Rom6HEs9rf6qI4%jk3yfAH{R8 zY&TaS8U({gr5s%oEm!IE(VI+F2ZO;Ze&DKS2->|NL*k4JpO3>snIR&A8x}boRqBfwM4~MQOK%JwAI`AnKs} zB#&fpC%IN+zbYdjbfuK82|cwgORFOn%HTDojKx1po6c#+a`NP=aYP!vuHwi6p6eM< z2bxv@q^=eCBEjej68ry6n=^MsFJ=TGBYD7&lKU#)!p_XDnx_!04!QCgFK^^MQwq^D zTGvqsU~ur3pj@w^IRuJ83_$^yWm;ViXSSKbNa=N?dpRj2H(<^#idNf} zB^4soAs79^Fuje(_D^N-lv9yigXES`3EGyp{(-Cu&Fs<*@rm=8VSq5>Z1?ugG|5Xv zac0JQ*L%9ze-Q}nve+{`o?Wcv!~iJ^DrQfBJTyh;buKHaNqO}GV2MzN88FO_WHf|-g_%m4t2~pvqFTm zjrmNG#}qbF`bJ`)6co{`Le8qHcUgAIZrzG(41-r*Ge3ZJLi7R2KI`+;OJv~_=K#+0 z%IjF&#KSjL2n8sywB5k|l^Eo>&8A*@_{jWvN3UyeyvSMEK9iw05mm z+F_OO5*99l>XXCg7y@@pT{Q@u4r@0hE5mFHa#!Oj&qoAc=#{k3GjdsZ4A?}VnAR08)==pS_DM8EuCdCkQerKvl1IO_MKYdNElu3uk%*dlFhDGj&k`+ zd+x}jNFDtWK=SOwBezv%$r$P=(-dH@kGNKG7Jw>448(VYZM=cOXyOwra97kSSg&+mS>YY_g z^8F?bRMbQCGJ4k$$|4x@T=4!kr|U6JLr0Q4E#k>BDdCvh))YvZ4D-owY}65iLqBZ9 zjg75^i(<}eZ+2x{0Mf8PVJKpuKkxFH*L#-06lGH;0`V;A+v)TO|3ih}F5L?|0rc@1k7Vx2a|cJ?x|kWd2eFXv$wzcb(dB2_+Nc*LHs%TQzNWVh;^lIhv~u!VBJ9N*9B&t zdvet?7zW<^4^jpeSf0l4A}`X(lOl+)*) zeFX9of^mG~O-Jw&vYtK87VwAvz2n;N(Qa$Kd9+U96L zOkbc9Sd6C101SG65Jb(x-a8MEHsAlugyKixUGxoI1e9fNdBn>&ox0@_WhuAG8V6Xt zJBY&DUJ$nUcd_0S)(ZKROS3xoRR)^P`=o+?X-8OFy zl;v(LS(V###X&8*RM*<`tBPO*TU8Kl(iPVuFkAGzS?8D5zOm$VL}6;iO<~Mbo|y(f z0x?4W1=TAENIalpJEnMdM0>cdKH8?pO~q8{gDRk=p-;*nH`OO)jL)l#*9JrddVTBF zrid*v=ub;kZqe1ZMJKmI#@HoGky{G@f`9}Y9?tie>9oa4nh=8)p&51iA@b}1A0JBLc<4rQmEi#%}tFZF?4XnID zX>yl9(07BDANUP|)bOzyf=^lVR6X=x45>1iO=W_Jm%<-;Wsy~7MU~S$D~pmx50X){ z7^4bF9b+>xq{xT#S#neP5X~Nx;*RslC@CgGa!-SVTvTd4TNZ;xZ>vw))Ufx?$1{Sl zQpNAmfG8++x9@H$S2nwIG=b@n5lAfwm28Xh&Ksl#0O^p4NgepCPY{e7i>y)rCOCEb zyt111;gI#c=~S}3GIKL>tU3c2NeLhs0V#8;ReKmeH6lP5*fyddPAP1hz%3Dsl(H<8 zm|%>8sL_u$wujq4_lpyb7v6QfefI*j)ZJH|-I-Aj8Kz5DXO~>W7S)V5$w-@Y(G#$M zK2u?mA$<>St7?)d=(nl}ZIj-qyQNj0t?6N=Qc+sET8LUp}2QQxTXv%>aY~cuD~~ zEl^^Dk&H7^X-5Aan|M=Iqp;Z?MZL}O#{Ewu6ugUzP{pMHSptl#zvy+j3@C!qrmM6~ zxqr8eCmn)AYN?uJW3$vzg(XEOu)K=jrBCK6F*Urx{5~`7mE0ASf|6%B#R@Wbl93{E zGJFm-7zhOc%gtbD10rhoCSj*LxhxQu24n%4z@eN_gCZzRGGdclS&Li=0UEc+r?<#} z1`1g}puilO39i%Hcx7Rf1P^K{==)SsfXV55nHlm)U}z6OX1stOHOAzclIGS<(%QM5 zT_%W22jT$Zsb0oFsYkEZ6_7zAf)UZx9p&RbLCQjMIRuPeOX7&$50O}5j=q@}ju~X+ zx)9hgKb%}uLEkNG2U|kvG}cH*u+PIzFKyl0&%1ZuD{PGLE)&F+0hyzkIzWMXKCAPP za)M$!2=mD>AoT>~(t;AxFCdOA^(Z!=5v!V}zta^J=(UovvYfKFyuEvnckVnWY^Bb- zY&BdvAWH!97nHhAGFNArYkiR`2XL){EaBq3IgedX&OE+O#(%TD+1_lcZvO`ZE4l5b StG$x|0000)_YJYh$HhW$79 z9_Hjy{Ik^Q0?Q{hk-R?^dKJwcCVQBs${+95j#CifP*e@#a(N>$|9ts&=fW}%r-Drf z#a&F4*XrCZzJF%>>r&H#<4)@)UwQY{ydjLG+~`HwrrVEPIk#5-H9v4$I_Fxu9D1z#!u?a}%XsCjw86Ak0gqR>qYlNll#oEQbS&9jXxh%-I1+hmgJ{iO`fGB(VlRnsr*(Zn2i2Fq2y@<(p~$c-^sjLN<2B|djA>k|Tvx1T zuqQ4$rNW_jrQ9LEQ(RYsVfp?A>DQG+IJi_7?Ap^9`Z?*{g`G?rD_3nl-YxcP{-GA1 z6GWg4RmD&F72#YbXO_;5S$87V^u3!?w`c#+E$zDl&YUg3aK3oD>7J~6M?KaRUzu0c zmay?v+mgJje|8K1^>Fi=o$a<? zxwZG7_k+Lje=PS(msrQoe&ou1c6J5d8>Vc*R`&zT9k&->F?oOPxPQiziH}Zqtxg3d OEe20lKbLh*2~7ZRb0s(c diff --git a/source/images/mp3_stop.png b/source/images/mp3_stop.png deleted file mode 100644 index 2762881a7938aac464c6642c7f25b09e6c951fb5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1352 zcmV-O1-JT%P)8W2=b+vZ;5C1WfCv{j_UTFZA zfO9|s%stJ0f0JziePA80k{tQ&}p|0o(X7adF3MTF+dcC zoIf|m*|{l_IONRC1hIk0D3L&DAe5sP7%)H}iU8uCpnxhAfK|vX6e?s&*=+fmTK68< z+C8L~72MzMvbMfOmgU~XPdn|_&rb!kw7hZ&_(()pSeR#V@hnjkU{C^q*k}nP5C;%D zkjOwNT0#jJDf?H=!xYZ>LWR^pqzY+q1Xx%o^r+>za_8XrS_|-5r`=k8ERcr@ z!jQ$w7l~h*M%99II+ijrO#_VpVgn6Rfixvh=pq!z@dyo^8$?Cu+Y+d6p=X86!Kn(U zlnyE=f+`$z54d^b7xFY82_+SnS>SUKVg8NR&?F%PM3vB#5r_>mjnXiX7$pv%>3}>~ z zuPhEn=n6nMKTk?ofvj7^9_D$OQm(gdq3jlLXiNWc3#S*(9?LEOv$VV-zgZ2C9K-pc<$Ks)1^t8mI=Ufoh-{=ox^7%7KxLx8rhx zj|TUj9au!ho@3yn45BgkmrgxU7eLeOSVtMdAjt^0w4eHqT>#T*xAuTpf{_=Kp4gCthgB^mwDfW0p$x8%6;|{L{y4yRbD!^BrcFR_QRspij z4I;Ir{y-pLJfby#0TLr5MuH{A1k@{r$*&$mQS%0QV{%+-6N?ZVVLBA%LddtaxxM%ff7ha_HNO;k!yzjey z0+?RP?(H@9c6Pn1pLE)--=9?4J=7%d7H}0HnVMu~cA91*WO}km90+mXQo(6_yw=A< zgl=@70&e#vuRwW;j2A4WDrAM%{lNbIA$eAC@Sw~7Ue~+#C9v9Qx3->UuNnrsOsN5Q zdkiY~*AC>yvuwU6fxQg8LV03-3KxKX*sR+u`@njq-CE=SXnz96fKl8)OpT%d0000< KMNUMnLSTX@>2-Sm diff --git a/source/images/nocover.png b/source/images/nocover.png deleted file mode 100644 index 4be4143ab4829bf8523f361682e2129fa1d13588..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33092 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 diff --git a/source/images/nodisc.png b/source/images/nodisc.png deleted file mode 100644 index d5131789ff3bc98466374028f6f55079c4162468..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24745 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 IM6N<$g3920wEzGB diff --git a/source/images/not_favorite.png b/source/images/not_favorite.png deleted file mode 100644 index c9bd9df0115a91c71569f915a9b68ef98aa08d0e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2625 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 diff --git a/source/images/player4_point.png b/source/images/player4_point.png deleted file mode 100644 index dd8f1ad323a8b64575729e87136c4d3333cafce4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2079 zcmV+)2;ldLP)TIolT)N7V`U6L7Ojk=Vt63Mcoc`g&K&9le zOr|M@ACRI+XaiHhpg>X60u@k#i*Ud1x%WOj&wD;Noclo|us_c8+kQLe{dykn@Asbf zJ@=l277K&HU@#aA27|$1Fc=I5gTY`h7z_r3!C){L35K33?N5AfIBX1|Cz8P7-<6tXa^|&;TkVNdl|YsyAU1%Qf(LkHn3Oi-Yp=a)^XQ zix#N{)FFqnWCM#GB<|$NlfmtFM>Js5rcJ5=cH}cG*}&o}5_jgznc($$BO0)6+cwpJ zF6478*}x)~#GNr?26#N4hz4xkx>YscKJr3Cykrl>S*&hR_O!d@mL`6k~ z5L^F*jj(_Jeu$5cSM%;LngNq0Y6gUYfnL-EH`K>!>t&RoJ~K1Zv<9@$2Upi@Nf9K^ zwi_l*o(N8tLta`!Qd9A2cwe?2K5<)!@QHo%&WLU?di{)xie5cGPGzMC=W@mzyF zdshep%F90&bz*FcG5U5%x+(Hfev=!JhBMv`ULpK7yb7*rNA+A!weH3rMMC`TSueuv zTcvQn>k?iCwP9mKS*`P4(~chR4Uw1foBF4S#J85>OmxY!(|Z}*NbkSk@e^x>0S6Bx zL3?`zeuG{D2Md$I<@!DLSWmqm<)gfBC%&p0&|)?Ns_BD2^60~G_RJx%?h6Avzu~bq zCfnN2!miwxg#q=y=fU09Q{tR9Ur_vHX(TSmkZ!ZeLmFuxv<)9yOpUw|Ka%ike#y-aA#JK4%_My`ArXchjWiA%xiDFEDUgaE}(#A;Bftf$LO?o zl)yK8mcfz3$>4C78QRN490*+zadqPFvGBX2y)eQe|9=oL>amf~*i;Gu|3z>*PeQlz z6yD?aliepp9EwMA74fT-d<+A`n-X#H4?$i1Aqa->3UHo)E=MUi4D3=Esa{{E@f3&R zQC!7J87$0mD z@pNxWFK4MEV?45*L>e>ZaY#*F1|NR-4y328keQw+Q!VT2(mv?jzGjVFN8>3D#Z$y@ zSMo5TAjJ~>Rq}yg3QOEKmLbcKca)!r@B9a<=tiTOu_U8Iq;{xn^EkM*%qUzJu$rU33kPBa;YGVjtkjWGn7l0~@(8-%i?Z8`9 zMg~F{lZhy#oi3RfAtT1r3AY82=980lA$+{J7-geMNdc0s_`A;*nNHdN_6EE=m65B< rTv2VPDd#%4w`Fu=!Q79J+Is*$ktIq)zB`BV00000NkvXXu0mjfx7}gL diff --git a/source/images/progressbar_empty.png b/source/images/progressbar_empty.png deleted file mode 100644 index e72f0c43c485cecb86b7e48f5e7ca93f4c19826e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 224 zcmV<603ZK}P)fPhju3J4WPg*_8hP!^#m5XQYk%AkRQ zIw6O;jG?=vql;Xfm+*+L@O2=RiRm%Jn036*B1naf97voT11?)`9L7Z2vZBbk=)_x) zPPA`TCbk7}aD4-voT`BToo_f6Qebtu6r*;X*%1jA+;C<022R`WXKkXKsl000EdNklcG?{Yr%pRiV0iz7W?dTPLtEq&khk0@uns$0wN;*?*U2EBe%1& z>uR-{E0@b|b#>LPtgK|}&+*?85%KG*xvY7uxvlxFIezPawA&qb6ZK*BdflzBuZJ&G zGUv_j%?IX)cg(z>006+9z|ZCfeqPV}`JK&k&2`Q9oAe+#Ir;3a>)u|&ZES2P8q4M% z-EMcxIae?rnm?E?%wNox=44VS`Gud?n%f1nUf>sphRIx2OCZ zpYS`B8O?dkd(HiRZRi`2W;4yMmDvw1n&UnmPorJNod0qJ0}=7t3Ce<>-(h$1)JJ4o z^Imgb^Z&|#wA*dh%SNLS&N`ODH8lH>C%#?;0}*j>f}*+pBswoy()?EkdNm@s>avyJ zdBpK}Z2m?(5D^D5BAV}y1RLB+(1?fw={rB?HSh05XChe_E(Jtelh`y(U8Pb{ zJYGe+kAgp`*FnoXi;Rdkkk0!#uX$gHb|J6S1@$5Bh3!C2TO~nE(JFCm^rYiO`I*fOI<|c0`lnJOISGpSzB9EKz?MI001B-AXDnZSwPaX<$~2}_WJe@EE50#t+zZ=*9J^RO9OB=J^@b$_008wsT~Ht5 zUR(-@+}YU;XCdP(9RR>k$75VQP!}$?B5AjeU7nkpn+iygVOp0gS<{8&E}EI zbASIJT*_Kv2>}3xG9F9nfO?SEiJm(U*=QUR5deT8j)ywXs}WZQBt*pD+FRsI1OQ;* z!!fRTuepC!JbXYpuAj|jnw^RGgLUrC0st7yc)Zb^*Sy!<@7IPz|LD5v9^gu4J$p_> z50#h&mK*@!n~p}o&+}!?cg^|hHsM-3kXSuDQm@zD#zr;lNJ{3P=CnD>j%%K4u4}&Eqz6f>)p55~C-bURt@e-YOe(HiE{Fe=3K0?Sn2LqwwC1(u ww&u6y_-z~Tp8|r2h{J1gc$hjwM8uo=1yS5T9n6Mf$p8QV07*qoM6N<$f@jKha{vGU diff --git a/source/images/scrollbar.png b/source/images/scrollbar.png deleted file mode 100644 index 032074db3c834395008be6a26bc75613c675d713..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 441 zcmeAS@N?(olHy`uVBq!ia0vp^A`A?S0vv2W)`t9$^*~O8r;B4q#jUq@Y_ksqh#V{Y z{w{Za>dWb#Apwgoy8aQevSh94ym-}tX`gn9-PbveQC zPi1X2`teKcX6e@R^-T6|&p+Et|5%apV)@j6Vm9;7i^;~XzrO9#>vG=rZ2Hr??=D`y z{{EKhuWj$~zS^n5CCS$=#B%WT-34y*FYX5_6c!ISUgB*k)oU&uu)cKut7qkmrl+3< z?Yg^8enq{M05!pf{|?tz*?u>2_`b{Ox|8eoQ|{M;ytd!+*`9P>KD>X|^u<-zx9?+? Ylt0UV^HqosFiIFaUHx3vIVCg!0P3W%^#A|> diff --git a/source/images/scrollbar_arrowdown.png b/source/images/scrollbar_arrowdown.png deleted file mode 100644 index ebd748c66eaaa0d953feb52042bdc41b73250e5f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1091 zcmV-J1ibr+P)CF&?XRL;~_MwwR;$yh{>C!tZ??x3uW0)c;b4dlb!kH5xo);mUV;i^owrM-I z!jO_ ziDaPdqU{PmMkE1hiZRDyl|s2-G+XO{{oy1g`J_P{{B5V%x}ldVCC~Gi;i_l!S#Ca?o{K0%)^MpB zj#dUSKnqbK4dOujNC;5ouZ9x{m+VM`7`R(o)pA{bd=0SQjQWJ3qwWak`*ZnKyKS*o zqnT8O$&&1VhyhIiN`w!cC&MKd+ii@SSOx=nf?Tvf-oh0$ERPk7we9^{{pvWdV*&fn z53>1H$F|wa*)y~Aa8?%14qU~}#>o&^WLCIn@u5u5@55cw;qG>^R&MC^uK@eqxX*Ap z?g1hmaGLi`YjN?V^jut#sft-dL_|D-SV(>(Tt61flcheM28DuN+S41?CV`y@IEY6k zzh;>|>)iRp^n6S}!{KLvgC~Xy>jCThdB0ZP-QB-3DeT0+KJ->Pzvi?%{oGP6lNC2& z04y?1e1|>sEI9k?UA?qZJrJgZ`q z0_bAwgNv*!pwFh}G%8cT+PClQJ}guYuZ;2r`(J^BctqY`vlS}8!SP1CS2=uqr?mg& zX~LfLc{yp_`uW~o3+>y`CSZRG|3?ZdtgylgE3B}>3hM=~e*xzqIM?Z=HV*&*002ov JPDHLkV1m3X8|nZ6 diff --git a/source/images/scrollbar_arrowup.png b/source/images/scrollbar_arrowup.png deleted file mode 100644 index 6cef2fa02aea06292b55a8056dfc669da94e86d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1025 zcmV+c1pfPpP)3VnJRaZ1_9S&;r?Cf8huDPDN=OAIK|&ykgxG+Sg18hH2?>4qpT7LxQhu8eMd{pHV(6)<4m-l`VcZ(cGR$pljukkn@4R3(HH9l2pd6qq zQV;>VkVhF?Ud|QzmRrm0?Axb>=5xTlzgk(kdhvO)k&>`1AV}|hU>X7Y5wI<zfg00Z{j(pu@`=5tRqR6&K1umGF@PoT+Eh8=$l?ZDO9qHYWwZ@sYF zn%N%wG*g$cR{G@JR&`TTs89hZl?G)BrD-5d;(G!q77!=V5DX}wp&%e0p-e603YO!W z#$L;vCDVLX8=R@Ew9hwdn@dS93WAb6Qkw&8CIU_ZSOut@*LVcXqN{*pLlT4$jWd=n z>P2|ETHI^-fc|lzz;fzZJ-gCwHq0$eP&pkC0ZA()*jVAc2P`2y3^#mg+K5aBSg5E#O8)&k5shw6o{dj(`lEd9 z+veMzi+~_gFkvRcZbG+5T~EX70}Y|$uAKfIBQ!eXbH-OU zYW1{H_)xBxr{1mM&u?kD?6s#aY+p>m23qJ*%m}{ch`@DJ>ia4U0^AGikv+5>+i_jr zwQ=%1KU^~aN7aN-6h$PoR8sTM>Ve1Th)`}5AzUt$0Y)K2`nKoX`r*d+cCUYk4bwL> z0Ry&{&g)-P8qYjSJ=byvy&eOoZ&_C7q|@zo2g8x&{6@wWm27vRzoB6yYidWBgEG(x zq{(^}!8bA)O-<{WtddTpJSGH9rLr#L;_lHeM^3Nz8KD1|WqaxPzVF@s_4wwn)9E>u zEnD1&{(_F7J1DR}$HJ4ichXyis`$D_i7IR>@NS?+L6bD8h vCwoCQ;7`w>&1ccSDgT0RQcGWinxZ9DtHHhm z{2Oe3Z1!e%@5~$@X727PNV?f1#c&TCX5r2~^Sx)z`5wLtjWyO-V~xE`lhZbAZf)NL zu3Z9_-N#?w_0zCckx4m&W`sFmx*(o1%?fM66t4_grMNwJ?#wZowP=bI8 z1XT)!Ad1oWa-~cG4Fenp7Hf4CC@trb6fJYAYE8)PwffELmQhK2ZU|z6pP6Zs&fqyxr46y_d zum*w_zD}q6%v2;Ny z$rj~5LjotlclUOlEy`Ut?yUDRk!j7!MFFmZ*Vp~%!OpW6<<5DU+`j)aYq!>WnOPic zov_8HjVw1I-pqtojbP6ZCp+t*AK&ix9zNJ%b8CB{Dfrdhe(!k&E16PUG++f(lLKFT zw$XdL5MIxqZJ@9*V0{BlXTziPampRK)M&bR!!4EJ8qkSCM-{6QC!8pf!1yT_OB^CW zDT6TZ%7KHiUNGQk)1}7y=G!L=v&5ZGHhRyUGE@jEmzUv(XJm={_nvV5)_U)(=Nevu zz0t5l!x9ZkTyd6A{hzSJwCRA4ZufhS&cG61-tG7HD_F5g>oRC9q-JxfeE#W1@0~(; zD~FDS)_@wU=jqMz!paE0mOg{=fe`azy9=e&kD4y z&^1EG2yG)2G6z2CJX;IYc~7^Kr~QSAQ?XmSO)>uXeGk~Za{sM0)>vbWT`~I`=VuD4 ToT1tj00000NkvXXu0mjf+M2jr diff --git a/source/images/sdcard.png b/source/images/sdcard.png deleted file mode 100644 index 9b1ad4ed9dd2b7eda8218230cb10f74a405fcd5c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2481 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 diff --git a/source/images/settings_button_over.png b/source/images/settings_button_over.png deleted file mode 100644 index f29a269fb7d9c9bbaf22bf2ff6d784ef9f97e0c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7553 zcmV-{9e(18P)Ghw1IB$pK(J6vfj6i%_1=7K1BQQ3Zn*%&1R~LG zYI$t}CE0Ujz_>2}2;TsJ1&`J;TGMC^0~D`>A-Mqt3tqO^Xj22I)WV!g2gbc*Fif>% zf&ihn#lB_>pcCV;_sX3CcEbNfXU_noG3yn4wpEF1dU>PtgXN!A@tl%CjfoKa5x*CKvOXJTa zFl~b=E%9H0zKm1|D>j%B89B?qTL{1ImTG}Q$V0v7*JuNy4aHu9V=_kC7sbp~fa0zI49{Y;rHzn4u%I_} z+cFw|22ghOdDd%exF`4C^JZbgI6rZ?lA`q13N7I0TJU{p$9gZ@v2H^Fqy%PaVGEd& zzc4^7U<8JGl8o5U0>7r)wrKo*Umthsx*+iVAa(9G66ZFxn?YLZ`aVko=V8)tKB4x6 zUQ56PH~{4dwL@x0dVeV1A8B9)24f-%TP_TWyCN_G1B^}y5D@x~Zo8u0*5}MG>N*Mi zr`wTgr!Lra=X-9aBwQ5p#_#3!pHbWSF*N{W=oj?-hnhLu4s<�cK)=l3o-PcZFay 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 GBp)gRdZ|sHtTG-jHm@{iN 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 C_epO6 diff --git a/source/images/tooltip_left.png b/source/images/tooltip_left.png deleted file mode 100644 index b1114ee16c1a7fbc881a81394c9c7d62bb951fd9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 606 zcmV-k0-^nhP)xjmX(T3nNwT%}1A zT5?DP)B4}bdGL_;;`w}c2)gjw^!)BU_n!0awb}m1|Ii!RY<3ZNz&FbPzFx1tw%hGb zy`Y8#2)d@sxL7RaYqi>ok)VbIw0S%@Qt{YqHsAXVt}9Sxp3moRE0xMqr_=c|6I@e3 zIp;HH!OaHN6wqloQ_?cX%=HAj%7&WFxvqeUh#y5Wr^SeXRp>Q4=T-&p74Y(BMP#{v z8W%5rqZQh(z(XhJ!OGxj0k2xtxI_tfKmV;O4l1~0f>x{bAxdz?1gPBhpA`sCk?>6x zeoTcIn%Gt$yxFmlN~JtP+jT4!a|!+6VA#{?^q#O!CL2DVPs(I6=fXbvY!yh=lCWzF z6M&&;G`cSA;zg3-WHNam>gvc>0i$_bg8I@((h0Q;- z`T?S(ic7$R*Xxx-q0n|BkvOsH3DqlcfJrdt_xm@4!Qf6L67k35@zX)xXlls_7za); z4d#Ix$Y2?)fK{-j!e&&W?1==%Xf-Yp&4LAzErKPI%Kf}z?Ha35L{5@Tk#L5jvu57l sy&{SBXN=P4ASMXYLoHIvBw8Kk2RP$?h4WNOh z`u+aTdcFR!R4RoKl1wJ|CqkwHFd>BPBp#0&z-DnQWEKGKgoP`g&wFh)n{q5<768i$ zOMEt)JqD|#k&sydth!hUd%a!_L56cO4*-RIf`Di=dIWY#4k8AC%}BlR4D3{(<)Ki` z3&4(NW5w_Ho56B*XczMWP&m5~5Q#)?gXJ29>SPxp05~8K5R1hgfa%82E<^xu3L_wu zN<9bD3$%-qT!;YRsHc8-38q>Qo*yg10MOYz>gv~EdTA(3=K#=ww*HjtIfO_*ln0SX zP9zd9z!ayeMks)lDfGcZ89*tt(E@?MUEu(JRJdHO1K}ZJ!wyb12@H3HCz*|FpU-y> z3{67Ils|B+R_hHgydtd8_#-nE3Ssr&s5S~275t$O1J18fsVrQ0<{x(awZ-9Z9MbA9 zgSO`y*Yb;($K$bq30}Ug%2q%9fg`^#eVuDQ-1k%yWMx-SB(2E zg$65UbE-ps)b$+`YPZ{uXyv>)ADYqEmPrqgU@-Uys^vPxd`D)!PGx!e;`O&D6ddAS zNs?R^i{&P*+Dr*Gj4?lbb>touufR~k y6W?m0;+pX(`4huY#(k3Vg8goqQklf*MglEl?1csGi WhmZd)FV+Sc#^CAd=d#Wzp$P!7Cn>l9 diff --git a/source/images/updateRev.png b/source/images/updateRev.png deleted file mode 100644 index 1bd1aaef246bb061ace6ff1ea6ce30c0564a1177..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1476 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 z 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≦MSE}lDcyWESZBvfdbMAdjb|Y z$Rni>w%6AE*=Qt&I_JrS06cS9sNzh(`H$pvhc)G89x+2o5$MuC){LGf%+ zui^%`c}g+2?^C4X$*O)D>vC|durPIrISa#UQ$`ErVYCrQ&`okbG>2zdXhGib+5mQP zxm-;#Rg*%yEVxZ+1DzQk4aG?iGD?9-mJNljI|DYj2}YCbC7Icvg8LY_l9AF5I5aOe z%(MUecyIpx`{K63-#%qe{QaNw^|e?jD^14SW_Hf_+Q2E9XH*WhKS%>|w(aJOF61F0 zWYnoZqch8<2zL%9fM(;7nd>(uxs(M~AG)N+?t`ektO0%fk)OOyzIxRGKaY>E_|?-1 zU+p|UzGuhBpW!NpZSE(}Y(M&$Uulvb-%tJe`Fb+u^{e-jH8AY4bt$=Fd!?OA8+z7d6^BLBujR@P6G)ki&P5m_e*$W@mBaW8rn?E zUyM96BRc`o^H5|@3o0^xKE+8ke{FUaX*y3slo>C=>p-+kihC6JvhRk|m8^)tK#y07 z`~Kb09r58Aou0pboGH%hL9pe|*Fs-Ex1al9c)e~+zN*Q_=dUU&cFtEO{8u;l$B!&x z?dwxPe0?Gf#ffMZM%`Xw@<6X|-y#S9WWcxJ=Uh`GN+go+H45>$XdQ!mYmjwOQD-C}B&*o2`o|XQ= z`1I+p^vl&V`j~!oR{AfO_*WyNq-k7E|1hE1zgS(zWWkDA+=et*?rb45K0O)pCqPZX zq^~-O@lPU<{>gIxFOZ!6`*}`_B6|jaKQF*P3U&5HZKhw<-5&xzxeRYVtNrTT$G3k& zga3*}585Z0`0ISCzaq!K?NV~Q)~R;pkMr<8Ksou_K3GmPdhzXFs@@+uE@NJzO371v zL_dmxvaA}l3&ro_n;-T~1Q=%60{5SfZ&q|azVXuEg2|)l-y{3+Ew25};Q!cs;N%}q z=l|g2AF+IY{QYA4x35#d=~bWDSp zQ$BGUoETp?0{??9g)<)Kd}-k;WWqEs`=mcm_EOjL?fD7W^chH4J$AFWSU0G${)h zBc6yPTCifzu#(ui8C?l2puR6u19>|j$&aW2^G@dD4^)i=_}hQpzC9CroOwI(Kl{sl zJXaQ!xo`0?AJMbEov6vn`+M{8-n_r9KWljJUvJHN@ZEoWcdz>6`1uCo-`s$Y{rJ0_ z=x08@diV2uyz%=tJ@>;;cv$rz%N?uBaliVzxAQ|ytv~d5%}X>g+lLGW``_R6qZt1| zKFYan<`0P2=X-m(^y@3R^qwon9oeJfh-6ZE6EYPpOMv$erbu8wa$3@E&ICjy(Fs+I z;Ve{HS%|F)l~`xc}KG z6WctdwyY*n`oy@5D{|PANSUXBHb*={Q?<+`L}MVgqfJc`>F=f1Ak^dKb7Q&WvtLP1 z_}S65l5x3SYl8SycxAuG$Cy_-pft%E&_BI z0NSUz0G@t$adCEv8RGSu41;r>v^6h2@gowS%TqEUYq-+lO&cT|Hc4`#yll0Mh&&~@ z1EXSqqtVf@f2v|OdL|ER-{y^ zEg6B%NQY8hA_W?P!XC4f1>W@p61P!T$E5p=n4KTg@JN;EbCLRWQ|>2#&_|R*h{?Dc z<1Yy$5Dlgk$l8H{5q6LO21q4tGE%n+HYl(wN=B3u-eUpe65c2S`&%&RS|dpaZo!>e z(}tLdZ%oy&k*-W6t_OlGGHmG#@4NCD%{&=av^H28J>i7RuccL%m`$+NHm3d&1y56h z=Yp6?_lf{lLyIyP zNck{jS626)3f1%DsO$1ZCk5zaI_G4BGX>PDV2E<>OJ|X3aa%T~rnPqw7t2S!G$-(- z8KB0vED?ONr<9~3=R)I>5eJRDA04rO=dMVm9jQ4;#*}zRf-tJt5vJCSf*7pbfPbGV zBah~KwduHJQD1VzP$|{3UN*q5vM`D8UU~)AGXdu)9UD+5^Id|2#gdV(uESv7IF8hU znB9hMfV9h`h74&mRp6!CWK0CSWP(WY^#&70=ODMpSiIET(v<@wR#XeFBLZs7S#A#O z0J!jujWu5sP0jTfysVOp*m{Bxj%pIrR3;5*I#Hsrep7R`9}s@LNrGkzFF~R9u-Fsr zVEy`R;?mH9D=lZ>b(&E5IKvWb`$nR^#B3Nw>{I~rlm#Jh+~lOu_A41JN~wn+RH$oA z=Iou>mYDtCh!Q|@X4p?IX-M=ErY77ni6iOAmkhN};ys?kkaROkOm{L;DJA0zgquWH z2#e`#GK7ek!xrAMIW=^ua0Cc6HCMI&Vd)t9CUh9xLG5T%4v9LSE9iS-G?LOn;q5l)RL zP6S!l_5ojW-npqV{F^~j!Xu%`Jr{8B{nn7Sm|?O;Om0RD0@5h^5)+EBb|M~G=`|&W z?N1SG)#KTl615giS>d(!^*pL?0JAW7Wp zlh9oZ;3a@)u$eie?g`|;sKaOoKh%_9<}+Yh3zN9|p6TNRPEBX^?sve#j2B2rPze|* zV7F%k9n)i*JOop6c_LssfRJQr?_voqIefW{=ohaT6C@WC7nyC?1toBdMPu|JixL5H zr2}*lbd*LWl_@S0`wNBzTD#eBG3fE)bkU+pm^3xl7iJ1sI>O_ilovt#XhU)NQv9?? zk_&_W61mclAdMbjq0 z-y~dRQy`S&DN%4vhN&4mA!*uP&8BAlZsw%DNa>njD4ARtTpl z=%VcIF^O@$^ZlZ`poA!zqe^6pN8HF4CH;$q4uR=1Cgi+twZcFnW&4o{LxDN1>xv@!|AJS9}y_Qfa%h3+yYcI#lf1S1t3yGXQ}+ zTRP!M0M+;vgEp~CCl^p4z*x9L5{l3YrTn6^KpG0U32RmeP3Vin8+S@bp%-%ridIQ< z@=5qg`i9gt`ePE=^T@7%7!^twHUpOlqn&U|hrL%~cH|dnF&zU#4+pfVn4Gj1QKFcD zwN!u-yOl=~L8=_n;A#Q%6a4c66EeoUgpJls=FAu5yTmgZFX`vHfVxDg7xq}FLr9bd z6ktCpAF(^*_bQxt%}PDd6(?#G=$Z`Io~XzL+Z??1sKT6>9wGq+x==To2(memPA!l| zFGeiI{Rz5q6jA@WNXLClf{mC`Dl&V@#m~Y&(k2gflhoxAG)-%wc#2F;{gC-;GL1YS z6%^${8%iuf>54$S!7vr8TeYB*_FQ+FfcaG#_);Pe z1+=reJs=n;U7&fmiK1%;7jEJcAh8P|Q_5dAev_43RHX~{lz9CBNE>x$6=2g@Brru{ zb|ne<_|*LLA5RE!VouPVq8Q z--(+Z)P}&S6niG(O*&C(#N?DN*r-HJN-5?F?FDu!7rxR9MT)(w?pKm1FIBO$YpJ<9YuvfO6+VQS-LrCy1CJ#P7zXx);H2w1cAul!7r?xj zukf^kk#4gtwIw#Ak|P3_FzsuTNf7HIq;q5c3Il8-Z1-4HrvE$;I|? z2?^B%pyJ-eT%!&O2ix=1UR9EQZZh1BcXLvUWZEC6bWMx)2dTk7?xi@hW(nJWBtf&4 z(Dj>y_9zoj1bs_o5^Ff9nZ|AyZui)0au?VJSgxN!ib#+~c`umKb{Ukx?3?LH|U5a!b)*h|@F$WRa6 zcre}l#Mhn1G}s@f7kix~;Lr)Tfc8SjWeQ6)JqwX}Z!a5|JwycGXM!E%aWa8TF99a4 z*iV#&2qT9XM?IeCS|2kJUpgA&ig<|(3$J1&Oj2=oE+hk~siP#qo9QKPRahzMB_N|% zv0F3P5q#7ma^WGN8!qH~a%yvGD{(U29&U;7!dnvKkRa5!(3C_wo5WlpkIk8wUTR8= z=w7TnDK~#9mlf|Z#`L7WOwKqe2`|D0Tl`QjPxuf;>!ePxz2FP%+*?QLJ&AG@Uv$KW zIxn%yLXo{zh~X)XzmKTK7hD%gTOtA+fFq3}J2@@OfQ;hoW~U9?kgr}wf&Rp{FPJ6y z1Ja2qinfhYEFZB;nqR(>F_QZ~^f!s<0S7#q;^{Qwe;^gMR|uOGLo0ufj`Xw{nj+$K zCg;ij(~gy-Kn%mM{{K-^q!0K@13gV*$u+c>0fUZ7>j*EBqdQcPGyy!%u$5x_wNQJp zzY8~cLQ~b)OdDFYz$&GE!W+hlTV)4dgbodLPAaLxk;B{k5c0Ayl?Lx>lRb4Jqoo{R zif77+4l6jkI}~z_^^bC#s_Uv&9BT0YQXNeWh38p2E!U;=vVehh;raPgj;QFFsRY6? w@3J(nln%6K&tNbZ33Fbr?NAKgZT3 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®{Ei3@4Y`;9-X%fVAp3`{ac|R0XU0UjAyXp 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 diff --git a/source/images/wiimote.png b/source/images/wiimote.png deleted file mode 100644 index a868c21832c16eaa2d5ab002448bff5e87584638..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21406 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 ZzX79(RA-zc&ddM+002ovPDHLkV1nA5oVNe~ 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 läuft - 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 Muñoz '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 Muñoz '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 a22a73aebcacf35cd7a5f0b4cef9dfdbcf404165..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 113405 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 V;4lJ*5jc#%VFV5%@c#jU{{e^U>fZnW diff --git a/source/sounds/button_over.pcm b/source/sounds/button_over.pcm deleted file mode 100644 index 64f519cfd74945140b23a9908a514bbd675a0681..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32256 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 diff --git a/source/sounds/credits_music.ogg b/source/sounds/credits_music.ogg deleted file mode 100644 index 4010c41c416a21ac731253a3727097a67b12908e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 344200 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∓oD1OI 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%0AXKevmK&AQ5z>z79WRIk>1!mmvUA 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

clpnWbovSsbf^L*(%nWQ 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⋘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 Q;$vSR|01++7;Q#;t diff --git a/source/sounds/menuout.ogg b/source/sounds/menuout.ogg deleted file mode 100644 index e66f574ca70a507785d7566d640b7af86f811700..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11143 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 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