diff options
Diffstat (limited to 'rbutil')
-rw-r--r-- | rbutil/Makefile | 5 | ||||
-rwxr-xr-x | rbutil/Makefile.macosx | 216 | ||||
-rwxr-xr-x | rbutil/bootloaders.cpp | 452 | ||||
-rwxr-xr-x | rbutil/bootloaders.h | 41 | ||||
-rw-r--r-- | rbutil/credits.h | 1 | ||||
-rwxr-xr-x | rbutil/h100sums.h | 23 | ||||
-rwxr-xr-x | rbutil/h120sums.h | 23 | ||||
-rwxr-xr-x | rbutil/h300sums.h | 17 | ||||
-rwxr-xr-x | rbutil/irivertools.cpp | 613 | ||||
-rwxr-xr-x | rbutil/irivertools.h | 65 | ||||
-rwxr-xr-x | rbutil/md5sum.cpp | 300 | ||||
-rwxr-xr-x | rbutil/md5sum.h | 51 | ||||
-rwxr-xr-x | rbutil/mksums.pl | 69 | ||||
-rw-r--r-- | rbutil/rbutil.cbp | 212 | ||||
-rw-r--r-- | rbutil/rbutil.cpp | 38 | ||||
-rw-r--r-- | rbutil/rbutil.h | 13 | ||||
-rw-r--r-- | rbutil/rbutil.ini | 190 | ||||
-rwxr-xr-x | rbutil/rbutil.r | 2675 | ||||
-rw-r--r-- | rbutil/rbutilApp.cpp | 58 | ||||
-rw-r--r-- | rbutil/rbutilFrm.cpp | 250 | ||||
-rw-r--r-- | rbutil/rbutilFrm.h | 7 | ||||
-rw-r--r-- | rbutil/wizard_pages.cpp | 362 | ||||
-rw-r--r-- | rbutil/wizard_pages.h | 97 |
23 files changed, 5566 insertions, 212 deletions
diff --git a/rbutil/Makefile b/rbutil/Makefile index a7f9102fed..40091fd4a3 100644 --- a/rbutil/Makefile +++ b/rbutil/Makefile | |||
@@ -9,10 +9,9 @@ | |||
9 | 9 | ||
10 | # Unix-style Makefile for rbutil | 10 | # Unix-style Makefile for rbutil |
11 | 11 | ||
12 | |||
13 | CXX=$(shell $(PREFIX)wx-config --cxx) | 12 | CXX=$(shell $(PREFIX)wx-config --cxx) |
14 | INC = | 13 | INC = |
15 | OBJS=rbutil.o rbutilApp.o rbutilFrm.o wizard_pages.o bootloaders.o installlog.o ipodpatcher/ipodpatcher.o ipodpatcher/ipodio-posix.o fwpatcher/md5.o fwpatcher/iriver.o | 14 | OBJS=rbutil.o rbutilApp.o rbutilFrm.o wizard_pages.o bootloaders.o installlog.o ipodpatcher/ipodpatcher.o ipodpatcher/ipodio-posix.o irivertools.o md5sum.o |
16 | 15 | ||
17 | # Install into /usr/local by default | 16 | # Install into /usr/local by default |
18 | ifndef DESTDIR | 17 | ifndef DESTDIR |
diff --git a/rbutil/Makefile.macosx b/rbutil/Makefile.macosx new file mode 100755 index 0000000000..daeb7215bc --- /dev/null +++ b/rbutil/Makefile.macosx | |||
@@ -0,0 +1,216 @@ | |||
1 | # ========================================================================= | ||
2 | # This makefile was generated by | ||
3 | # Bakefile 0.2.1 (http://bakefile.sourceforge.net) | ||
4 | # Do not modify, all changes will be overwritten! | ||
5 | # ========================================================================= | ||
6 | |||
7 | |||
8 | |||
9 | |||
10 | srcdir = /Users/dave/rockbox/rockbox-devel/rbutil | ||
11 | top_srcdir = /Users/dave/src/wxMac-2.8.0/ | ||
12 | BK_DEPS = /Users/dave/src/wxMac-2.8.0/osx_build/bk-deps | ||
13 | wx_top_builddir = /Users/dave/src/wxMac-2.8.0/osx_build | ||
14 | |||
15 | prefix = /usr/local | ||
16 | exec_prefix = ${prefix} | ||
17 | INSTALL = /usr/bin/install -c | ||
18 | EXEEXT = | ||
19 | WINDRES = | ||
20 | REZ = /Developer/Tools/Rez | ||
21 | SETFILE = /Developer/Tools/SetFile | ||
22 | NM = nm | ||
23 | LIBS = -lz -lpthread -liconv | ||
24 | LDFLAGS_GUI = | ||
25 | CXX = g++ | ||
26 | CXXFLAGS = -isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch ppc -arch i386 -Wall -Wundef -Wno-ctor-dtor-privacy -O2 -fno-strict-aliasing -fno-common | ||
27 | CPPFLAGS = -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES -I${wx_top_builddir}/lib/wx/include/mac-ansi-release-static-2.8 -I${top_srcdir}/include -fpascal-strings -I${top_srcdir}/src/mac/carbon/morefilex -I/Developer/Headers/FlatCarbon | ||
28 | RBUTIL_CFLAGS = $(CXXFLAGS) -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES -I${wx_top_builddir}/lib/wx/include/mac-ansi-release-static-2.8 -I${top_srcdir}/include -fpascal-strings -I${top_srcdir}/src/mac/carbon/morefilex -I/Developer/Headers/FlatCarbon | ||
29 | LDFLAGS = -isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch ppc -arch i386 -framework QuickTime -framework IOKit -framework Carbon -framework Cocoa -framework System | ||
30 | WX_LIB_FLAVOUR = | ||
31 | TOOLKIT = MAC | ||
32 | TOOLKIT_LOWERCASE = mac | ||
33 | TOOLKIT_VERSION = | ||
34 | TOOLCHAIN_FULLNAME = mac-ansi-release-static-2.8 | ||
35 | EXTRALIBS = -framework QuickTime -framework IOKit -framework Carbon -framework Cocoa -framework System -lz -lpthread -liconv | ||
36 | EXTRALIBS_GUI = -framework WebKit | ||
37 | HOST_SUFFIX = | ||
38 | SAMPLES_RPATH_FLAG = | ||
39 | SAMPLES_RPATH_POSTLINK = | ||
40 | |||
41 | ### Variables: ### | ||
42 | |||
43 | DESTDIR = | ||
44 | WX_RELEASE = 2.8 | ||
45 | WX_VERSION = $(WX_RELEASE).0 | ||
46 | LIBDIRNAME = $(wx_top_builddir)/lib | ||
47 | RBUTIL_CXXFLAGS = -D__WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p) \ | ||
48 | $(__EXCEPTIONS_DEFINE_p) $(__RTTI_DEFINE_p) $(__THREAD_DEFINE_p) \ | ||
49 | -I$(srcdir) $(__DLLFLAG_p) $(CPPFLAGS) $(CXXFLAGS) | ||
50 | RBUTIL_OBJECTS = \ | ||
51 | $(__rbutil_os2_lib_res) \ | ||
52 | rbutil.o rbutilApp.o rbutilFrm.o wizard_pages.o bootloaders.o installlog.o \ | ||
53 | ipodpatcher/ipodpatcher.o ipodpatcher/ipodio-posix.o \ | ||
54 | md5sum.o irivertools.o \ | ||
55 | $(__rbutil___win32rc) | ||
56 | |||
57 | ### Conditionally set variables: ### | ||
58 | |||
59 | #CXXC = $(CXX) | ||
60 | CXXC = $(BK_DEPS) $(CXX) | ||
61 | #PORTNAME = base | ||
62 | PORTNAME = $(TOOLKIT_LOWERCASE)$(TOOLKIT_VERSION) | ||
63 | WXBASEPORT = _carbon | ||
64 | #WXDEBUGFLAG = d | ||
65 | #WXDEBUGFLAG = d | ||
66 | #WXUNICODEFLAG = u | ||
67 | #WXUNIVNAME = univ | ||
68 | EXTRALIBS_FOR_BASE = $(EXTRALIBS) | ||
69 | #EXTRALIBS_FOR_BASE = $(EXTRALIBS) $(EXTRALIBS_GUI) | ||
70 | EXTRALIBS_FOR_GUI = $(EXTRALIBS_GUI) | ||
71 | #EXTRALIBS_FOR_GUI = | ||
72 | __rbutil___mac_setfilecmd = \ | ||
73 | $(SETFILE) -a C rbutil$(EXEEXT) | ||
74 | __rbutil___mac_rezcmd = $(__MACOSX_RESOURCES_p_1) | ||
75 | #__WXUNIV_DEFINE_p = -D__WXUNIVERSAL__ | ||
76 | #__WXUNIV_DEFINE_p_1 = -d __WXUNIVERSAL__ | ||
77 | #__WXUNIV_DEFINE_p_2 = --define __WXUNIVERSAL__ | ||
78 | #__EXCEPTIONS_DEFINE_p = -DwxNO_EXCEPTIONS | ||
79 | #__EXCEPTIONS_DEFINE_p_1 = -d wxNO_EXCEPTIONS | ||
80 | #__EXCEPTIONS_DEFINE_p_2 = --define wxNO_EXCEPTIONS | ||
81 | #__RTTI_DEFINE_p = -DwxNO_RTTI | ||
82 | #__RTTI_DEFINE_p_1 = -d wxNO_RTTI | ||
83 | #__RTTI_DEFINE_p_2 = --define wxNO_RTTI | ||
84 | #__THREAD_DEFINE_p = -DwxNO_THREADS | ||
85 | #__THREAD_DEFINE_p_1 = -d wxNO_THREADS | ||
86 | #__THREAD_DEFINE_p_2 = --define wxNO_THREADS | ||
87 | #__DLLFLAG_p = -DWXUSINGDLL | ||
88 | #__DLLFLAG_p_1 = -d WXUSINGDLL | ||
89 | #__DLLFLAG_p_2 = --define WXUSINGDLL | ||
90 | COND_PLATFORM_OS2_1___rbutil___os2_emxbindcmd = $(NM) rbutil$(EXEEXT) | if \ | ||
91 | grep -q pmwin.763 ; then emxbind -ep rbutil$(EXEEXT) ; fi | ||
92 | #__rbutil___os2_emxbindcmd = $(COND_PLATFORM_OS2_1___rbutil___os2_emxbindcmd) | ||
93 | #__RCDEFDIR_p = -i \ | ||
94 | # $(LIBDIRNAME)/wx/include/$(TOOLCHAIN_FULLNAME) | ||
95 | #__RCDEFDIR_p_1 = --include-dir \ | ||
96 | # $(LIBDIRNAME)/wx/include/$(TOOLCHAIN_FULLNAME) | ||
97 | #__rbutil_os2_lib_res = \ | ||
98 | # $(top_srcdir)/include/wx/os2/wx.res | ||
99 | __rbutil_bundle___depname = rbutil_bundle | ||
100 | #____rbutil_BUNDLE_TGT_REF_DEP = \ | ||
101 | # rbutil.app/Contents/PkgInfo | ||
102 | ____rbutil_BUNDLE_TGT_REF_DEP = \ | ||
103 | rbutil.app/Contents/PkgInfo | ||
104 | COND_MONOLITHIC_0___WXLIB_CORE_p = \ | ||
105 | -lwx_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_core-$(WX_RELEASE)$(HOST_SUFFIX) | ||
106 | __WXLIB_CORE_p = $(COND_MONOLITHIC_0___WXLIB_CORE_p) | ||
107 | COND_MONOLITHIC_0___WXLIB_BASE_p = \ | ||
108 | -lwx_base$(WXBASEPORT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)-$(WX_RELEASE)$(HOST_SUFFIX) | ||
109 | __WXLIB_BASE_p = $(COND_MONOLITHIC_0___WXLIB_BASE_p) | ||
110 | |||
111 | __WXLIB_ADV_p = -lwx_mac_adv$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)-$(WX_RELEASE)$(HOST_SUFFIX) | ||
112 | __WXLIB_NET_p = -lwx_base_carbon_net-$(WX_RELEASE)$(HOST_SUFFIX) | ||
113 | |||
114 | #__rbutil___win32rc = rbutil_rc.o | ||
115 | COND_MONOLITHIC_1___WXLIB_MONO_p = \ | ||
116 | -lwx_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)-$(WX_RELEASE)$(HOST_SUFFIX) | ||
117 | #__WXLIB_MONO_p = $(COND_MONOLITHIC_1___WXLIB_MONO_p) | ||
118 | __LIB_TIFF_p \ | ||
119 | = \ | ||
120 | -lwxtiff$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)-$(WX_RELEASE)$(HOST_SUFFIX) | ||
121 | __LIB_JPEG_p \ | ||
122 | = \ | ||
123 | -lwxjpeg$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)-$(WX_RELEASE)$(HOST_SUFFIX) | ||
124 | __LIB_PNG_p \ | ||
125 | = \ | ||
126 | -lwxpng$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)-$(WX_RELEASE)$(HOST_SUFFIX) | ||
127 | #__LIB_ZLIB_p = \ | ||
128 | # -lwxzlib$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)-$(WX_RELEASE)$(HOST_SUFFIX) | ||
129 | #__LIB_ODBC_p = \ | ||
130 | # -lwxodbc$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)-$(WX_RELEASE)$(HOST_SUFFIX) | ||
131 | COND_WXUSE_REGEX_BUILTIN___LIB_REGEX_p = \ | ||
132 | -lwxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)-$(WX_RELEASE)$(HOST_SUFFIX) | ||
133 | #__LIB_REGEX_p = $(COND_WXUSE_REGEX_BUILTIN___LIB_REGEX_p) | ||
134 | __LIB_EXPAT_p = \ | ||
135 | -lwxexpat$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)-$(WX_RELEASE)$(HOST_SUFFIX) | ||
136 | COND_TOOLKIT_MAC___MACOSX_RESOURCES_p_1 = $(REZ) -d __DARWIN__ -t APPL -d \ | ||
137 | __WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p_1) $(__EXCEPTIONS_DEFINE_p_1) \ | ||
138 | $(__RTTI_DEFINE_p_1) $(__THREAD_DEFINE_p_1) -i $(srcdir) $(__DLLFLAG_p_1) -i \ | ||
139 | $(srcdir)/../../samples $(__RCDEFDIR_p) -i $(top_srcdir)/include -o \ | ||
140 | rbutil$(EXEEXT) Carbon.r rbutil.r | ||
141 | __MACOSX_RESOURCES_p_1 = $(COND_TOOLKIT_MAC___MACOSX_RESOURCES_p_1) | ||
142 | |||
143 | ### Targets: ### | ||
144 | |||
145 | all: rbutil$(EXEEXT) $(__rbutil_bundle___depname) data | ||
146 | |||
147 | install: all | ||
148 | |||
149 | uninstall: | ||
150 | |||
151 | install-strip: install | ||
152 | |||
153 | clean: | ||
154 | rm -rf ./.deps ./.pch | ||
155 | rm -f $(RBUTIL_OBJECTS) | ||
156 | rm -f rbutil$(EXEEXT) | ||
157 | rm -rf rbutil.app | ||
158 | |||
159 | distclean: clean | ||
160 | rm -f config.cache config.log config.status bk-deps bk-make-pch shared-ld-sh Makefile | ||
161 | |||
162 | rbutil$(EXEEXT): $(RBUTIL_OBJECTS) $(__rbutil___win32rc) | ||
163 | $(CXX) -o $@ $(RBUTIL_OBJECTS) $(LDFLAGS) -L$(LIBDIRNAME) $(LDFLAGS_GUI) $(SAMPLES_RPATH_FLAG) $(LIBS) $(__WXLIB_CORE_p) $(__WXLIB_BASE_p) $(__WXLIB_MONO_p) $(__LIB_TIFF_p) $(__WXLIB_ADV_p) $(__WXLIB_NET_p) $(__LIB_JPEG_p) $(__LIB_PNG_p) $(EXTRALIBS_FOR_GUI) $(__LIB_ZLIB_p) $(__LIB_ODBC_p) $(__LIB_REGEX_p) $(__LIB_EXPAT_p) $(EXTRALIBS_FOR_BASE) | ||
164 | $(__rbutil___mac_rezcmd) | ||
165 | $(__rbutil___mac_setfilecmd) | ||
166 | $(__rbutil___os2_emxbindcmd) | ||
167 | $(SAMPLES_RPATH_POSTLINK) | ||
168 | |||
169 | rbutil.app/Contents/PkgInfo: rbutil$(EXEEXT) $(top_srcdir)/src/mac/carbon/Info.plist.in $(top_srcdir)/src/mac/carbon/wxmac.icns | ||
170 | mkdir -p rbutil.app/Contents | ||
171 | mkdir -p rbutil.app/Contents/MacOS | ||
172 | mkdir -p rbutil.app/Contents/Resources | ||
173 | |||
174 | |||
175 | sed -e "s/IDENTIFIER/`echo $(srcdir) | sed -e 's,\.\./,,g' | sed -e 's,/,.,g'`/" \ | ||
176 | -e "s/EXECUTABLE/rbutil/" \ | ||
177 | -e "s/VERSION/$(WX_VERSION)/" \ | ||
178 | $(top_srcdir)/src/mac/carbon/Info.plist.in >rbutil.app/Contents/Info.plist | ||
179 | |||
180 | |||
181 | echo -n "APPL????" >rbutil.app/Contents/PkgInfo | ||
182 | |||
183 | |||
184 | ln -f rbutil$(EXEEXT) rbutil.app/Contents/MacOS/rbutil | ||
185 | |||
186 | |||
187 | cp -f $(top_srcdir)/src/mac/carbon/wxmac.icns rbutil.app/Contents/Resources/wxmac.icns | ||
188 | |||
189 | rbutil_bundle: $(____rbutil_BUNDLE_TGT_REF_DEP) | ||
190 | |||
191 | data: | ||
192 | @mkdir -p . | ||
193 | @for f in rbutil.ini; do \ | ||
194 | if test ! -f ./$$f -a ! -d ./$$f ; \ | ||
195 | then x=yep ; \ | ||
196 | else x=`find $(srcdir)/$$f -newer ./$$f -print` ; \ | ||
197 | fi; \ | ||
198 | case "$$x" in ?*) \ | ||
199 | cp -pRf $(srcdir)/$$f . ;; \ | ||
200 | esac; \ | ||
201 | done | ||
202 | |||
203 | .cpp.o : | ||
204 | $(CXXC) $(RBUTIL_CXXFLAGS) -c -o $@ $< | ||
205 | |||
206 | .c.o : | ||
207 | $(CC) $(RBUTIL_CFLAGS) -c -o $@ $< | ||
208 | |||
209 | rbutil_rc.o: $(srcdir)/rbutil.rc | ||
210 | $(WINDRES) -i$< -o$@ --define __WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p_2) $(__EXCEPTIONS_DEFINE_p_2) $(__RTTI_DEFINE_p_2) $(__THREAD_DEFINE_p_2) --include-dir $(srcdir) $(__DLLFLAG_p_2) --include-dir $(srcdir)/../../samples $(__RCDEFDIR_p_1) --include-dir $(top_srcdir)/include | ||
211 | |||
212 | |||
213 | # Include dependency info, if present: | ||
214 | -include .deps/*.d | ||
215 | |||
216 | .PHONY: all install uninstall clean distclean rbutil_bundle data | ||
diff --git a/rbutil/bootloaders.cpp b/rbutil/bootloaders.cpp new file mode 100755 index 0000000000..a2a52be209 --- /dev/null +++ b/rbutil/bootloaders.cpp | |||
@@ -0,0 +1,452 @@ | |||
1 | /*************************************************************************** | ||
2 | * __________ __ ___. | ||
3 | * Open \______ \ ____ ____ | | _\_ |__ _______ ___ | ||
4 | * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / | ||
5 | * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < | ||
6 | * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ | ||
7 | * \/ \/ \/ \/ \/ | ||
8 | * Module: rbutil | ||
9 | * File: bootloaders.cpp | ||
10 | * | ||
11 | * Copyright (C) 2007 Dominik Wenger | ||
12 | * | ||
13 | * All files in this archive are subject to the GNU General Public License. | ||
14 | * See the file COPYING in the source tree root for full license agreement. | ||
15 | * | ||
16 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | ||
17 | * KIND, either express or implied. | ||
18 | * | ||
19 | ****************************************************************************/ | ||
20 | |||
21 | #include "bootloaders.h" | ||
22 | #include "irivertools.h" | ||
23 | #include "md5sum.h" | ||
24 | |||
25 | #include "rbutil.h" | ||
26 | #include "installlog.h" | ||
27 | |||
28 | |||
29 | // for ipodpatcher | ||
30 | int verbose = 0; | ||
31 | // reserves memory for ipodpatcher | ||
32 | bool initIpodpatcher() | ||
33 | { | ||
34 | if (ipod_alloc_buffer(§orbuf,BUFFER_SIZE) < 0) return true; | ||
35 | else return false; | ||
36 | } | ||
37 | // uses ipodpatcher for add and rem of bootloader | ||
38 | bool ipodpatcher(int mode) | ||
39 | { | ||
40 | wxString src,dest,buf; | ||
41 | |||
42 | // downloading files | ||
43 | if(mode == BOOTLOADER_ADD) | ||
44 | { | ||
45 | src.Printf("%s/ipod/%s.ipod", gv->bootloader_url.c_str(),gv->curbootloader.c_str()); | ||
46 | dest.Printf("%s" PATH_SEP "download" PATH_SEP "%s", | ||
47 | gv->stdpaths->GetUserDataDir().c_str(),gv->curbootloader.c_str()); | ||
48 | if ( DownloadURL(src, dest) ) | ||
49 | { | ||
50 | wxRemoveFile(dest); | ||
51 | buf.Printf(_("Unable to download %s"), src.c_str() ); | ||
52 | ERR_DIALOG(buf, _("Install")); | ||
53 | return false; | ||
54 | } | ||
55 | } | ||
56 | |||
57 | struct ipod_t ipod; | ||
58 | |||
59 | int n = ipod_scan(&ipod); | ||
60 | if (n == 0) | ||
61 | { | ||
62 | ERR_DIALOG("[ERR] No ipods found.", _("Scanning for Ipods")); | ||
63 | return false; | ||
64 | } | ||
65 | if (n > 1) | ||
66 | { | ||
67 | ERR_DIALOG("[ERR] to many ipods found.", _("Scanning for Ipods")); | ||
68 | return false; | ||
69 | } | ||
70 | |||
71 | if (ipod_open(&ipod, 0) < 0) | ||
72 | { | ||
73 | ERR_DIALOG("[ERR] could not open ipod", _("open Ipod")); | ||
74 | return false; | ||
75 | } | ||
76 | |||
77 | if (read_partinfo(&ipod,0) < 0) | ||
78 | { | ||
79 | ERR_DIALOG("[ERR] could not read partitiontable", _("reading partitiontable")); | ||
80 | return false; | ||
81 | } | ||
82 | |||
83 | if (ipod.pinfo[0].start==0) | ||
84 | { | ||
85 | ERR_DIALOG("[ERR] No partition 0 on disk", _("reading partitiontable")); | ||
86 | int i; | ||
87 | double sectors_per_MB = (1024.0*1024.0)/ipod.sector_size; | ||
88 | |||
89 | buf.Printf("[INFO] Part Start Sector End Sector Size (MB) Type\n"); | ||
90 | ERR_DIALOG(buf, _("reading partitiontable")); | ||
91 | for ( i = 0; i < 4; i++ ) { | ||
92 | if (ipod.pinfo[i].start != 0) { | ||
93 | buf.Printf("[INFO] %d %10ld %10ld %10.1f %s (0x%02x)\n", | ||
94 | i, | ||
95 | ipod.pinfo[i].start, | ||
96 | ipod.pinfo[i].start+ipod.pinfo[i].size-1, | ||
97 | ipod.pinfo[i].size/sectors_per_MB, | ||
98 | get_parttype(ipod.pinfo[i].type), | ||
99 | ipod.pinfo[i].type); | ||
100 | ERR_DIALOG(buf, _("reading partitiontable")); | ||
101 | } | ||
102 | } | ||
103 | return false; | ||
104 | } | ||
105 | |||
106 | read_directory(&ipod); | ||
107 | |||
108 | if (ipod.nimages <= 0) | ||
109 | { | ||
110 | ERR_DIALOG("[ERR] Failed to read firmware directory", _("reading directory")); | ||
111 | return false; | ||
112 | } | ||
113 | if (getmodel(&ipod,(ipod.ipod_directory[0].vers>>8)) < 0) | ||
114 | { | ||
115 | buf.Printf(_("[ERR] Unknown version number in firmware (%08x)\n"), | ||
116 | ipod.ipod_directory[0].vers ); | ||
117 | ERR_DIALOG(buf, _("reading directory")); | ||
118 | return false; | ||
119 | } | ||
120 | |||
121 | if (ipod.macpod) | ||
122 | { | ||
123 | WARN_DIALOG("Warning this is a MacPod, Rockbox doesnt work on this. Convert it to WinPod",_("MacPod")); | ||
124 | } | ||
125 | |||
126 | |||
127 | if(mode == BOOTLOADER_ADD) | ||
128 | { | ||
129 | if (ipod_reopen_rw(&ipod) < 0) { | ||
130 | ERR_DIALOG("[ERR] Could not open Ipod in RW mode", _("Bootloader add")); | ||
131 | return false; | ||
132 | } | ||
133 | |||
134 | if (add_bootloader(&ipod, (char*)dest.c_str(), FILETYPE_DOT_IPOD)==0) { | ||
135 | |||
136 | } else { | ||
137 | ERR_DIALOG("[ERR] failed to add Bootloader", _("Bootloader add")); | ||
138 | return false; | ||
139 | } | ||
140 | } | ||
141 | else if(mode == BOOTLOADER_REM) | ||
142 | { | ||
143 | if (ipod_reopen_rw(&ipod) < 0) { | ||
144 | ERR_DIALOG("[ERR] Could not open Ipod in RW mode", _("Bootloader add")); | ||
145 | return false; | ||
146 | } | ||
147 | |||
148 | if (ipod.ipod_directory[0].entryOffset==0) { | ||
149 | ERR_DIALOG("[ERR] No bootloader detected.\n", _("Bootloader del")); | ||
150 | return false; | ||
151 | } else { | ||
152 | if (delete_bootloader(&ipod)==0) { | ||
153 | |||
154 | } else { | ||
155 | ERR_DIALOG("[ERR] --delete-bootloader failed.\n", _("Bootloader del")); | ||
156 | return false; | ||
157 | } | ||
158 | } | ||
159 | } | ||
160 | |||
161 | ipod_close(&ipod); | ||
162 | return true; | ||
163 | } | ||
164 | |||
165 | // gigabeatinstallation | ||
166 | bool gigabeatf(int mode) | ||
167 | { | ||
168 | wxString path1,path2; | ||
169 | wxString err; | ||
170 | wxString src,dest; | ||
171 | |||
172 | path1.Printf("%s" PATH_SEP "GBSYSTEM" PATH_SEP "FWIMG" PATH_SEP "FWIMG01.DAT",gv->curdestdir.c_str()); | ||
173 | |||
174 | if(mode == BOOTLOADER_ADD) | ||
175 | { | ||
176 | //Files downloaden | ||
177 | src.Printf("%s/gigabeat/%s", gv->bootloader_url.c_str(),gv->curbootloader.c_str()); | ||
178 | dest.Printf("%s" PATH_SEP "download" PATH_SEP "%s", | ||
179 | gv->stdpaths->GetUserDataDir().c_str(),gv->curbootloader.c_str()); | ||
180 | if( DownloadURL(src, dest) ) | ||
181 | { | ||
182 | wxRemoveFile(dest); | ||
183 | err.Printf(_("Unable to download %s"), src.c_str() ); | ||
184 | ERR_DIALOG(err, _("Install")); | ||
185 | return false; | ||
186 | } | ||
187 | |||
188 | |||
189 | if(!wxFileExists(path1)) | ||
190 | { | ||
191 | err.Printf("[ERR] Coud not find %s",path1.c_str()); | ||
192 | ERR_DIALOG(err, _("Bootloader add")); | ||
193 | return false; | ||
194 | } | ||
195 | path2 = path1; | ||
196 | path2.Append(".ORIG"); | ||
197 | if(wxFileExists(path2)) | ||
198 | { | ||
199 | err = "Its seems there is already a Bootloader install, if not, delete the *.IMG.ORIG file"; | ||
200 | ERR_DIALOG(err, _("Bootloader add")); | ||
201 | return false; | ||
202 | } | ||
203 | |||
204 | if(!wxRenameFile(path1,path2,false)) | ||
205 | { | ||
206 | err.Printf("[ERR] Coud not rename %s to %s",path1.c_str(),path2.c_str()); | ||
207 | ERR_DIALOG(err, _("Bootloader add")); | ||
208 | return false; | ||
209 | } | ||
210 | if(!wxCopyFile(dest,path1)) | ||
211 | { | ||
212 | err.Printf("[ERR] Coud not copy %s to %s",dest.c_str(),path2.c_str()); | ||
213 | ERR_DIALOG(err, _("Bootloader add")); | ||
214 | return false; | ||
215 | } | ||
216 | } | ||
217 | else if(mode == BOOTLOADER_REM) | ||
218 | { | ||
219 | path2 = path1; | ||
220 | path2.Append(".ORIG"); | ||
221 | if(!wxFileExists(path2)) | ||
222 | { | ||
223 | err.Printf("[ERR] Coud not find %s",path1.c_str()); | ||
224 | ERR_DIALOG(err, _("Bootloader del")); | ||
225 | return false; | ||
226 | } | ||
227 | if(!wxRenameFile(path2,path1,true)) | ||
228 | { | ||
229 | err.Printf("[ERR] Coud not rename %s to %s",path1.c_str(),path2.c_str()); | ||
230 | ERR_DIALOG(err, _("Bootloader del")); | ||
231 | return false; | ||
232 | } | ||
233 | } | ||
234 | return true; | ||
235 | } | ||
236 | |||
237 | // iaudio bootloader install | ||
238 | bool iaudiox5(int mode) | ||
239 | { | ||
240 | wxString path1,path2; | ||
241 | wxString err; | ||
242 | wxString src,dest; | ||
243 | |||
244 | path1.Printf("%s" PATH_SEP "FIRMWARE" PATH_SEP "%s",gv->curdestdir.c_str(),gv->curbootloader.c_str()); | ||
245 | |||
246 | if(mode == BOOTLOADER_ADD) | ||
247 | { | ||
248 | //Files downloaden | ||
249 | src.Printf("%s/iaudio/%s", gv->bootloader_url.c_str(),gv->curbootloader.c_str()); | ||
250 | dest.Printf("%s" PATH_SEP "download" PATH_SEP "%s", | ||
251 | gv->stdpaths->GetUserDataDir().c_str(),gv->curbootloader.c_str()); | ||
252 | if( DownloadURL(src, dest) ) | ||
253 | { | ||
254 | wxRemoveFile(dest); | ||
255 | err.Printf(_("Unable to download %s"), src.c_str() ); | ||
256 | ERR_DIALOG(err, _("Install")); | ||
257 | return false; | ||
258 | } | ||
259 | |||
260 | // copy file | ||
261 | if(!wxCopyFile(dest,path1)) | ||
262 | { | ||
263 | err.Printf("[ERR] Coud not copy %s to %s",dest.c_str(),path2.c_str()); | ||
264 | ERR_DIALOG(err, _("Bootloader add")); | ||
265 | return false; | ||
266 | } | ||
267 | |||
268 | return true; // install ready | ||
269 | } | ||
270 | else | ||
271 | return false; //no uninstallation possible | ||
272 | } | ||
273 | |||
274 | // H10 install | ||
275 | bool h10(int mode) | ||
276 | { | ||
277 | wxString err,src,dest,path1,path2; | ||
278 | |||
279 | int pos = gv->curbootloader.Find('/'); | ||
280 | wxString firmwarename = gv->curbootloader.SubString(pos,gv->curbootloader.Length()); | ||
281 | wxString firmDir = gv->curbootloader.SubString(0,pos); | ||
282 | |||
283 | if(mode == BOOTLOADER_ADD) | ||
284 | { | ||
285 | //Files downloaden | ||
286 | src.Printf("%s/iriver/%s", gv->bootloader_url.c_str(),gv->curbootloader.c_str()); | ||
287 | dest.Printf("%s" PATH_SEP "download" PATH_SEP "%s", | ||
288 | gv->stdpaths->GetUserDataDir().c_str(),firmwarename.c_str()); | ||
289 | if( DownloadURL(src, dest) ) | ||
290 | { | ||
291 | wxRemoveFile(dest); | ||
292 | err.Printf(_("Unable to download %s"), src.c_str() ); | ||
293 | ERR_DIALOG(err, _("Install")); | ||
294 | return false; | ||
295 | } | ||
296 | |||
297 | path1.Printf("%s" PATH_SEP "SYSTEM" PATH_SEP "%s",gv->curdestdir.c_str(),firmwarename.c_str()); | ||
298 | path2.Printf("%s" PATH_SEP "SYSTEM" PATH_SEP "Original.mi4",gv->curdestdir.c_str()); | ||
299 | |||
300 | if(!wxFileExists(path1)) //Firmware dosent exists on player | ||
301 | { | ||
302 | path1.Printf("%s" PATH_SEP "SYSTEM" PATH_SEP "H10EMP.mi4"); //attempt other firmwarename | ||
303 | if(!wxFileExists(path1)) //Firmware dosent exists on player | ||
304 | { | ||
305 | err.Printf("[ERR] File %s does not Exist",path1.c_str()); | ||
306 | ERR_DIALOG(err, _("Bootloader add")); | ||
307 | return false; | ||
308 | } | ||
309 | } | ||
310 | if(!wxFileExists(path2)) //there is already a original firmware | ||
311 | { | ||
312 | err.Printf("[ERR] File %s does not Exist",path1.c_str()); | ||
313 | ERR_DIALOG(err, _("Bootloader add")); | ||
314 | return false; | ||
315 | } | ||
316 | if(!wxRenameFile(path1,path2,false)) //rename Firmware to Original | ||
317 | { | ||
318 | err.Printf("[ERR] Coud not rename %s to %s",path1.c_str(),path2.c_str()); | ||
319 | ERR_DIALOG(err, _("Bootloader add")); | ||
320 | return false; | ||
321 | } | ||
322 | if(!wxCopyFile(dest,path1)) // copy file | ||
323 | { | ||
324 | err.Printf("[ERR] Coud not copy %s to %s",dest.c_str(),path1.c_str()); | ||
325 | ERR_DIALOG(err, _("Bootloader add")); | ||
326 | return false; | ||
327 | } | ||
328 | |||
329 | return true; //install ready | ||
330 | |||
331 | } | ||
332 | else if(mode == BOOTLOADER_REM) | ||
333 | { | ||
334 | path1.Printf("%s" PATH_SEP "SYSTEM" PATH_SEP "%s",gv->curdestdir.c_str(),firmwarename.c_str()); | ||
335 | path2.Printf("%s" PATH_SEP "SYSTEM" PATH_SEP "Original.mi4",gv->curdestdir.c_str()); | ||
336 | if(!wxFileExists(path1)) //Firmware dosent exists on player | ||
337 | { | ||
338 | path1.Printf("%s" PATH_SEP "SYSTEM" PATH_SEP "H10EMP.mi4"); //attempt other firmwarename | ||
339 | if(!wxFileExists(path1)) //Firmware dosent exists on player | ||
340 | { | ||
341 | err.Printf("[ERR] File %s does not Exist",path1.c_str()); | ||
342 | ERR_DIALOG(err, _("Bootloader rem")); | ||
343 | return false; | ||
344 | } | ||
345 | } | ||
346 | |||
347 | if(!wxFileExists(path2)) //Original Firmware dosent exists on player | ||
348 | { | ||
349 | err.Printf("[ERR] File %s does not Exist",path2.c_str()); | ||
350 | ERR_DIALOG(err, _("Bootloader rem")); | ||
351 | return false; | ||
352 | } | ||
353 | |||
354 | if(!wxRenameFile(path2,path1,true)) //rename Firmware to Original | ||
355 | { | ||
356 | err.Printf("[ERR] Coud not rename %s to %s",path2.c_str(),path1.c_str()); | ||
357 | ERR_DIALOG(err, _("Bootloader add")); | ||
358 | return false; | ||
359 | } | ||
360 | |||
361 | } | ||
362 | |||
363 | } | ||
364 | |||
365 | // FWPatcher | ||
366 | bool fwpatcher(int mode) | ||
367 | { | ||
368 | if(mode == BOOTLOADER_ADD) | ||
369 | { | ||
370 | wxString md5sum_str,src,dest,err; | ||
371 | int series,table_entry; | ||
372 | |||
373 | if (!FileMD5(gv->curfirmware, &md5sum_str)) { | ||
374 | ERR_DIALOG("Could not open firmware", _("Open Firmware")); | ||
375 | return false; | ||
376 | } | ||
377 | else { | ||
378 | /* Check firmware against md5sums in h120sums and h100sums */ | ||
379 | series = 0; | ||
380 | table_entry = intable(md5sum_str, &h120pairs[0], | ||
381 | sizeof(h120pairs)/sizeof(struct sumpairs)); | ||
382 | if (table_entry >= 0) { | ||
383 | series = 120; | ||
384 | } | ||
385 | else { | ||
386 | table_entry = intable(md5sum_str, &h100pairs[0], | ||
387 | sizeof(h100pairs)/sizeof(struct sumpairs)); | ||
388 | if (table_entry >= 0) { | ||
389 | series = 100; | ||
390 | } | ||
391 | else { | ||
392 | table_entry = | ||
393 | intable(md5sum_str, &h300pairs[0], | ||
394 | sizeof(h300pairs)/sizeof(struct sumpairs)); | ||
395 | if (table_entry >= 0) | ||
396 | series = 300; | ||
397 | } | ||
398 | } | ||
399 | if (series == 0) { | ||
400 | ERR_DIALOG("Could not detect firmware type", _("Detect Player out of Firmware")); | ||
401 | return false; | ||
402 | } | ||
403 | else | ||
404 | { | ||
405 | //Download bootloader | ||
406 | src.Printf("%s/iriver/%s", gv->bootloader_url.c_str(),gv->curbootloader.c_str()); | ||
407 | dest.Printf("%s" PATH_SEP "download" PATH_SEP "%s", | ||
408 | gv->stdpaths->GetUserDataDir().c_str(),gv->curbootloader.c_str()); | ||
409 | if( DownloadURL(src, dest) ) | ||
410 | { | ||
411 | wxRemoveFile(dest); | ||
412 | err.Printf(_("Unable to download %s"), src.c_str() ); | ||
413 | ERR_DIALOG(err, _("Install")); | ||
414 | return false; | ||
415 | } | ||
416 | |||
417 | if(!PatchFirmware(gv->curfirmware,dest,series, table_entry)) // Patch firmware | ||
418 | { | ||
419 | ERR_DIALOG("Patching Firmware failed", _("Patching Firmware")); | ||
420 | return false; | ||
421 | } | ||
422 | } | ||
423 | |||
424 | // Load patched Firmware to player | ||
425 | src.Printf("%s" PATH_SEP "download" PATH_SEP "new.hex", | ||
426 | gv->stdpaths->GetUserDataDir().c_str()); | ||
427 | |||
428 | if(gv->curplat == "h100") | ||
429 | dest.Printf("%s" PATH_SEP "ihp_100.hex",gv->curdestdir.c_str()); | ||
430 | else if(gv->curplat == "h120") | ||
431 | dest.Printf("%s" PATH_SEP "ihp_120.hex",gv->curdestdir.c_str()); | ||
432 | else if(gv->curplat == "h300") | ||
433 | dest.Printf("%s" PATH_SEP "H300.hex",gv->curdestdir.c_str()); | ||
434 | |||
435 | if(!wxRenameFile(src,dest)) | ||
436 | { | ||
437 | ERR_DIALOG("Copying Firmware to Device failed", _("Copying Firmware")); | ||
438 | return false; | ||
439 | } | ||
440 | else | ||
441 | { | ||
442 | return true; | ||
443 | } | ||
444 | |||
445 | } | ||
446 | |||
447 | } | ||
448 | else | ||
449 | { | ||
450 | return false; //no uninstall possible | ||
451 | } | ||
452 | } | ||
diff --git a/rbutil/bootloaders.h b/rbutil/bootloaders.h new file mode 100755 index 0000000000..53569e34da --- /dev/null +++ b/rbutil/bootloaders.h | |||
@@ -0,0 +1,41 @@ | |||
1 | /*************************************************************************** | ||
2 | * __________ __ ___. | ||
3 | * Open \______ \ ____ ____ | | _\_ |__ _______ ___ | ||
4 | * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / | ||
5 | * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < | ||
6 | * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ | ||
7 | * \/ \/ \/ \/ \/ | ||
8 | * Module: rbutil | ||
9 | * File: bootloaders.h | ||
10 | * | ||
11 | * Copyright (C) 2007 Dominik Wenger | ||
12 | * | ||
13 | * All files in this archive are subject to the GNU General Public License. | ||
14 | * See the file COPYING in the source tree root for full license agreement. | ||
15 | * | ||
16 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | ||
17 | * KIND, either express or implied. | ||
18 | * | ||
19 | ****************************************************************************/ | ||
20 | |||
21 | |||
22 | |||
23 | #ifndef BOOTLOADERS_H_INCLUDED | ||
24 | #define BOOTLOADERS_H_INCLUDED | ||
25 | |||
26 | |||
27 | extern "C" { | ||
28 | // Ipodpatcher | ||
29 | #include "ipodpatcher/ipodpatcher.h" | ||
30 | }; | ||
31 | |||
32 | |||
33 | bool initIpodpatcher(); | ||
34 | bool ipodpatcher(int mode); | ||
35 | bool gigabeatf(int mode); | ||
36 | bool iaudiox5(int mode); | ||
37 | bool fwpatcher(int mode); | ||
38 | bool h10(int mode); | ||
39 | |||
40 | |||
41 | #endif // BOOTLOADERS_H_INCLUDED | ||
diff --git a/rbutil/credits.h b/rbutil/credits.h index 867661b067..39f8389621 100644 --- a/rbutil/credits.h +++ b/rbutil/credits.h | |||
@@ -27,6 +27,7 @@ | |||
27 | static const char* rbutil_developers[] = { | 27 | static const char* rbutil_developers[] = { |
28 | "Christi Alice Scarborough", | 28 | "Christi Alice Scarborough", |
29 | "Dave Chapman", | 29 | "Dave Chapman", |
30 | "Dominik Wenger", | ||
30 | "" | 31 | "" |
31 | }; | 32 | }; |
32 | 33 | ||
diff --git a/rbutil/h100sums.h b/rbutil/h100sums.h new file mode 100755 index 0000000000..ebbdcc28db --- /dev/null +++ b/rbutil/h100sums.h | |||
@@ -0,0 +1,23 @@ | |||
1 | /* Checksums of firmwares for ihp_100 */ | ||
2 | /* order: unpatched, patched */ | ||
3 | |||
4 | /* 1.63eu */ | ||
5 | {"86103cb05658970b43ce1f40f93d53a8", "4938420d83aa6da3764d33e5a008c8d4"}, | ||
6 | /* 1.63k */ | ||
7 | {"70127fa9ee69afab7645297fbb61636d", "044b737ddb74436353e290d3fbcc3333"}, | ||
8 | /* 1.63us */ | ||
9 | {"7a504a450c76a0dda757fdb6b5531b22", "e51883ed89d49f5677b0a976aef7b154"}, | ||
10 | /* 1.65eu */ | ||
11 | {"478dc657b97e77d1b4944ef26c3dcb8e", "528917d9e5b34a3e5bcac8fe1f4bd7a9"}, | ||
12 | /* 1.65k */ | ||
13 | {"97ba82fb8099bb23ca0c78fc119f8cce", "ef24f69a679e5eba2216045cb24d8b15"}, | ||
14 | /* 1.65us */ | ||
15 | {"d3725865e0948cd5f604b00db2ec89aa", "76d83812b9e1856f768ba913eeba44e1"}, | ||
16 | /* 1.66eu */ | ||
17 | {"fc59f742fe383da3e4d17a660c46afb9", "2aa9d16d3e166a7575fc652db8588daa"}, | ||
18 | /* 1.66k */ | ||
19 | {"22d214401994c276ec6878288caa0dba", "a87dbe604ea98d035450a34b6e184a08"}, | ||
20 | /* 1.66us */ | ||
21 | {"0ae247f567aeafcafecf823a50cbf33e", "f7668e8949f1a78e8ecd685db78b6824"}, | ||
22 | /* 1.66jp */ | ||
23 | {"8bfc8ae5805c270597232efeafade5fd", "72613b75c5196f63e99e41b7a88d7241"}, | ||
diff --git a/rbutil/h120sums.h b/rbutil/h120sums.h new file mode 100755 index 0000000000..09da891ae1 --- /dev/null +++ b/rbutil/h120sums.h | |||
@@ -0,0 +1,23 @@ | |||
1 | /* Checksums of firmwares for ihp_120 */ | ||
2 | /* order: unpatched, patched */ | ||
3 | |||
4 | /* 1.63eu */ | ||
5 | {"14488347a171480c63c94bc7b885225d", "15f09130a1aa02c25f820e8cc68259a4"}, | ||
6 | /* 1.63k */ | ||
7 | {"3401fe8845e569156abfaddf05ca7771", "55e4cb20e36f4da06ad80b31aaaa3054"}, | ||
8 | /* 1.63us */ | ||
9 | {"d9078209105c186cee5246055fdb99c9", "dbdd012a3d821d26f907879cca71e9f4"}, | ||
10 | /* 1.65eu */ | ||
11 | {"c9e71aac4a498f1e2f0e684c2d554ea1", "43454df30c176e55d0df7e3c48e67785"}, | ||
12 | /* 1.65k */ | ||
13 | {"360c0c565266f84e9bca610c596f3207", "d8cb7d9f586186bf9780ee761fc8a677"}, | ||
14 | /* 1.65us */ | ||
15 | {"b9e516d4b8a0265605f46f254897bfb0", "99c5666e990dc782b9daefcb1a087ec0"}, | ||
16 | /* 1.66eu */ | ||
17 | {"a094999b41781f4322a57b9be7fa4534", "e26d2574f39cee0adcdd54fb9f316293"}, | ||
18 | /* 1.66k */ | ||
19 | {"79daba973bb31b60b4b87c2ef497587d", "e76121ba9efe72ecfbb6392eaefe6d96"}, | ||
20 | /* 1.66us */ | ||
21 | {"7fa020a3104c76fbbfcb8313e287dbe2", "12194678a2fdd0814d2e0bb57c8e8e6e"}, | ||
22 | /* 1.66jp */ | ||
23 | {"271d151eb6586929da24b3458ea965fe", "51716393ea0605d225e70a6be29dfdbd"}, | ||
diff --git a/rbutil/h300sums.h b/rbutil/h300sums.h new file mode 100755 index 0000000000..1c6581a6d1 --- /dev/null +++ b/rbutil/h300sums.h | |||
@@ -0,0 +1,17 @@ | |||
1 | /* Checksums of firmwares for ihp_300 */ | ||
2 | /* order: unpatched, patched */ | ||
3 | |||
4 | /* 1.28eu */ | ||
5 | {"0b2083d37f24899b82d21a14d2b38060", "9cd7e291a66f55335c619d63f3a7634b"}, | ||
6 | /* 1.28k */ | ||
7 | {"c6f854ae3d8f48e8982819a4b5302fb0", "90967247ba3f1bcb257432a4d78553bf"}, | ||
8 | /* 1.28jp */ | ||
9 | {"7fcd7bca6b98a34134e2518a616f4e85", "cfd22c20e473727148f11f83d0028fb3"}, | ||
10 | /* 1.29eu */ | ||
11 | {"27d90fc316709c096979ab24c914ee31", "5982302507d57c2a96e9480c242b5de0"}, | ||
12 | /* 1.29k */ | ||
13 | {"44416d97737fc47cd417a64d44064768", "1303e22ef5b1af866aa4def03d6c5f5a"}, | ||
14 | /* 1.29jp */ | ||
15 | {"1ac242c645572a0a5de99ae2b23453b8", "ce433c404ff7531f5852ce3cb61143ee"}, | ||
16 | /* 1.30eu */ | ||
17 | {"8d2d775b018f0532235d38f5317ae10c", "7fb49041294b3e6aea3894218d6d64cf"}, | ||
diff --git a/rbutil/irivertools.cpp b/rbutil/irivertools.cpp new file mode 100755 index 0000000000..f04db6417a --- /dev/null +++ b/rbutil/irivertools.cpp | |||
@@ -0,0 +1,613 @@ | |||
1 | /*************************************************************************** | ||
2 | * __________ __ ___. | ||
3 | * Open \______ \ ____ ____ | | _\_ |__ _______ ___ | ||
4 | * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / | ||
5 | * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < | ||
6 | * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ | ||
7 | * \/ \/ \/ \/ \/ | ||
8 | * Module: rbutil | ||
9 | * File: irivertools.cpp | ||
10 | * | ||
11 | * Copyright (C) 2007 Dominik Wenger | ||
12 | * | ||
13 | * All files in this archive are subject to the GNU General Public License. | ||
14 | * See the file COPYING in the source tree root for full license agreement. | ||
15 | * | ||
16 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | ||
17 | * KIND, either express or implied. | ||
18 | * | ||
19 | ****************************************************************************/ | ||
20 | |||
21 | #include "irivertools.h" | ||
22 | #include "md5sum.h" | ||
23 | |||
24 | |||
25 | const unsigned char munge[] = { | ||
26 | 0x7a, 0x36, 0xc4, 0x43, 0x49, 0x6b, 0x35, 0x4e, 0xa3, 0x46, 0x25, 0x84, | ||
27 | 0x4d, 0x73, 0x74, 0x61 | ||
28 | }; | ||
29 | |||
30 | const unsigned char header_modify[] = "* IHPFIRM-DECODED "; | ||
31 | |||
32 | const char * const models[] = { "iHP-100", "iHP-120/iHP-140", "H300 series", | ||
33 | NULL }; | ||
34 | |||
35 | /* aligns with models array; expected min firmware size */ | ||
36 | const unsigned int firmware_minsize[] = { 0x100000, 0x100000, 0x200000 }; | ||
37 | /* aligns with models array; expected max firmware size */ | ||
38 | const unsigned int firmware_maxsize[] = { 0x200000, 0x200000, 0x400000 }; | ||
39 | |||
40 | const unsigned char header[][16] = { | ||
41 | { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }, | ||
42 | { 0x20, 0x03, 0x08, 0x27, 0x24, 0x00, 0x02, 0x30, 0x19, 0x17, 0x65, 0x73, | ||
43 | 0x85, 0x32, 0x83, 0x22 }, | ||
44 | { 0x20, 0x04, 0x03, 0x27, 0x20, 0x50, 0x01, 0x70, 0x80, 0x30, 0x80, 0x06, | ||
45 | 0x30, 0x19, 0x17, 0x65 } | ||
46 | }; | ||
47 | |||
48 | /* begin mkboot.c excerpt */ | ||
49 | unsigned char image[0x400000 + 0x220 + 0x400000/0x200]; | ||
50 | |||
51 | bool mkboot(wxString infile, wxString outfile,wxString bootloader,int origin) | ||
52 | { | ||
53 | wxString err; | ||
54 | int i; | ||
55 | int len,bllen; | ||
56 | int actual_length, total_length, binary_length, num_chksums; | ||
57 | |||
58 | memset(image, 0xff, sizeof(image)); | ||
59 | |||
60 | /* First, read the iriver original firmware into the image */ | ||
61 | wxFile f; | ||
62 | if(!f.Open(infile)) | ||
63 | { | ||
64 | err.Printf("Could not open: %s",infile.c_str()); | ||
65 | ERR_DIALOG(err, _("mkboot")); | ||
66 | return false; | ||
67 | } | ||
68 | i = f.Read(image,16); | ||
69 | if(i < 16) { | ||
70 | ERR_DIALOG("reading header failed", _("mkboot")); | ||
71 | return false; | ||
72 | } | ||
73 | |||
74 | /* This is the length of the binary image without the scrambling | ||
75 | overhead (but including the ESTFBINR header) */ | ||
76 | binary_length = image[4] + (image[5] << 8) + | ||
77 | (image[6] << 16) + (image[7] << 24); | ||
78 | |||
79 | /* Read the rest of the binary data, but not the checksum block */ | ||
80 | len = binary_length+0x200-16; | ||
81 | i = f.Read(image+16, len); | ||
82 | if(i < len) { | ||
83 | ERR_DIALOG("reading firmware failed", _("mkboot")); | ||
84 | return false; | ||
85 | } | ||
86 | |||
87 | f.Close(); | ||
88 | /* Now, read the boot loader into the image */ | ||
89 | if(!f.Open(bootloader)) | ||
90 | { | ||
91 | err.Printf("Could not open: %s",bootloader.c_str()); | ||
92 | ERR_DIALOG(err, _("mkboot")); | ||
93 | return false; | ||
94 | } | ||
95 | |||
96 | bllen = f.Length(); | ||
97 | |||
98 | i = f.Read(image+0x220 + origin, bllen); | ||
99 | if(i < bllen) { | ||
100 | ERR_DIALOG("reading bootloader failed", _("mkboot")); | ||
101 | return false; | ||
102 | } | ||
103 | |||
104 | f.Close(); | ||
105 | |||
106 | if(!f.Open(outfile,wxFile::write)) | ||
107 | { | ||
108 | err.Printf("Could not open: %s",outfile.c_str()); | ||
109 | ERR_DIALOG(err, _("mkboot")); | ||
110 | return false; | ||
111 | } | ||
112 | |||
113 | /* Patch the reset vector to start the boot loader */ | ||
114 | image[0x220 + 4] = image[origin + 0x220 + 4]; | ||
115 | image[0x220 + 5] = image[origin + 0x220 + 5]; | ||
116 | image[0x220 + 6] = image[origin + 0x220 + 6]; | ||
117 | image[0x220 + 7] = image[origin + 0x220 + 7]; | ||
118 | |||
119 | /* This is the actual length of the binary, excluding all headers */ | ||
120 | actual_length = origin + bllen; | ||
121 | |||
122 | /* Patch the ESTFBINR header */ | ||
123 | image[0x20c] = (actual_length >> 24) & 0xff; | ||
124 | image[0x20d] = (actual_length >> 16) & 0xff; | ||
125 | image[0x20e] = (actual_length >> 8) & 0xff; | ||
126 | image[0x20f] = actual_length & 0xff; | ||
127 | |||
128 | image[0x21c] = (actual_length >> 24) & 0xff; | ||
129 | image[0x21d] = (actual_length >> 16) & 0xff; | ||
130 | image[0x21e] = (actual_length >> 8) & 0xff; | ||
131 | image[0x21f] = actual_length & 0xff; | ||
132 | |||
133 | /* This is the length of the binary, including the ESTFBINR header and | ||
134 | rounded up to the nearest 0x200 boundary */ | ||
135 | binary_length = (actual_length + 0x20 + 0x1ff) & 0xfffffe00; | ||
136 | |||
137 | /* The number of checksums, i.e number of 0x200 byte blocks */ | ||
138 | num_chksums = binary_length / 0x200; | ||
139 | |||
140 | /* The total file length, including all headers and checksums */ | ||
141 | total_length = binary_length + num_chksums + 0x200; | ||
142 | |||
143 | /* Patch the scrambler header with the new length info */ | ||
144 | image[0] = total_length & 0xff; | ||
145 | image[1] = (total_length >> 8) & 0xff; | ||
146 | image[2] = (total_length >> 16) & 0xff; | ||
147 | image[3] = (total_length >> 24) & 0xff; | ||
148 | |||
149 | image[4] = binary_length & 0xff; | ||
150 | image[5] = (binary_length >> 8) & 0xff; | ||
151 | image[6] = (binary_length >> 16) & 0xff; | ||
152 | image[7] = (binary_length >> 24) & 0xff; | ||
153 | |||
154 | image[8] = num_chksums & 0xff; | ||
155 | image[9] = (num_chksums >> 8) & 0xff; | ||
156 | image[10] = (num_chksums >> 16) & 0xff; | ||
157 | image[11] = (num_chksums >> 24) & 0xff; | ||
158 | |||
159 | i = f.Write(image,total_length); | ||
160 | if(i < total_length) { | ||
161 | ERR_DIALOG("writing bootloader failed", _("mkboot")); | ||
162 | return false; | ||
163 | } | ||
164 | |||
165 | f.Close(); | ||
166 | |||
167 | return true; | ||
168 | } | ||
169 | |||
170 | /* end mkboot.c excerpt */ | ||
171 | |||
172 | |||
173 | int intable(wxString md5, struct sumpairs *table, int len) | ||
174 | { | ||
175 | int i; | ||
176 | for (i = 0; i < len; i++) { | ||
177 | if (md5.Cmp(table[i].unpatched) == 0) { | ||
178 | return i; | ||
179 | } | ||
180 | } | ||
181 | return -1; | ||
182 | } | ||
183 | |||
184 | |||
185 | |||
186 | |||
187 | static int testheader( const unsigned char * const data ) | ||
188 | { | ||
189 | const unsigned char * const d = data+16; | ||
190 | const char * const * m = models; | ||
191 | int index = 0; | ||
192 | while( *m ) | ||
193 | { | ||
194 | if( memcmp( header[ index ], d, 16 ) == 0 ) | ||
195 | return index; | ||
196 | index++; | ||
197 | m++; | ||
198 | }; | ||
199 | return -1; | ||
200 | }; | ||
201 | |||
202 | static void modifyheader( unsigned char * data ) | ||
203 | { | ||
204 | const unsigned char * h = header_modify; | ||
205 | int i; | ||
206 | for( i=0; i<512; i++ ) | ||
207 | { | ||
208 | if( *h == '\0' ) | ||
209 | h = header_modify; | ||
210 | *data++ ^= *h++; | ||
211 | }; | ||
212 | }; | ||
213 | |||
214 | int iriver_decode(wxString infile_name, wxString outfile_name, unsigned int modify, | ||
215 | enum striptype stripmode ) | ||
216 | { | ||
217 | wxString err; | ||
218 | wxFile infile; | ||
219 | wxFile outfile; | ||
220 | int i = -1; | ||
221 | unsigned char headerdata[512]; | ||
222 | unsigned long dwLength1, dwLength2, dwLength3, fp = 0; | ||
223 | unsigned char blockdata[16+16]; | ||
224 | unsigned char out[16]; | ||
225 | unsigned char newmunge; | ||
226 | signed long lenread; | ||
227 | int s = 0; | ||
228 | unsigned char * pChecksums, * ppChecksums = 0; | ||
229 | unsigned char ck; | ||
230 | |||
231 | if(!infile.Open(infile_name)) | ||
232 | { | ||
233 | err.Printf("Could not open: %s",infile_name.c_str()); | ||
234 | ERR_DIALOG(err, _("iriver_decode")); | ||
235 | return -1; | ||
236 | } | ||
237 | if(!outfile.Open(outfile_name,wxFile::write)) | ||
238 | { | ||
239 | err.Printf("Could not open: %s",outfile_name.c_str()); | ||
240 | ERR_DIALOG(err, _("iriver_decode")); | ||
241 | return -1; | ||
242 | } | ||
243 | lenread = infile.Read( headerdata, 512); | ||
244 | if( lenread != 512 ) | ||
245 | { | ||
246 | ERR_DIALOG(_("This doesn't look like a valid encrypted iHP " | ||
247 | "firmware - reason: header length\n"),_("iriver_decode")); | ||
248 | |||
249 | infile.Close(); | ||
250 | outfile.Close(); | ||
251 | return -1; | ||
252 | }; | ||
253 | |||
254 | i = testheader( headerdata ); | ||
255 | if( i == -1 ) | ||
256 | { | ||
257 | ERR_DIALOG( _( "This firmware is for an unknown model, or is not" | ||
258 | " a valid encrypted iHP firmware\n" ),_("iriver_decode")); | ||
259 | infile.Close(); | ||
260 | outfile.Close(); | ||
261 | return -1; | ||
262 | }; | ||
263 | fprintf( stderr, "Model %s\n", models[ i ] ); | ||
264 | |||
265 | dwLength1 = headerdata[0] | (headerdata[1]<<8) | | ||
266 | (headerdata[2]<<16) | (headerdata[3]<<24); | ||
267 | dwLength2 = headerdata[4] | (headerdata[5]<<8) | | ||
268 | (headerdata[6]<<16) | (headerdata[7]<<24); | ||
269 | dwLength3 = headerdata[8] | (headerdata[9]<<8) | | ||
270 | (headerdata[10]<<16) | (headerdata[11]<<24); | ||
271 | |||
272 | if( dwLength1 < firmware_minsize[ i ] || | ||
273 | dwLength1 > firmware_maxsize[ i ] || | ||
274 | dwLength2 < firmware_minsize[ i ] || | ||
275 | dwLength2 > dwLength1 || | ||
276 | dwLength3 > dwLength1 || | ||
277 | dwLength2>>9 != dwLength3 || | ||
278 | dwLength2+dwLength3+512 != dwLength1 ) | ||
279 | { | ||
280 | ERR_DIALOG( _( "This doesn't look like a valid encrypted " | ||
281 | "iHP firmware - reason: file 'length' data\n" ),_("iriver_decode")); | ||
282 | infile.Close(); | ||
283 | outfile.Close(); | ||
284 | return -1; | ||
285 | }; | ||
286 | |||
287 | pChecksums = ppChecksums = (unsigned char *)( malloc( dwLength3 ) ); | ||
288 | |||
289 | if( modify ) | ||
290 | { | ||
291 | modifyheader( headerdata ); | ||
292 | }; | ||
293 | |||
294 | if( stripmode == STRIP_NONE ) | ||
295 | outfile.Write( headerdata, 512); | ||
296 | |||
297 | memset( blockdata, 0, 16 ); | ||
298 | |||
299 | ck = 0; | ||
300 | while( ( fp < dwLength2 ) && | ||
301 | ( lenread = infile.Read( blockdata+16, 16) == 16) ) | ||
302 | { | ||
303 | fp += 16; | ||
304 | |||
305 | for( i=0; i<16; ++i ) | ||
306 | { | ||
307 | newmunge = blockdata[16+i] ^ munge[i]; | ||
308 | out[i] = newmunge ^ blockdata[i]; | ||
309 | blockdata[i] = newmunge; | ||
310 | ck += out[i]; | ||
311 | } | ||
312 | |||
313 | if( fp > ESTF_SIZE || stripmode != STRIP_HEADER_CHECKSUM_ESTF ) | ||
314 | { | ||
315 | outfile.Write( out+4, 12); | ||
316 | outfile.Write( out, 4); | ||
317 | } | ||
318 | else | ||
319 | { | ||
320 | if( ESTF_SIZE - fp < 16 ) | ||
321 | { | ||
322 | memcpy( out+4, blockdata+16, 12 ); | ||
323 | memcpy( out, blockdata+28, 4 ); | ||
324 | outfile.Write( blockdata+16+ESTF_SIZE-fp, ESTF_SIZE-fp); | ||
325 | } | ||
326 | } | ||
327 | |||
328 | |||
329 | if( s == 496 ) | ||
330 | { | ||
331 | s = 0; | ||
332 | memset( blockdata, 0, 16 ); | ||
333 | *ppChecksums++ = ck; | ||
334 | ck = 0; | ||
335 | } | ||
336 | else | ||
337 | s+=16; | ||
338 | }; | ||
339 | |||
340 | if( fp != dwLength2 ) | ||
341 | { | ||
342 | ERR_DIALOG( _( "This doesn't look like a valid encrypted " | ||
343 | "iHP firmware - reason: 'length2' mismatch\n" ),_("iriver_decode")); | ||
344 | infile.Close(); | ||
345 | outfile.Close(); | ||
346 | return -1; | ||
347 | }; | ||
348 | |||
349 | fp = 0; | ||
350 | ppChecksums = pChecksums; | ||
351 | while( ( fp < dwLength3 ) && | ||
352 | ( lenread = infile.Read( blockdata, 32 ) ) > 0 ) | ||
353 | { | ||
354 | fp += lenread; | ||
355 | if( stripmode == STRIP_NONE ) | ||
356 | outfile.Write( blockdata, lenread ); | ||
357 | if( memcmp( ppChecksums, blockdata, lenread ) != 0 ) | ||
358 | { | ||
359 | ERR_DIALOG( _( "This doesn't look like a valid encrypted " | ||
360 | "iHP firmware - reason: Checksum mismatch!" ),_("iriver_decode")); | ||
361 | infile.Close(); | ||
362 | outfile.Close(); | ||
363 | return -1; | ||
364 | }; | ||
365 | ppChecksums += lenread; | ||
366 | }; | ||
367 | |||
368 | if( fp != dwLength3 ) | ||
369 | { | ||
370 | ERR_DIALOG(_( "This doesn't look like a valid encrypted " | ||
371 | "iHP firmware - reason: 'length3' mismatch\n" ),_("iriver_decode")); | ||
372 | infile.Close(); | ||
373 | outfile.Close(); | ||
374 | return -1; | ||
375 | }; | ||
376 | |||
377 | |||
378 | fprintf( stderr, "File decoded correctly and all checksums matched!\n" ); | ||
379 | switch( stripmode ) | ||
380 | { | ||
381 | default: | ||
382 | case STRIP_NONE: | ||
383 | fprintf(stderr, "Output file contains all headers and " | ||
384 | "checksums\n"); | ||
385 | break; | ||
386 | case STRIP_HEADER_CHECKSUM: | ||
387 | fprintf( stderr, "NB: output file contains only ESTFBINR header" | ||
388 | " and decoded firmware code\n" ); | ||
389 | break; | ||
390 | case STRIP_HEADER_CHECKSUM_ESTF: | ||
391 | fprintf( stderr, "NB: output file contains only raw decoded " | ||
392 | "firmware code\n" ); | ||
393 | break; | ||
394 | }; | ||
395 | |||
396 | infile.Close(); | ||
397 | outfile.Close(); | ||
398 | return 0; | ||
399 | |||
400 | }; | ||
401 | |||
402 | int iriver_encode(wxString infile_name, wxString outfile_name, unsigned int modify ) | ||
403 | { | ||
404 | wxString err; | ||
405 | wxFile infile; | ||
406 | wxFile outfile; | ||
407 | int i = -1; | ||
408 | unsigned char headerdata[512]; | ||
409 | unsigned long dwLength1, dwLength2, dwLength3, fp = 0; | ||
410 | unsigned char blockdata[16+16]; | ||
411 | unsigned char out[16]; | ||
412 | unsigned char newmunge; | ||
413 | signed long lenread; | ||
414 | int s = 0; | ||
415 | unsigned char * pChecksums, * ppChecksums; | ||
416 | unsigned char ck; | ||
417 | |||
418 | enum striptype stripmode = STRIP_NONE; | ||
419 | |||
420 | if(!infile.Open(infile_name,wxFile::read)) | ||
421 | { | ||
422 | err.Printf("Could not open: %s",infile_name.c_str()); | ||
423 | ERR_DIALOG(err, _("iriver_decode")); | ||
424 | return -1; | ||
425 | } | ||
426 | if(!outfile.Open(outfile_name,wxFile::write)) | ||
427 | { | ||
428 | err.Printf("Could not open: %s",outfile_name.c_str()); | ||
429 | ERR_DIALOG(err, _("iriver_decode")); | ||
430 | return -1; | ||
431 | } | ||
432 | |||
433 | lenread = infile.Read( headerdata, 512 ); | ||
434 | if( lenread != 512 ) | ||
435 | { | ||
436 | ERR_DIALOG("This doesn't look like a valid decoded " | ||
437 | "iHP firmware - reason: header length\n", _("iriver_decode")); | ||
438 | infile.Close(); | ||
439 | outfile.Close(); | ||
440 | }; | ||
441 | |||
442 | if( modify ) | ||
443 | { | ||
444 | modifyheader( headerdata ); /* reversible */ | ||
445 | }; | ||
446 | |||
447 | i = testheader( headerdata ); | ||
448 | if( i == -1 ) | ||
449 | { | ||
450 | ERR_DIALOG("This firmware is for an unknown model, or is not" | ||
451 | " a valid decoded iHP firmware\n", _("iriver_decode")); | ||
452 | infile.Close(); | ||
453 | outfile.Close(); | ||
454 | }; | ||
455 | fprintf( stderr, "Model %s\n", models[ i ] ); | ||
456 | |||
457 | dwLength1 = headerdata[0] | (headerdata[1]<<8) | | ||
458 | (headerdata[2]<<16) | (headerdata[3]<<24); | ||
459 | dwLength2 = headerdata[4] | (headerdata[5]<<8) | | ||
460 | (headerdata[6]<<16) | (headerdata[7]<<24); | ||
461 | dwLength3 = headerdata[8] | (headerdata[9]<<8) | | ||
462 | (headerdata[10]<<16) | (headerdata[11]<<24); | ||
463 | |||
464 | if( dwLength1 < firmware_minsize[i] || | ||
465 | dwLength1 > firmware_maxsize[i] || | ||
466 | dwLength2 < firmware_minsize[i] || | ||
467 | dwLength2 > dwLength1 || | ||
468 | dwLength3 > dwLength1 || | ||
469 | dwLength2+dwLength3+512 != dwLength1 ) | ||
470 | { | ||
471 | ERR_DIALOG("This doesn't look like a valid decoded iHP" | ||
472 | " firmware - reason: file 'length' data\n", _("iriver_decode")); | ||
473 | infile.Close(); | ||
474 | outfile.Close(); | ||
475 | }; | ||
476 | |||
477 | pChecksums = ppChecksums = (unsigned char *)( malloc( dwLength3 ) ); | ||
478 | |||
479 | outfile.Write( headerdata, 512); | ||
480 | |||
481 | memset( blockdata, 0, 16 ); | ||
482 | ck = 0; | ||
483 | while( ( fp < dwLength2 ) && | ||
484 | ( lenread = infile.Read( blockdata+16, 16) ) == 16 ) | ||
485 | { | ||
486 | fp += 16; | ||
487 | for( i=0; i<16; ++i ) | ||
488 | { | ||
489 | newmunge = blockdata[16+((12+i)&0xf)] ^ blockdata[i]; | ||
490 | out[i] = newmunge ^ munge[i]; | ||
491 | ck += blockdata[16+i]; | ||
492 | blockdata[i] = newmunge; | ||
493 | }; | ||
494 | outfile.Write( out, 16); | ||
495 | |||
496 | if( s == 496 ) | ||
497 | { | ||
498 | s = 0; | ||
499 | memset( blockdata, 0, 16 ); | ||
500 | *ppChecksums++ = ck; | ||
501 | ck = 0; | ||
502 | } | ||
503 | else | ||
504 | s+=16; | ||
505 | }; | ||
506 | |||
507 | if( fp != dwLength2 ) | ||
508 | { | ||
509 | ERR_DIALOG("This doesn't look like a valid decoded " | ||
510 | "iHP firmware - reason: 'length1' mismatch\n", _("iriver_decode")); | ||
511 | infile.Close(); | ||
512 | outfile.Close(); | ||
513 | }; | ||
514 | |||
515 | /* write out remainder w/out applying descrambler */ | ||
516 | fp = 0; | ||
517 | lenread = dwLength3; | ||
518 | ppChecksums = pChecksums; | ||
519 | while( ( fp < dwLength3) && | ||
520 | ( lenread = outfile.Write( ppChecksums, lenread) ) > 0 ) | ||
521 | { | ||
522 | fp += lenread; | ||
523 | ppChecksums += lenread; | ||
524 | lenread = dwLength3 - fp; | ||
525 | }; | ||
526 | |||
527 | if( fp != dwLength3 ) | ||
528 | { | ||
529 | ERR_DIALOG("This doesn't look like a valid decoded " | ||
530 | "iHP firmware - reason: 'length2' mismatch\n", _("iriver_decode")); | ||
531 | infile.Close(); | ||
532 | outfile.Close(); | ||
533 | }; | ||
534 | |||
535 | fprintf( stderr, "File encoded successfully and checksum table built!\n" ); | ||
536 | |||
537 | infile.Close(); | ||
538 | outfile.Close(); | ||
539 | return 0; | ||
540 | |||
541 | }; | ||
542 | |||
543 | bool PatchFirmware(wxString firmware,wxString bootloader,int series, int table_entry) | ||
544 | { | ||
545 | wxString name1, name2, name3; | ||
546 | |||
547 | wxString md5sum_str; | ||
548 | int i; | ||
549 | struct sumpairs *sums; | ||
550 | int origin; | ||
551 | |||
552 | /* get pointer to the correct bootloader.bin */ | ||
553 | switch(series) { | ||
554 | case 100: | ||
555 | sums = &h100pairs[0]; | ||
556 | origin = 0x1f0000; | ||
557 | break; | ||
558 | case 120: | ||
559 | sums = &h120pairs[0]; | ||
560 | origin = 0x1f0000; | ||
561 | break; | ||
562 | case 300: | ||
563 | sums = &h300pairs[0]; | ||
564 | origin = 0x3f0000; | ||
565 | break; | ||
566 | } | ||
567 | |||
568 | name1.Printf("%s" PATH_SEP "download" PATH_SEP "firmware.bin", | ||
569 | gv->stdpaths->GetUserDataDir().c_str()); | ||
570 | /* descrambled file */ | ||
571 | name2.Printf("%s" PATH_SEP "download" PATH_SEP "new.bin", | ||
572 | gv->stdpaths->GetUserDataDir().c_str()); | ||
573 | /* patched file */ | ||
574 | name3.Printf("%s" PATH_SEP "download" PATH_SEP "new.hex", | ||
575 | gv->stdpaths->GetUserDataDir().c_str()); | ||
576 | if (iriver_decode(firmware, name1, FALSE, STRIP_NONE) == -1) { | ||
577 | ERR_DIALOG("Error in descramble", _("Descramble Firmware")); | ||
578 | wxRemoveFile(name1); | ||
579 | wxRemoveFile(name2); | ||
580 | wxRemoveFile(name3); | ||
581 | return false; | ||
582 | } | ||
583 | if (!mkboot(name1, name2, bootloader, origin)) { | ||
584 | ERR_DIALOG("Error in patching",_("Patching Firmware")); | ||
585 | wxRemoveFile(name1); | ||
586 | wxRemoveFile(name2); | ||
587 | wxRemoveFile(name3); | ||
588 | return false; | ||
589 | } | ||
590 | if (iriver_encode(name2, name3, FALSE) == -1) { | ||
591 | ERR_DIALOG("Error in scramble",_("Scramble Firmware")); | ||
592 | wxRemoveFile(name1); | ||
593 | wxRemoveFile(name2); | ||
594 | wxRemoveFile(name3); | ||
595 | return false; | ||
596 | } | ||
597 | /* now md5sum it */ | ||
598 | if (!FileMD5(name3, &md5sum_str)) { | ||
599 | ERR_DIALOG("Error in checksumming",_("Checksumming Firmware")); | ||
600 | wxRemoveFile(name1); | ||
601 | wxRemoveFile(name2); | ||
602 | wxRemoveFile(name3); | ||
603 | return false; | ||
604 | } | ||
605 | if (strncmp(sums[table_entry].patched, md5sum_str.c_str(), 32) == 0) { | ||
606 | /* delete temp files */ | ||
607 | wxRemoveFile(name1); | ||
608 | wxRemoveFile(name2); | ||
609 | } | ||
610 | |||
611 | return true; | ||
612 | } | ||
613 | |||
diff --git a/rbutil/irivertools.h b/rbutil/irivertools.h new file mode 100755 index 0000000000..deae3f4006 --- /dev/null +++ b/rbutil/irivertools.h | |||
@@ -0,0 +1,65 @@ | |||
1 | /*************************************************************************** | ||
2 | * __________ __ ___. | ||
3 | * Open \______ \ ____ ____ | | _\_ |__ _______ ___ | ||
4 | * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / | ||
5 | * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < | ||
6 | * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ | ||
7 | * \/ \/ \/ \/ \/ | ||
8 | * Module: rbutil | ||
9 | * File: irivertools.h | ||
10 | * | ||
11 | * Copyright (C) 2007 Dominik Wenger | ||
12 | * | ||
13 | * All files in this archive are subject to the GNU General Public License. | ||
14 | * See the file COPYING in the source tree root for full license agreement. | ||
15 | * | ||
16 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | ||
17 | * KIND, either express or implied. | ||
18 | * | ||
19 | ****************************************************************************/ | ||
20 | |||
21 | |||
22 | #ifndef IRIVERTOOLS_H_INCLUDED | ||
23 | #define IRIVERTOOLS_H_INCLUDED | ||
24 | |||
25 | #include "rbutil.h" | ||
26 | #include "installlog.h" | ||
27 | |||
28 | #define ESTF_SIZE 32 | ||
29 | |||
30 | struct sumpairs { | ||
31 | char *unpatched; | ||
32 | char *patched; | ||
33 | }; | ||
34 | |||
35 | /* precalculated checksums for H110/H115 */ | ||
36 | static struct sumpairs h100pairs[] = { | ||
37 | #include "h100sums.h" | ||
38 | }; | ||
39 | |||
40 | /* precalculated checksums for H120/H140 */ | ||
41 | static struct sumpairs h120pairs[] = { | ||
42 | #include "h120sums.h" | ||
43 | }; | ||
44 | |||
45 | /* precalculated checksums for H320/H340 */ | ||
46 | static struct sumpairs h300pairs[] = { | ||
47 | #include "h300sums.h" | ||
48 | }; | ||
49 | |||
50 | |||
51 | enum striptype | ||
52 | { | ||
53 | STRIP_NONE, | ||
54 | STRIP_HEADER_CHECKSUM, | ||
55 | STRIP_HEADER_CHECKSUM_ESTF | ||
56 | }; | ||
57 | |||
58 | /* protos for iriver.c */ | ||
59 | |||
60 | int intable(wxString md5, struct sumpairs *table, int len); | ||
61 | |||
62 | bool PatchFirmware(wxString firmware,wxString bootloader,int series, int table_entry); | ||
63 | |||
64 | |||
65 | #endif // IRIVERTOOLS_H_INCLUDED | ||
diff --git a/rbutil/md5sum.cpp b/rbutil/md5sum.cpp new file mode 100755 index 0000000000..9c253beed2 --- /dev/null +++ b/rbutil/md5sum.cpp | |||
@@ -0,0 +1,300 @@ | |||
1 | /*************************************************************************** | ||
2 | * __________ __ ___. | ||
3 | * Open \______ \ ____ ____ | | _\_ |__ _______ ___ | ||
4 | * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / | ||
5 | * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < | ||
6 | * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ | ||
7 | * \/ \/ \/ \/ \/ | ||
8 | * Module: rbutil | ||
9 | * File: md5sum.cpp | ||
10 | * | ||
11 | * Copyright (C) 2007 Dominik Wenger | ||
12 | * | ||
13 | * All files in this archive are subject to the GNU General Public License. | ||
14 | * See the file COPYING in the source tree root for full license agreement. | ||
15 | * | ||
16 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | ||
17 | * KIND, either express or implied. | ||
18 | * | ||
19 | ****************************************************************************/ | ||
20 | |||
21 | |||
22 | /* | ||
23 | * RFC 1321 compliant MD5 implementation | ||
24 | * | ||
25 | * Copyright (C) 2001-2003 Christophe Devine | ||
26 | * | ||
27 | * This program is free software; you can redistribute it and/or modify | ||
28 | * it under the terms of the GNU General Public License as published by | ||
29 | * the Free Software Foundation; either version 2 of the License, or | ||
30 | * (at your option) any later version. | ||
31 | * | ||
32 | * This program is distributed in the hope that it will be useful, | ||
33 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
34 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
35 | * GNU General Public License for more details. | ||
36 | * | ||
37 | * You should have received a copy of the GNU General Public License | ||
38 | * along with this program; if not, write to the Free Software | ||
39 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
40 | */ | ||
41 | |||
42 | |||
43 | #include "md5sum.h" | ||
44 | |||
45 | |||
46 | #define GET_UINT32(n,b,i) \ | ||
47 | { \ | ||
48 | (n) = ( (uint32) (b)[(i) ] ) \ | ||
49 | | ( (uint32) (b)[(i) + 1] << 8 ) \ | ||
50 | | ( (uint32) (b)[(i) + 2] << 16 ) \ | ||
51 | | ( (uint32) (b)[(i) + 3] << 24 ); \ | ||
52 | } | ||
53 | |||
54 | #define PUT_UINT32(n,b,i) \ | ||
55 | { \ | ||
56 | (b)[(i) ] = (uint8) ( (n) ); \ | ||
57 | (b)[(i) + 1] = (uint8) ( (n) >> 8 ); \ | ||
58 | (b)[(i) + 2] = (uint8) ( (n) >> 16 ); \ | ||
59 | (b)[(i) + 3] = (uint8) ( (n) >> 24 ); \ | ||
60 | } | ||
61 | |||
62 | void md5_starts( md5_context *ctx ) | ||
63 | { | ||
64 | ctx->total[0] = 0; | ||
65 | ctx->total[1] = 0; | ||
66 | |||
67 | ctx->state[0] = 0x67452301; | ||
68 | ctx->state[1] = 0xEFCDAB89; | ||
69 | ctx->state[2] = 0x98BADCFE; | ||
70 | ctx->state[3] = 0x10325476; | ||
71 | } | ||
72 | |||
73 | void md5_process( md5_context *ctx, uint8 data[64] ) | ||
74 | { | ||
75 | uint32 X[16], A, B, C, D; | ||
76 | |||
77 | GET_UINT32( X[0], data, 0 ); | ||
78 | GET_UINT32( X[1], data, 4 ); | ||
79 | GET_UINT32( X[2], data, 8 ); | ||
80 | GET_UINT32( X[3], data, 12 ); | ||
81 | GET_UINT32( X[4], data, 16 ); | ||
82 | GET_UINT32( X[5], data, 20 ); | ||
83 | GET_UINT32( X[6], data, 24 ); | ||
84 | GET_UINT32( X[7], data, 28 ); | ||
85 | GET_UINT32( X[8], data, 32 ); | ||
86 | GET_UINT32( X[9], data, 36 ); | ||
87 | GET_UINT32( X[10], data, 40 ); | ||
88 | GET_UINT32( X[11], data, 44 ); | ||
89 | GET_UINT32( X[12], data, 48 ); | ||
90 | GET_UINT32( X[13], data, 52 ); | ||
91 | GET_UINT32( X[14], data, 56 ); | ||
92 | GET_UINT32( X[15], data, 60 ); | ||
93 | |||
94 | #define S(x,n) ((x << n) | ((x & 0xFFFFFFFF) >> (32 - n))) | ||
95 | |||
96 | #define P(a,b,c,d,k,s,t) \ | ||
97 | { \ | ||
98 | a += F(b,c,d) + X[k] + t; a = S(a,s) + b; \ | ||
99 | } | ||
100 | |||
101 | A = ctx->state[0]; | ||
102 | B = ctx->state[1]; | ||
103 | C = ctx->state[2]; | ||
104 | D = ctx->state[3]; | ||
105 | |||
106 | #define F(x,y,z) (z ^ (x & (y ^ z))) | ||
107 | |||
108 | P( A, B, C, D, 0, 7, 0xD76AA478 ); | ||
109 | P( D, A, B, C, 1, 12, 0xE8C7B756 ); | ||
110 | P( C, D, A, B, 2, 17, 0x242070DB ); | ||
111 | P( B, C, D, A, 3, 22, 0xC1BDCEEE ); | ||
112 | P( A, B, C, D, 4, 7, 0xF57C0FAF ); | ||
113 | P( D, A, B, C, 5, 12, 0x4787C62A ); | ||
114 | P( C, D, A, B, 6, 17, 0xA8304613 ); | ||
115 | P( B, C, D, A, 7, 22, 0xFD469501 ); | ||
116 | P( A, B, C, D, 8, 7, 0x698098D8 ); | ||
117 | P( D, A, B, C, 9, 12, 0x8B44F7AF ); | ||
118 | P( C, D, A, B, 10, 17, 0xFFFF5BB1 ); | ||
119 | P( B, C, D, A, 11, 22, 0x895CD7BE ); | ||
120 | P( A, B, C, D, 12, 7, 0x6B901122 ); | ||
121 | P( D, A, B, C, 13, 12, 0xFD987193 ); | ||
122 | P( C, D, A, B, 14, 17, 0xA679438E ); | ||
123 | P( B, C, D, A, 15, 22, 0x49B40821 ); | ||
124 | |||
125 | #undef F | ||
126 | |||
127 | #define F(x,y,z) (y ^ (z & (x ^ y))) | ||
128 | |||
129 | P( A, B, C, D, 1, 5, 0xF61E2562 ); | ||
130 | P( D, A, B, C, 6, 9, 0xC040B340 ); | ||
131 | P( C, D, A, B, 11, 14, 0x265E5A51 ); | ||
132 | P( B, C, D, A, 0, 20, 0xE9B6C7AA ); | ||
133 | P( A, B, C, D, 5, 5, 0xD62F105D ); | ||
134 | P( D, A, B, C, 10, 9, 0x02441453 ); | ||
135 | P( C, D, A, B, 15, 14, 0xD8A1E681 ); | ||
136 | P( B, C, D, A, 4, 20, 0xE7D3FBC8 ); | ||
137 | P( A, B, C, D, 9, 5, 0x21E1CDE6 ); | ||
138 | P( D, A, B, C, 14, 9, 0xC33707D6 ); | ||
139 | P( C, D, A, B, 3, 14, 0xF4D50D87 ); | ||
140 | P( B, C, D, A, 8, 20, 0x455A14ED ); | ||
141 | P( A, B, C, D, 13, 5, 0xA9E3E905 ); | ||
142 | P( D, A, B, C, 2, 9, 0xFCEFA3F8 ); | ||
143 | P( C, D, A, B, 7, 14, 0x676F02D9 ); | ||
144 | P( B, C, D, A, 12, 20, 0x8D2A4C8A ); | ||
145 | |||
146 | #undef F | ||
147 | |||
148 | #define F(x,y,z) (x ^ y ^ z) | ||
149 | |||
150 | P( A, B, C, D, 5, 4, 0xFFFA3942 ); | ||
151 | P( D, A, B, C, 8, 11, 0x8771F681 ); | ||
152 | P( C, D, A, B, 11, 16, 0x6D9D6122 ); | ||
153 | P( B, C, D, A, 14, 23, 0xFDE5380C ); | ||
154 | P( A, B, C, D, 1, 4, 0xA4BEEA44 ); | ||
155 | P( D, A, B, C, 4, 11, 0x4BDECFA9 ); | ||
156 | P( C, D, A, B, 7, 16, 0xF6BB4B60 ); | ||
157 | P( B, C, D, A, 10, 23, 0xBEBFBC70 ); | ||
158 | P( A, B, C, D, 13, 4, 0x289B7EC6 ); | ||
159 | P( D, A, B, C, 0, 11, 0xEAA127FA ); | ||
160 | P( C, D, A, B, 3, 16, 0xD4EF3085 ); | ||
161 | P( B, C, D, A, 6, 23, 0x04881D05 ); | ||
162 | P( A, B, C, D, 9, 4, 0xD9D4D039 ); | ||
163 | P( D, A, B, C, 12, 11, 0xE6DB99E5 ); | ||
164 | P( C, D, A, B, 15, 16, 0x1FA27CF8 ); | ||
165 | P( B, C, D, A, 2, 23, 0xC4AC5665 ); | ||
166 | |||
167 | #undef F | ||
168 | |||
169 | #define F(x,y,z) (y ^ (x | ~z)) | ||
170 | |||
171 | P( A, B, C, D, 0, 6, 0xF4292244 ); | ||
172 | P( D, A, B, C, 7, 10, 0x432AFF97 ); | ||
173 | P( C, D, A, B, 14, 15, 0xAB9423A7 ); | ||
174 | P( B, C, D, A, 5, 21, 0xFC93A039 ); | ||
175 | P( A, B, C, D, 12, 6, 0x655B59C3 ); | ||
176 | P( D, A, B, C, 3, 10, 0x8F0CCC92 ); | ||
177 | P( C, D, A, B, 10, 15, 0xFFEFF47D ); | ||
178 | P( B, C, D, A, 1, 21, 0x85845DD1 ); | ||
179 | P( A, B, C, D, 8, 6, 0x6FA87E4F ); | ||
180 | P( D, A, B, C, 15, 10, 0xFE2CE6E0 ); | ||
181 | P( C, D, A, B, 6, 15, 0xA3014314 ); | ||
182 | P( B, C, D, A, 13, 21, 0x4E0811A1 ); | ||
183 | P( A, B, C, D, 4, 6, 0xF7537E82 ); | ||
184 | P( D, A, B, C, 11, 10, 0xBD3AF235 ); | ||
185 | P( C, D, A, B, 2, 15, 0x2AD7D2BB ); | ||
186 | P( B, C, D, A, 9, 21, 0xEB86D391 ); | ||
187 | |||
188 | #undef F | ||
189 | #undef S | ||
190 | #undef P | ||
191 | |||
192 | |||
193 | ctx->state[0] += A; | ||
194 | ctx->state[1] += B; | ||
195 | ctx->state[2] += C; | ||
196 | ctx->state[3] += D; | ||
197 | } | ||
198 | |||
199 | void md5_update( md5_context *ctx, uint8 *input, uint32 length ) | ||
200 | { | ||
201 | uint32 left, fill; | ||
202 | |||
203 | if( ! length ) return; | ||
204 | |||
205 | left = ctx->total[0] & 0x3F; | ||
206 | fill = 64 - left; | ||
207 | |||
208 | ctx->total[0] += length; | ||
209 | ctx->total[0] &= 0xFFFFFFFF; | ||
210 | |||
211 | if( ctx->total[0] < length ) | ||
212 | ctx->total[1]++; | ||
213 | |||
214 | if( left && length >= fill ) | ||
215 | { | ||
216 | memcpy( (void *) (ctx->buffer + left), | ||
217 | (void *) input, fill ); | ||
218 | md5_process( ctx, ctx->buffer ); | ||
219 | length -= fill; | ||
220 | input += fill; | ||
221 | left = 0; | ||
222 | } | ||
223 | |||
224 | while( length >= 64 ) | ||
225 | { | ||
226 | md5_process( ctx, input ); | ||
227 | length -= 64; | ||
228 | input += 64; | ||
229 | } | ||
230 | |||
231 | if( length ) | ||
232 | { | ||
233 | memcpy( (void *) (ctx->buffer + left), | ||
234 | (void *) input, length ); | ||
235 | } | ||
236 | } | ||
237 | |||
238 | static uint8 md5_padding[64] = | ||
239 | { | ||
240 | 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
241 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
242 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
243 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 | ||
244 | }; | ||
245 | |||
246 | void md5_finish( md5_context *ctx, uint8 digest[16] ) | ||
247 | { | ||
248 | uint32 last, padn; | ||
249 | uint32 high, low; | ||
250 | uint8 msglen[8]; | ||
251 | |||
252 | high = ( ctx->total[0] >> 29 ) | ||
253 | | ( ctx->total[1] << 3 ); | ||
254 | low = ( ctx->total[0] << 3 ); | ||
255 | |||
256 | PUT_UINT32( low, msglen, 0 ); | ||
257 | PUT_UINT32( high, msglen, 4 ); | ||
258 | |||
259 | last = ctx->total[0] & 0x3F; | ||
260 | padn = ( last < 56 ) ? ( 56 - last ) : ( 120 - last ); | ||
261 | |||
262 | md5_update( ctx, md5_padding, padn ); | ||
263 | md5_update( ctx, msglen, 8 ); | ||
264 | |||
265 | PUT_UINT32( ctx->state[0], digest, 0 ); | ||
266 | PUT_UINT32( ctx->state[1], digest, 4 ); | ||
267 | PUT_UINT32( ctx->state[2], digest, 8 ); | ||
268 | PUT_UINT32( ctx->state[3], digest, 12 ); | ||
269 | } | ||
270 | |||
271 | int FileMD5(wxString name,wxString *md5) | ||
272 | { | ||
273 | int i, read; | ||
274 | md5_context ctx; | ||
275 | unsigned char md5sum[16]; | ||
276 | unsigned char block[32768]; | ||
277 | |||
278 | char temp[255]; | ||
279 | wxFile file; | ||
280 | |||
281 | file.Open(name); | ||
282 | |||
283 | if (!file.IsOpened()) { | ||
284 | ERR_DIALOG("Could not open patched firmware for checksum check", _("Open Firmware")); | ||
285 | return 0; | ||
286 | } | ||
287 | md5_starts(&ctx); | ||
288 | while ( !file.Eof() ) { | ||
289 | read = file.Read(block, sizeof(block)); | ||
290 | md5_update(&ctx, block, read); | ||
291 | } | ||
292 | file.Close(); | ||
293 | md5_finish(&ctx, md5sum); | ||
294 | for (i = 0; i < 16; ++i) | ||
295 | { | ||
296 | sprintf(temp + 2*i, "%02x", md5sum[i]); | ||
297 | } | ||
298 | md5->Append(temp); | ||
299 | return 1; | ||
300 | } | ||
diff --git a/rbutil/md5sum.h b/rbutil/md5sum.h new file mode 100755 index 0000000000..5cc894c0ea --- /dev/null +++ b/rbutil/md5sum.h | |||
@@ -0,0 +1,51 @@ | |||
1 | /*************************************************************************** | ||
2 | * __________ __ ___. | ||
3 | * Open \______ \ ____ ____ | | _\_ |__ _______ ___ | ||
4 | * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / | ||
5 | * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < | ||
6 | * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ | ||
7 | * \/ \/ \/ \/ \/ | ||
8 | * Module: rbutil | ||
9 | * File: md5sum.h | ||
10 | * | ||
11 | * Copyright (C) 2007 Dominik Wenger | ||
12 | * | ||
13 | * All files in this archive are subject to the GNU General Public License. | ||
14 | * See the file COPYING in the source tree root for full license agreement. | ||
15 | * | ||
16 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | ||
17 | * KIND, either express or implied. | ||
18 | * | ||
19 | ****************************************************************************/ | ||
20 | |||
21 | |||
22 | #ifndef MD5SUM_H_INCLUDED | ||
23 | #define MD5SUM_H_INCLUDED | ||
24 | |||
25 | #ifndef uint8 | ||
26 | #define uint8 unsigned char | ||
27 | #endif | ||
28 | |||
29 | |||
30 | #ifndef uint32 | ||
31 | #define uint32 unsigned long int | ||
32 | #endif | ||
33 | |||
34 | #include "rbutil.h" | ||
35 | |||
36 | |||
37 | typedef struct | ||
38 | { | ||
39 | uint32 total[2]; | ||
40 | uint32 state[4]; | ||
41 | uint8 buffer[64]; | ||
42 | } | ||
43 | md5_context; | ||
44 | |||
45 | void md5_starts( md5_context *ctx ); | ||
46 | void md5_update( md5_context *ctx, uint8 *input, uint32 length ); | ||
47 | void md5_finish( md5_context *ctx, uint8 digest[16] ); | ||
48 | |||
49 | int FileMD5(wxString name,wxString *md5); | ||
50 | |||
51 | #endif // MD5SUM_H_INCLUDED | ||
diff --git a/rbutil/mksums.pl b/rbutil/mksums.pl new file mode 100755 index 0000000000..99786fe161 --- /dev/null +++ b/rbutil/mksums.pl | |||
@@ -0,0 +1,69 @@ | |||
1 | #!/usr/bin/perl | ||
2 | |||
3 | # This script creates the h100sums.h and h300sums.h files for fwpatcher. | ||
4 | # | ||
5 | # It expects a file tree with scrambled and descrambled | ||
6 | # firmwares like this: | ||
7 | # orig-firmware/ | ||
8 | # h1xx/ | ||
9 | # 1.66jp/ | ||
10 | # ihp_100.bin | ||
11 | # ihp_100.hex | ||
12 | # ihp_120.bin | ||
13 | # ihp_120.hex | ||
14 | # h3xx/ | ||
15 | # 1.29jp/ | ||
16 | # H300.bin | ||
17 | # H300.hex | ||
18 | # etc. | ||
19 | # | ||
20 | # It also expects the bootloader binaries in the current directory: | ||
21 | # bootloader-h100.bin | ||
22 | # bootloader-h120.bin | ||
23 | # bootloader-h300.bin | ||
24 | |||
25 | $orig_path = "~/orig-firmware"; | ||
26 | |||
27 | mksumfile("100"); | ||
28 | mksumfile("120"); | ||
29 | mksumfile("300"); | ||
30 | |||
31 | sub mksumfile { | ||
32 | ($model) = @_; | ||
33 | |||
34 | open FILE, ">h${model}sums.h" or die "Can't open h${model}sums.h"; | ||
35 | |||
36 | print FILE "/* Checksums of firmwares for ihp_$model */\n"; | ||
37 | print FILE "/* order: unpatched, patched */\n\n"; | ||
38 | |||
39 | if($model < 300) { | ||
40 | foreach("1.63eu","1.63k", "1.63us", "1.65eu","1.65k", "1.65us", | ||
41 | "1.66eu", "1.66k", "1.66us", "1.66jp") { | ||
42 | `../mkboot $orig_path/h1xx/$_/ihp_$model.bin bootloader-h$model.bin ihp_$model.bin`; | ||
43 | `../scramble -iriver ihp_$model.bin ihp_$model.hex`; | ||
44 | $origsum = `md5sum $orig_path/h1xx/$_/ihp_$model.hex`; | ||
45 | chomp $origsum; | ||
46 | ($os, $or) = split / /, $origsum; | ||
47 | $sum = `md5sum ihp_$model.hex`; | ||
48 | chomp $sum; | ||
49 | ($s, $r) = split / /, $sum; | ||
50 | print FILE "/* $_ */\n"; | ||
51 | print FILE "{\"$os\", \"$s\"},\n"; | ||
52 | } | ||
53 | } else { | ||
54 | foreach("1.28eu", "1.28k", "1.28jp", "1.29eu", "1.29k", "1.29jp", | ||
55 | "1.30eu") { | ||
56 | `../mkboot -h300 $orig_path/h3xx/$_/H$model.bin bootloader-h$model.bin H$model.bin`; | ||
57 | `../scramble -iriver H$model.bin H$model.hex`; | ||
58 | $origsum = `md5sum $orig_path/h3xx/$_/H$model.hex`; | ||
59 | chomp $origsum; | ||
60 | ($os, $or) = split / /, $origsum; | ||
61 | $sum = `md5sum H$model.hex`; | ||
62 | chomp $sum; | ||
63 | ($s, $r) = split / /, $sum; | ||
64 | print FILE "/* $_ */\n"; | ||
65 | print FILE "{\"$os\", \"$s\"},\n"; | ||
66 | } | ||
67 | } | ||
68 | close FILE; | ||
69 | } | ||
diff --git a/rbutil/rbutil.cbp b/rbutil/rbutil.cbp index ae6fc4a15a..2ee3f2316d 100644 --- a/rbutil/rbutil.cbp +++ b/rbutil/rbutil.cbp | |||
@@ -1,18 +1,45 @@ | |||
1 | <?xml version="1.0" encoding="UTF-8" standalone="yes" ?> | 1 | <?xml version="1.0" encoding="UTF-8" standalone="yes" ?> |
2 | <CodeBlocks_project_file> | 2 | <CodeBlocks_project_file> |
3 | <FileVersion major="1" minor="5" /> | 3 | <FileVersion major="1" minor="6" /> |
4 | <Project> | 4 | <Project> |
5 | <Option title="rbutil" /> | 5 | <Option title="rbutil" /> |
6 | <Option pch_mode="0" /> | 6 | <Option pch_mode="0" /> |
7 | <Option default_target="" /> | ||
8 | <Option compiler="gcc" /> | 7 | <Option compiler="gcc" /> |
9 | <Option virtualFolders="" /> | 8 | <MakeCommands> |
9 | <Build command="$make -f $makefile all" /> | ||
10 | <CompileFile command="$make -f $makefile $file" /> | ||
11 | <Clean command="$make -f $makefile clean" /> | ||
12 | <DistClean command="$make -f $makefile distclean" /> | ||
13 | </MakeCommands> | ||
10 | <Build> | 14 | <Build> |
11 | <Target title="default"> | 15 | <Target title="Release"> |
12 | <Option output="rbutil.exe" prefix_auto="0" extension_auto="0" /> | 16 | <Option output="rbutil.exe" prefix_auto="0" extension_auto="0" /> |
13 | <Option type="0" /> | 17 | <Option type="0" /> |
14 | <Option compiler="gcc" /> | 18 | <Option compiler="gcc" /> |
15 | <Option projectResourceIncludeDirsRelation="0" /> | 19 | <Option projectResourceIncludeDirsRelation="0" /> |
20 | <ExtraCommands> | ||
21 | <Add after="upx --best --compress-icons=0 rbutil.exe" /> | ||
22 | </ExtraCommands> | ||
23 | <MakeCommands> | ||
24 | <Build command="$make -f $makefile all" /> | ||
25 | <CompileFile command="$make -f $makefile $file" /> | ||
26 | <Clean command="$make -f $makefile clean" /> | ||
27 | <DistClean command="$make -f $makefile distclean" /> | ||
28 | </MakeCommands> | ||
29 | </Target> | ||
30 | <Target title="Debug"> | ||
31 | <Option output="rbutil.exe" prefix_auto="0" extension_auto="0" /> | ||
32 | <Option type="0" /> | ||
33 | <Option compiler="gcc" /> | ||
34 | <Compiler> | ||
35 | <Add option="-g" /> | ||
36 | </Compiler> | ||
37 | <MakeCommands> | ||
38 | <Build command="$make -f $makefile all" /> | ||
39 | <CompileFile command="$make -f $makefile all" /> | ||
40 | <Clean command="$make -f $makefile clean" /> | ||
41 | <DistClean command="$make -f $makefile distclean" /> | ||
42 | </MakeCommands> | ||
16 | </Target> | 43 | </Target> |
17 | <Environment> | 44 | <Environment> |
18 | <Variable name="WX_CFG" value="" /> | 45 | <Variable name="WX_CFG" value="" /> |
@@ -34,12 +61,13 @@ | |||
34 | <Add directory="$(#WX.include)" /> | 61 | <Add directory="$(#WX.include)" /> |
35 | <Add directory="$(#WX.lib)\gcc_lib$(WX_CFG)\msw" /> | 62 | <Add directory="$(#WX.lib)\gcc_lib$(WX_CFG)\msw" /> |
36 | <Add directory="$(#WX)\contrib\include" /> | 63 | <Add directory="$(#WX)\contrib\include" /> |
64 | <Add directory=".\" /> | ||
37 | </Compiler> | 65 | </Compiler> |
38 | <ResourceCompiler> | 66 | <ResourceCompiler> |
39 | <Add directory="$(#WX.include)" /> | 67 | <Add directory="$(#WX.include)" /> |
40 | </ResourceCompiler> | 68 | </ResourceCompiler> |
41 | <Linker> | 69 | <Linker> |
42 | <Add library="wxmsw27" /> | 70 | <Add library="wxmsw28" /> |
43 | <Add library="winspool" /> | 71 | <Add library="winspool" /> |
44 | <Add library="winmm" /> | 72 | <Add library="winmm" /> |
45 | <Add library="shell32" /> | 73 | <Add library="shell32" /> |
@@ -56,133 +84,57 @@ | |||
56 | <Add library="libwxzlib" /> | 84 | <Add library="libwxzlib" /> |
57 | <Add directory="$(#WX.lib)\gcc_lib$(WX_CFG)" /> | 85 | <Add directory="$(#WX.lib)\gcc_lib$(WX_CFG)" /> |
58 | <Add directory="$(#WX.lib)" /> | 86 | <Add directory="$(#WX.lib)" /> |
87 | <Add directory=".\" /> | ||
59 | </Linker> | 88 | </Linker> |
60 | <ExtraCommands> | 89 | <Unit filename="Makefile" /> |
61 | <Add after="upx --best --compress-icons=0 rbutil.exe" /> | 90 | <Unit filename="archos.ico" /> |
62 | </ExtraCommands> | 91 | <Unit filename="bootloaders.cpp" /> |
63 | <Unit filename="archos.ico"> | 92 | <Unit filename="bootloaders.h" /> |
64 | <Option compilerVar="CPP" /> | 93 | <Unit filename="copying.txt" /> |
65 | <Option compile="0" /> | 94 | <Unit filename="credits.h" /> |
66 | <Option link="0" /> | 95 | <Unit filename="fonts_3d.xpm" /> |
67 | <Option target="default" /> | 96 | <Unit filename="h100sums.h" /> |
68 | </Unit> | 97 | <Unit filename="h120sums.h" /> |
69 | <Unit filename="copying.txt"> | 98 | <Unit filename="h300sums.h" /> |
70 | <Option compilerVar="CPP" /> | 99 | <Unit filename="install_3d.xpm" /> |
71 | <Option compile="0" /> | 100 | <Unit filename="installlog.cpp" /> |
72 | <Option link="0" /> | 101 | <Unit filename="installlog.h" /> |
73 | <Option target="default" /> | 102 | <Unit filename="ipodpatcher\ipodio-win32.c"> |
74 | </Unit> | 103 | <Option compilerVar="CC" /> |
75 | <Unit filename="credits.h"> | 104 | <Option compiler="gcc" use="1" buildCommand="mingw32-gcc.exe -W -g -pipe -mthreads -Winvalid-pch -D__GNUWIN32__ -D__WXMSW__ -DUSE_PCH -g -I.\ -IC:\Dev-Cpp\include -c $file -o .objs\ipodpatcher\ipodio-win32.o" /> |
76 | <Option compilerVar="CPP" /> | 105 | </Unit> |
77 | <Option compile="0" /> | 106 | <Unit filename="ipodpatcher\ipodio.h" /> |
78 | <Option link="0" /> | 107 | <Unit filename="ipodpatcher\ipodpatcher.c"> |
79 | <Option target="default" /> | 108 | <Option compilerVar="CC" /> |
80 | </Unit> | 109 | <Option compiler="gcc" use="1" buildCommand="mingw32-gcc.exe -W -g -pipe -mthreads -Winvalid-pch -D__GNUWIN32__ -D__WXMSW__ -DUSE_PCH -g -I.\ -IC:\Dev-Cpp\include -c $file -o .objs\ipodpatcher\ipodpatcher.o\n" /> |
81 | <Unit filename="fonts_3d.xpm"> | 110 | </Unit> |
82 | <Option compilerVar="CPP" /> | 111 | <Unit filename="ipodpatcher\ipodpatcher.h" /> |
83 | <Option compile="0" /> | 112 | <Unit filename="ipodpatcher\parttypes.h" /> |
84 | <Option link="0" /> | 113 | <Unit filename="irivertools.cpp" /> |
85 | <Option target="default" /> | 114 | <Unit filename="irivertools.h" /> |
86 | </Unit> | 115 | <Unit filename="md5sum.cpp" /> |
87 | <Unit filename="install_3d.xpm"> | 116 | <Unit filename="md5sum.h" /> |
88 | <Option compilerVar="CPP" /> | 117 | <Unit filename="rblogo.xpm" /> |
89 | <Option compile="0" /> | ||
90 | <Option link="0" /> | ||
91 | <Option target="default" /> | ||
92 | </Unit> | ||
93 | <Unit filename="rblogo.xpm"> | ||
94 | <Option compilerVar="CPP" /> | ||
95 | <Option compile="0" /> | ||
96 | <Option link="0" /> | ||
97 | <Option target="default" /> | ||
98 | </Unit> | ||
99 | <Unit filename="rbutil-rc.rc"> | 118 | <Unit filename="rbutil-rc.rc"> |
100 | <Option compilerVar="WINDRES" /> | 119 | <Option compilerVar="WINDRES" /> |
101 | <Option objectName="rbutil-rc.res" /> | ||
102 | <Option target="default" /> | ||
103 | </Unit> | ||
104 | <Unit filename="rbutil.cpp"> | ||
105 | <Option compilerVar="CPP" /> | ||
106 | <Option target="default" /> | ||
107 | </Unit> | ||
108 | <Unit filename="rbutil.h"> | ||
109 | <Option compilerVar="CPP" /> | ||
110 | <Option compile="0" /> | ||
111 | <Option link="0" /> | ||
112 | <Option target="default" /> | ||
113 | </Unit> | ||
114 | <Unit filename="rbutil.ini"> | ||
115 | <Option compilerVar="CPP" /> | ||
116 | <Option compile="0" /> | ||
117 | <Option link="0" /> | ||
118 | <Option target="default" /> | ||
119 | </Unit> | ||
120 | <Unit filename="rbutil.iss"> | ||
121 | <Option compilerVar="CPP" /> | ||
122 | <Option compile="0" /> | ||
123 | <Option link="0" /> | ||
124 | <Option target="default" /> | ||
125 | </Unit> | ||
126 | <Unit filename="rbutilApp.cpp"> | ||
127 | <Option compilerVar="CPP" /> | ||
128 | <Option target="default" /> | ||
129 | </Unit> | ||
130 | <Unit filename="rbutilApp.h"> | ||
131 | <Option compilerVar="CPP" /> | ||
132 | <Option compile="0" /> | ||
133 | <Option link="0" /> | ||
134 | <Option target="default" /> | ||
135 | </Unit> | ||
136 | <Unit filename="rbutilFrm.cpp"> | ||
137 | <Option compilerVar="CPP" /> | ||
138 | <Option target="default" /> | ||
139 | </Unit> | ||
140 | <Unit filename="rbutilFrm.h"> | ||
141 | <Option compilerVar="CPP" /> | ||
142 | <Option compile="0" /> | ||
143 | <Option link="0" /> | ||
144 | <Option target="default" /> | ||
145 | </Unit> | ||
146 | <Unit filename="rbutilFrm_XPM.xpm"> | ||
147 | <Option compilerVar="CPP" /> | ||
148 | <Option compile="0" /> | ||
149 | <Option link="0" /> | ||
150 | <Option target="default" /> | ||
151 | </Unit> | ||
152 | <Unit filename="tools2_3d.xpm"> | ||
153 | <Option compilerVar="CPP" /> | ||
154 | <Option compile="0" /> | ||
155 | <Option link="0" /> | ||
156 | <Option target="default" /> | ||
157 | </Unit> | ||
158 | <Unit filename="uninstall_3d.xpm"> | ||
159 | <Option compilerVar="CPP" /> | ||
160 | <Option compile="0" /> | ||
161 | <Option link="0" /> | ||
162 | <Option target="default" /> | ||
163 | </Unit> | ||
164 | <Unit filename="wizard.xpm"> | ||
165 | <Option compilerVar="CPP" /> | ||
166 | <Option compile="0" /> | ||
167 | <Option link="0" /> | ||
168 | <Option target="default" /> | ||
169 | </Unit> | ||
170 | <Unit filename="wizard_pages.cpp"> | ||
171 | <Option compilerVar="CPP" /> | ||
172 | <Option target="default" /> | ||
173 | </Unit> | ||
174 | <Unit filename="wizard_pages.h"> | ||
175 | <Option compilerVar="CPP" /> | ||
176 | <Option compile="0" /> | ||
177 | <Option link="0" /> | ||
178 | <Option target="default" /> | ||
179 | </Unit> | ||
180 | <Unit filename="wx_pch.h"> | ||
181 | <Option compilerVar="CPP" /> | ||
182 | <Option compile="0" /> | ||
183 | <Option link="0" /> | ||
184 | <Option target="default" /> | ||
185 | </Unit> | 120 | </Unit> |
186 | <Extensions /> | 121 | <Unit filename="rbutil.cpp" /> |
122 | <Unit filename="rbutil.h" /> | ||
123 | <Unit filename="rbutil.ini" /> | ||
124 | <Unit filename="rbutil.iss" /> | ||
125 | <Unit filename="rbutilApp.cpp" /> | ||
126 | <Unit filename="rbutilApp.h" /> | ||
127 | <Unit filename="rbutilFrm.cpp" /> | ||
128 | <Unit filename="rbutilFrm.h" /> | ||
129 | <Unit filename="rbutilFrm_XPM.xpm" /> | ||
130 | <Unit filename="tools2_3d.xpm" /> | ||
131 | <Unit filename="uninstall_3d.xpm" /> | ||
132 | <Unit filename="wizard.xpm" /> | ||
133 | <Unit filename="wizard_pages.cpp" /> | ||
134 | <Unit filename="wizard_pages.h" /> | ||
135 | <Unit filename="wx_pch.h" /> | ||
136 | <Extensions> | ||
137 | <code_completion /> | ||
138 | </Extensions> | ||
187 | </Project> | 139 | </Project> |
188 | </CodeBlocks_project_file> \ No newline at end of file | 140 | </CodeBlocks_project_file> |
diff --git a/rbutil/rbutil.cpp b/rbutil/rbutil.cpp index b7a1fa6a73..9ffe9a6c58 100644 --- a/rbutil/rbutil.cpp +++ b/rbutil/rbutil.cpp | |||
@@ -21,28 +21,29 @@ | |||
21 | #include "rbutil.h" | 21 | #include "rbutil.h" |
22 | #include "installlog.h" | 22 | #include "installlog.h" |
23 | 23 | ||
24 | |||
24 | // This class allows us to return directories as well as files to | 25 | // This class allows us to return directories as well as files to |
25 | // wxDir::Traverse | 26 | // wxDir::Traverse |
26 | class wxDirTraverserIncludeDirs : public wxDirTraverser | 27 | class wxDirTraverserIncludeDirs : public wxDirTraverser |
27 | { | 28 | { |
28 | public: | 29 | public: |
29 | wxDirTraverserIncludeDirs(wxArrayString& files) : m_files(files) { } | 30 | wxDirTraverserIncludeDirs(wxArrayString& files) : m_files(files) { } |
30 | 31 | ||
31 | virtual wxDirTraverseResult OnFile(const wxString& filename) | 32 | virtual wxDirTraverseResult OnFile(const wxString& filename) |
32 | { | 33 | { |
33 | m_files.Add(filename); | 34 | m_files.Add(filename); |
34 | return wxDIR_CONTINUE; | 35 | return wxDIR_CONTINUE; |
35 | } | 36 | } |
36 | 37 | ||
37 | virtual wxDirTraverseResult OnDir(const wxString& dirname) | 38 | virtual wxDirTraverseResult OnDir(const wxString& dirname) |
38 | { | 39 | { |
39 | m_files.Add(dirname); | 40 | m_files.Add(dirname); |
40 | return wxDIR_CONTINUE; | 41 | return wxDIR_CONTINUE; |
41 | } | 42 | } |
42 | 43 | ||
43 | private: | 44 | private: |
44 | wxArrayString& m_files; | 45 | wxArrayString& m_files; |
45 | }; | 46 | }; |
46 | 47 | ||
47 | wxDEFINE_SCOPED_PTR_TYPE(wxZipEntry); | 48 | wxDEFINE_SCOPED_PTR_TYPE(wxZipEntry); |
48 | 49 | ||
@@ -272,18 +273,15 @@ int UnzipFile(wxString src, wxString destdir, bool isInstall) | |||
272 | in_str.Printf(wxT("%s" PATH_SEP "%s"), destdir.c_str(), name.c_str()); | 273 | in_str.Printf(wxT("%s" PATH_SEP "%s"), destdir.c_str(), name.c_str()); |
273 | 274 | ||
274 | if (entry->IsDir() ) { | 275 | if (entry->IsDir() ) { |
275 | wxDir* dirname = new wxDir(in_str); | 276 | if (!wxDirExists(in_str) ) { |
276 | if (! dirname->Exists(in_str) ) { | ||
277 | if (! wxMkdir(in_str, 0777) ) { | 277 | if (! wxMkdir(in_str, 0777) ) { |
278 | buf.Printf(_("Unable to create directory %s"), | 278 | buf.Printf(_("Unable to create directory %s"), |
279 | in_str.c_str() ); | 279 | in_str.c_str() ); |
280 | errnum = 100; | 280 | errnum = 100; |
281 | delete dirname; | ||
282 | break; | 281 | break; |
283 | } | 282 | } |
284 | } | 283 | } |
285 | log->WriteFile(name, true); // Directory | 284 | log->WriteFile(name, true); // Directory |
286 | delete dirname; | ||
287 | continue; | 285 | continue; |
288 | } | 286 | } |
289 | 287 | ||
diff --git a/rbutil/rbutil.h b/rbutil/rbutil.h index c1816d5d0b..b499f44e18 100644 --- a/rbutil/rbutil.h +++ b/rbutil/rbutil.h | |||
@@ -85,6 +85,11 @@ public: | |||
85 | wxArrayString plat_id; | 85 | wxArrayString plat_id; |
86 | wxArrayString plat_name; | 86 | wxArrayString plat_name; |
87 | wxArrayInt plat_released; | 87 | wxArrayInt plat_released; |
88 | wxArrayInt plat_needsbootloader; | ||
89 | wxArrayString plat_bootloadermethod; | ||
90 | wxArrayString plat_bootloadername; | ||
91 | wxArrayInt plat_autodetect; | ||
92 | wxArrayString plat_combinedname; | ||
88 | wxString download_url; | 93 | wxString download_url; |
89 | wxString daily_url; | 94 | wxString daily_url; |
90 | wxString bleeding_url; | 95 | wxString bleeding_url; |
@@ -92,6 +97,7 @@ public: | |||
92 | wxString font_url; | 97 | wxString font_url; |
93 | wxString last_release; | 98 | wxString last_release; |
94 | wxString prog_name; | 99 | wxString prog_name; |
100 | wxString bootloader_url; | ||
95 | 101 | ||
96 | // User configuration data. | 102 | // User configuration data. |
97 | wxString curplat; | 103 | wxString curplat; |
@@ -101,6 +107,9 @@ public: | |||
101 | bool curisfull; | 107 | bool curisfull; |
102 | bool nocache; | 108 | bool nocache; |
103 | bool portable; | 109 | bool portable; |
110 | wxString curbootloadermethod; | ||
111 | wxString curbootloader; | ||
112 | wxString curfirmware; | ||
104 | 113 | ||
105 | // Global system variables | 114 | // Global system variables |
106 | wxFFile* logfile; | 115 | wxFFile* logfile; |
@@ -120,6 +129,7 @@ bool InstallRbutil(wxString dest); | |||
120 | wxString stream_err_str(int errnum); | 129 | wxString stream_err_str(int errnum); |
121 | bool rm_rf(wxString file); | 130 | bool rm_rf(wxString file); |
122 | 131 | ||
132 | |||
123 | #define ERR_DIALOG(msg, title) \ | 133 | #define ERR_DIALOG(msg, title) \ |
124 | wxLogError("%s: %s", ((wxString) title).c_str(), ((wxString) msg).c_str()) | 134 | wxLogError("%s: %s", ((wxString) title).c_str(), ((wxString) msg).c_str()) |
125 | 135 | ||
@@ -136,4 +146,7 @@ bool rm_rf(wxString file); | |||
136 | #define BUILD_DAILY 1 | 146 | #define BUILD_DAILY 1 |
137 | #define BUILD_BLEEDING 2 | 147 | #define BUILD_BLEEDING 2 |
138 | 148 | ||
149 | #define BOOTLOADER_ADD 0 | ||
150 | #define BOOTLOADER_REM 1 | ||
151 | |||
139 | #endif | 152 | #endif |
diff --git a/rbutil/rbutil.ini b/rbutil/rbutil.ini index f8d42d6c8b..56f5baf3ac 100644 --- a/rbutil/rbutil.ini +++ b/rbutil/rbutil.ini | |||
@@ -1,11 +1,12 @@ | |||
1 | [general] | 1 | [general] |
2 | download_url=http://www.rockbox.org/download/ | 2 | download_url=http://www.rockbox.org/download/ |
3 | daily_url=http://www.rockbox.org/daily/ | 3 | daily_url=http://download.rockbox.org/daily/ |
4 | bleeding_url=http://www.rockbox.org/dist/build- | 4 | bleeding_url=http://build.rockbox.org/dist/build- |
5 | server_conf_url=http://www.rockbox.org/daily/build-info | 5 | server_conf_url=http://www.rockbox.org/daily/build-info |
6 | font_url=http://www.rockbox.org/daily/fonts/rockbox-fonts- | 6 | font_url=http://www.rockbox.org/daily/fonts/rockbox-fonts- |
7 | last_release=2.5 | 7 | last_release=2.5 |
8 | prog_name=rockbox | 8 | prog_name=rockbox |
9 | bootloader_url=http://download.rockbox.org/bootloader | ||
9 | 10 | ||
10 | [platforms] | 11 | [platforms] |
11 | platform1=player | 12 | platform1=player |
@@ -19,96 +20,255 @@ platform8=ondiofm | |||
19 | platform9=h100 | 20 | platform9=h100 |
20 | platform10=h120 | 21 | platform10=h120 |
21 | platform11=h300 | 22 | platform11=h300 |
22 | platform12=h10_5gb | 23 | platform12=h10_5gbums |
23 | platform13=h10 | 24 | platform13=h10_5gbmtp |
24 | platform14=ipod3g | 25 | platform14=h10 |
25 | platform15=ipod4gray | 26 | platform15=ipod3g |
26 | platform16=ipodcolor | 27 | platform16=ipod4gray |
27 | platform17=ipodvideo | 28 | platform17=ipodcolor |
28 | platform18=ipodmini1g | 29 | platform18=ipodvideo |
29 | platform19=ipodmini2g | 30 | platform19=ipodmini1g |
30 | platform20=ipodnano | 31 | platform20=ipodmini2g |
31 | platform21=iaudiox5 | 32 | platform21=ipodnano |
33 | platform22=iaudiox5 | ||
34 | platform23=iaudiox5v | ||
35 | platform24=gigabeatf | ||
32 | 36 | ||
33 | [player] | 37 | [player] |
34 | name=Archos Jukebox Player 6000, Jukebox Studio 5/10/20 | 38 | name=Archos Jukebox Player 6000, Jukebox Studio 5/10/20 |
39 | platform=player | ||
35 | released=yes | 40 | released=yes |
41 | needsbootloader=no | ||
42 | bootloadermethod= | ||
43 | bootloadername= | ||
44 | autodetect=no | ||
45 | combinedname= | ||
36 | 46 | ||
37 | [recorder] | 47 | [recorder] |
38 | name=Archos Jukebox Recorder 10, 20 | 48 | name=Archos Jukebox Recorder 10, 20 |
49 | platform=recorder | ||
39 | released=yes | 50 | released=yes |
51 | needsbootloader=no | ||
52 | bootloadermethod= | ||
53 | bootloadername= | ||
54 | autodetect=no | ||
55 | combinedname= | ||
40 | 56 | ||
41 | [recorder8mb] | 57 | [recorder8mb] |
42 | name=Archos Jukebox Recorder 10, 20 (with 8mb memory) | 58 | name=Archos Jukebox Recorder 10, 20 (with 8mb memory) |
59 | platform=recorder8mb | ||
43 | released=no | 60 | released=no |
61 | needsbootloader=no | ||
62 | bootloadermethod= | ||
63 | bootloadername= | ||
64 | autodetect=no | ||
65 | combinedname= | ||
44 | 66 | ||
45 | [recorderv2] | 67 | [recorderv2] |
46 | name=Archos Jukebox Recorder v2 (20GB) | 68 | name=Archos Jukebox Recorder v2 (20GB) |
69 | platform=recorderv2 | ||
47 | released=yes | 70 | released=yes |
71 | needsbootloader=no | ||
72 | bootloadermethod= | ||
73 | bootloadername= | ||
74 | autodetect=no | ||
75 | combinedname= | ||
48 | 76 | ||
49 | [fmrecorder] | 77 | [fmrecorder] |
50 | name=Archos Jukebox Recorder FM | 78 | name=Archos Jukebox Recorder FM |
79 | platform=fmrecorder | ||
51 | released=yes | 80 | released=yes |
81 | needsbootloader=no | ||
82 | bootloadermethod= | ||
83 | bootloadername= | ||
84 | autodetect=no | ||
85 | combinedname= | ||
52 | 86 | ||
53 | [fmrecorder8mb] | 87 | [fmrecorder8mb] |
54 | name=Archos Jukebox Recorder FM (with 8mb memory) | 88 | name=Archos Jukebox Recorder FM (with 8mb memory) |
89 | platform=fmrecorder8mb | ||
55 | released=no | 90 | released=no |
91 | needsbootloader=no | ||
92 | bootloadermethod= | ||
93 | bootloadername= | ||
94 | autodetect=no | ||
95 | combinedname= | ||
56 | 96 | ||
57 | [ondiosp] | 97 | [ondiosp] |
58 | name=Archos Ondio SP | 98 | name=Archos Ondio SP |
99 | platform=ondiosp | ||
59 | released=yes | 100 | released=yes |
101 | needsbootloader=no | ||
102 | bootloadermethod= | ||
103 | bootloadername= | ||
104 | autodetect=no | ||
105 | combinedname= | ||
60 | 106 | ||
61 | [ondiofm] | 107 | [ondiofm] |
62 | name=Archos Ondio FM | 108 | name=Archos Ondio FM |
109 | platform=ondiofm | ||
63 | released=yes | 110 | released=yes |
111 | needsbootloader=no | ||
112 | bootloadermethod= | ||
113 | bootloadername= | ||
114 | autodetect=no | ||
115 | combinedname= | ||
64 | 116 | ||
65 | [h100] | 117 | [h100] |
66 | name=Iriver iHP100, iHP110 | 118 | name=Iriver iHP100, iHP110 |
119 | platform=h100 | ||
67 | released=no | 120 | released=no |
121 | needsbootloader=yes | ||
122 | bootloadermethod=fwpatcher | ||
123 | bootloadername=bootloader-h100.bin | ||
124 | autodetect=no | ||
125 | combinedname= | ||
68 | 126 | ||
69 | [h120] | 127 | [h120] |
70 | name=Iriver iHP120, iHP140, H120, H140 | 128 | name=Iriver iHP120, iHP140, H120, H140 |
129 | platform=h120 | ||
71 | released=no | 130 | released=no |
131 | needsbootloader=yes | ||
132 | bootloadermethod=fwpatcher | ||
133 | bootloadername=bootloader-h120.bin | ||
134 | autodetect=no | ||
135 | combinedname= | ||
72 | 136 | ||
73 | [h300] | 137 | [h300] |
74 | name=Iriver H320, H340 | 138 | name=Iriver H320, H340 |
139 | platform=h300 | ||
75 | released=no | 140 | released=no |
141 | needsbootloader=yes | ||
142 | bootloadermethod=fwpatcher | ||
143 | bootloadername=bootloader-h300.bin | ||
144 | autodetect=no | ||
145 | combinedname= | ||
76 | 146 | ||
77 | [h10_5gb] | 147 | [h10_5gbums] |
78 | name=Iriver H10 (5GB) | 148 | name=Iriver H10 (5GB) UMS |
149 | platform=h10_5gb | ||
79 | released=no | 150 | released=no |
151 | needsbootloader=yes | ||
152 | bootloadermethod=h10 | ||
153 | bootloadername=H10.mi4 | ||
154 | autodetect=no | ||
155 | combinedname= | ||
156 | |||
157 | [h10_5gbmtp] | ||
158 | name=Iriver H10 (5GB) MTP | ||
159 | platform=h10_5gb | ||
160 | released=no | ||
161 | needsbootloader=yes | ||
162 | bootloadermethod=h10 | ||
163 | bootloadername=H10_5GB-MTP/H10.mi4 | ||
164 | autodetect=no | ||
165 | combinedname= | ||
80 | 166 | ||
81 | [h10] | 167 | [h10] |
82 | name=Iriver H10 (20GB) | 168 | name=Iriver H10 (20GB) |
169 | platform=h10 | ||
170 | released=no | ||
171 | needsbootloader=yes | ||
172 | bootloadermethod=h10 | ||
173 | bootloadername=H10_20GC.mi4 | ||
174 | autodetect=no | ||
175 | combinedname= | ||
83 | 176 | ||
84 | [ipodcolor] | 177 | [ipodcolor] |
85 | name=Apple Ipod Colour/Photo/U2 (4th gen) | 178 | name=Apple Ipod Colour/Photo/U2 (4th gen) |
179 | platform=ipodcolor | ||
86 | released=no | 180 | released=no |
181 | needsbootloader=yes | ||
182 | bootloadermethod=ipodpatcher | ||
183 | bootloadername=none | ||
184 | autodetect=yes | ||
185 | combinedname=Ipod mini 1g, mini 2g, 3g, 4g, color, video, nano 1g | ||
87 | 186 | ||
88 | [ipodnano] | 187 | [ipodnano] |
89 | name=Apple Ipod Nano (1st gen) | 188 | name=Apple Ipod Nano (1st gen) |
189 | platform=ipodnano | ||
90 | released=no | 190 | released=no |
191 | needsbootloader=yes | ||
192 | bootloadermethod=ipodpatcher | ||
193 | bootloadername=none | ||
194 | autodetect=yes | ||
195 | combinedname=Ipod mini 1g, mini 2g, 3g, 4g, color, video, nano 1g | ||
91 | 196 | ||
92 | [ipod4gray] | 197 | [ipod4gray] |
93 | name=Apple Ipod (4th gen, greyscale) | 198 | name=Apple Ipod (4th gen, greyscale) |
199 | platform=ipod4gray | ||
94 | released=no | 200 | released=no |
201 | needsbootloader=yes | ||
202 | bootloadermethod=ipodpatcher | ||
203 | bootloadername=none | ||
204 | autodetect=yes | ||
205 | combinedname=Ipod mini 1g, mini 2g, 3g, 4g, color, video, nano 1g | ||
95 | 206 | ||
96 | [ipodvideo] | 207 | [ipodvideo] |
97 | name=Apple Ipod Video (5th gen) | 208 | name=Apple Ipod Video (5th gen) |
209 | platform=ipodvideo | ||
98 | released=no | 210 | released=no |
211 | needsbootloader=yes | ||
212 | bootloadermethod=ipodpatcher | ||
213 | bootloadername=none | ||
214 | autodetect=yes | ||
215 | combinedname=Ipod mini 1g, mini 2g, 3g, 4g, color, video, nano 1g | ||
99 | 216 | ||
100 | [ipod3g] | 217 | [ipod3g] |
101 | name=Apple Ipod (3rd gen) | 218 | name=Apple Ipod (3rd gen) |
219 | platform=ipod3g | ||
102 | released=no | 220 | released=no |
221 | needsbootloader=yes | ||
222 | bootloadermethod=ipodpatcher | ||
223 | bootloadername=none | ||
224 | autodetect=yes | ||
225 | combinedname=Ipod mini 1g, mini 2g, 3g, 4g, color, video, nano 1g | ||
103 | 226 | ||
104 | [ipodmini1g] | 227 | [ipodmini1g] |
105 | name=Apple Ipod Mini (1st gen) | 228 | name=Apple Ipod Mini (1st gen) |
229 | platform=ipodmini1g | ||
106 | released=no | 230 | released=no |
231 | needsbootloader=yes | ||
232 | bootloadermethod=ipodpatcher | ||
233 | bootloadername=none | ||
234 | autodetect=yes | ||
235 | combinedname=Ipod mini 1g, mini 2g, 3g, 4g, color, video, nano 1g | ||
107 | 236 | ||
108 | [ipodmini2g] | 237 | [ipodmini2g] |
109 | name=Apple Ipod Mini (2nd gen) | 238 | name=Apple Ipod Mini (2nd gen) |
239 | platform=ipodmini2g | ||
110 | released=no | 240 | released=no |
241 | needsbootloader=yes | ||
242 | bootloadermethod=ipodpatcher | ||
243 | bootloadername=none | ||
244 | autodetect=yes | ||
245 | combinedname=Ipod mini 1g, mini 2g, 3g, 4g, color, video, nano 1g | ||
111 | 246 | ||
112 | [iaudiox5] | 247 | [iaudiox5] |
113 | name=Cowan iAudio X5 | 248 | name=Cowan iAudio X5 , X5L |
249 | platform=iaudiox5 | ||
114 | released=no | 250 | released=no |
251 | needsbootloader=yes | ||
252 | bootloadermethod=iaudio | ||
253 | bootloadername=x5_fw.bin | ||
254 | autodetect=no | ||
255 | combinedname= | ||
256 | |||
257 | [iaudiox5v] | ||
258 | name=Cowan iAudio X5V | ||
259 | platform=iaudiox5 | ||
260 | released=no | ||
261 | needsbootloader=yes | ||
262 | bootloadermethod=iaudio | ||
263 | bootloadername=x5v_fw.bin | ||
264 | autodetect=no | ||
265 | combinedname= | ||
266 | |||
267 | [gigabeatf] | ||
268 | name=Toshiba Gigabeat F , X | ||
269 | platform=gigabeatf | ||
270 | needsbootloader=yes | ||
271 | bootloadermethod=gigabeatf | ||
272 | bootloadername=FWIMG01.DAT | ||
273 | autodetect=no | ||
274 | combinedname= | ||
diff --git a/rbutil/rbutil.r b/rbutil/rbutil.r new file mode 100755 index 0000000000..e7c39a882c --- /dev/null +++ b/rbutil/rbutil.r | |||
@@ -0,0 +1,2675 @@ | |||
1 | data 'vers' (2) { | ||
2 | $"0100 2000 0000 0531 2E30 6430 0531 2E30" | ||
3 | $"6430"} ; | ||
4 | |||
5 | data 'vers' (1) { | ||
6 | $"0100 2000 0000 0531 2E30 6430 0531 2E30" | ||
7 | $"6430"} ; | ||
8 | |||
9 | data 'ICN#' (-16455, "Item Icon") { | ||
10 | $"FFFF FFFF F700 001D BB00 002B D700 0057" | ||
11 | $"ED00 009D BB00 0539 DD00 1261 F700 A4E1" | ||
12 | $"FFFE 539F 8100 A52F 8102 AED7 8105 4BAB" | ||
13 | $"8103 BD12 810E 4A65 8105 2492 8102 F926" | ||
14 | $"810B 5FA9 8114 0B7E 8108 05AC 8100 0021" | ||
15 | $"8100 0027 8100 0021 8100 0021 8100 0021" | ||
16 | $"81FF FFE1 8100 0FE1 8122 0AE1 8108 2FA1" | ||
17 | $"8141 0DE1 8104 0B61 8100 9DA1 FFFF FFFF" | ||
18 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
19 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
20 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
21 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
22 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
23 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
24 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
25 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
26 | }; | ||
27 | |||
28 | data 'icl4' (-16455, "Item Icon") { | ||
29 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
30 | $"F333 333F 0000 0000 0000 0000 0003 3E0F" | ||
31 | $"F333 333F 0000 0000 0000 0000 00A4 3AEF" | ||
32 | $"F333 333F 0000 0000 0000 0000 0DCA 3EEF" | ||
33 | $"F333 333F 0000 0000 0000 0000 E1C5 FE0F" | ||
34 | $"F333 333F 0000 0000 000C CDCB 1DEA E00F" | ||
35 | $"F333 333F 0000 0000 0CCC 1CB1 C3FD 000F" | ||
36 | $"F333 333F 0000 0000 D02C CB1D A9E0 000F" | ||
37 | $"FFFF FFFF FFFF FFFC C2C3 BCD3 EDDF FFFF" | ||
38 | $"F000 000F 0000 00CC 2DAB 02BF 2DDD 666F" | ||
39 | $"F000 000F 0000 0C1D BBB1 BEAB BDCB D66F" | ||
40 | $"F000 000F 0000 CCD4 E2CB BAEE B42C CD6F" | ||
41 | $"F000 000F 0000 C2BA BD2E FF3B DCC2 DCDD" | ||
42 | $"F000 000F 0000 D3BD D2CC 2DCD 02D0 DCEB" | ||
43 | $"F000 000F 0000 0EAC CDB2 CCCC 20D2 CDDB" | ||
44 | $"F000 000F 0000 CBBB 3AAE E2D2 CC2C C2DC" | ||
45 | $"F000 000F 0000 BC2E DD4A EEAE EBBB BBCD" | ||
46 | $"F000 000F 000C DEDD 00CD DAEA AAEF 35DC" | ||
47 | $"F000 000F 000B D000 0000 CCD4 DEBE EADC" | ||
48 | $"F000 000F 0000 0000 0000 0000 00F0 0BCD" | ||
49 | $"F000 000F 0000 0000 0000 0000 00F0 0FEE" | ||
50 | $"F000 000F 0000 0000 0000 0000 00F0 000F" | ||
51 | $"F000 000F 0000 0000 0000 0000 00F0 000F" | ||
52 | $"F000 000F 0000 0000 0000 0000 00F0 000F" | ||
53 | $"F000 000F FFFF FFFF FFFF FFFF FFF0 000F" | ||
54 | $"F000 000F 1111 1111 1111 F999 99F0 000F" | ||
55 | $"F000 000F 1111 1111 1111 F898 99F0 000F" | ||
56 | $"F000 000F 1111 1111 1111 F999 98F0 000F" | ||
57 | $"F000 000F 1111 1111 1111 F989 99F0 000F" | ||
58 | $"F000 000F 1111 1111 1111 F899 89F0 000F" | ||
59 | $"F000 000F 1111 1111 1111 F989 98F0 000F" | ||
60 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
61 | }; | ||
62 | |||
63 | data 'icl8' (-16455, "Item Icon") { | ||
64 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
65 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
66 | $"FF23 2323 2323 23FF 0000 0000 0000 0000" | ||
67 | $"0000 0000 0000 0000 0000 00DB 22FC 00FF" | ||
68 | $"FF23 2323 2323 23FF 0000 0000 0000 0000" | ||
69 | $"0000 0000 0000 0000 0000 DB21 6BDB FCFF" | ||
70 | $"FF23 2323 2323 23FF 0000 0000 0000 0000" | ||
71 | $"0000 0000 0000 0000 0081 2BDA 6BB2 FCFF" | ||
72 | $"FF23 2323 2323 23FF 0000 0000 0000 0000" | ||
73 | $"0000 0000 0000 0000 FB03 5581 FDFB 00FF" | ||
74 | $"FF23 2323 2323 23FF 0000 0000 0000 0000" | ||
75 | $"0000 0007 2C32 325E 0358 88DE FC00 00FF" | ||
76 | $"FF23 2323 2323 23FF 0000 0000 0000 0000" | ||
77 | $"002B 0832 0832 5803 3988 ADFB 0000 00FF" | ||
78 | $"FF23 2323 2323 23FF 0000 0000 0000 0000" | ||
79 | $"3208 3208 5658 0934 88AD FC00 0000 00FF" | ||
80 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FF32" | ||
81 | $"0833 3964 5809 3388 AD32 FBFF FFFF FFFF" | ||
82 | $"FF00 0000 0000 00FF 0000 0000 0000 3208" | ||
83 | $"3339 8858 0934 82DF 3933 3281 D2D2 D2FF" | ||
84 | $"FF00 0000 0000 00FF 0000 0000 002C 0833" | ||
85 | $"6488 5E09 3388 B35E 6433 3233 81D2 D2FF" | ||
86 | $"FF00 0000 0000 00FF 0000 0000 F608 395D" | ||
87 | $"8858 0934 82E0 8888 5E39 332C 3281 D2FF" | ||
88 | $"FF00 0000 0000 00FF 0000 0000 F739 5E8E" | ||
89 | $"820F 5788 FFFD 645E 3357 0E32 3332 81F9" | ||
90 | $"FF00 0000 0000 00FF 0000 0000 3965 8833" | ||
91 | $"3933 3332 3357 320E 2C0E 322C 0E2D 815D" | ||
92 | $"FF00 0000 0000 00FF 0000 0000 F5FC 8808" | ||
93 | $"325D 5D34 320E 082C 0E2C 3233 3232 FA58" | ||
94 | $"FF00 0000 0000 00FF 0000 0000 2B58 3464" | ||
95 | $"88DE 8988 885E 5D33 3232 3332 335E F954" | ||
96 | $"FF00 0000 0000 00FF 0000 0000 5D33 5D82" | ||
97 | $"FA5D 8789 8EAC 89AC 885E 645E 5D64 5654" | ||
98 | $"FF00 0000 0000 00FF 0000 002C 8187 5756" | ||
99 | $"0000 F632 8189 B2DE 89B2 88AC 8888 F9F8" | ||
100 | $"FF00 0000 0000 00FF 0000 0081 562B 0000" | ||
101 | $"0000 0000 F6F7 325D 815E FB88 88FC 5656" | ||
102 | $"FF00 0000 0000 00FF 0000 0000 0000 0000" | ||
103 | $"0000 0000 0000 0000 0000 FF00 005D 57F8" | ||
104 | $"FF00 0000 0000 00FF 0000 0000 0000 0000" | ||
105 | $"0000 0000 0000 0000 0000 FF00 00FD AB88" | ||
106 | $"FF00 0000 0000 00FF 0000 0000 0000 0000" | ||
107 | $"0000 0000 0000 0000 0000 FF00 0000 00FF" | ||
108 | $"FF00 0000 0000 00FF 0000 0000 0000 0000" | ||
109 | $"0000 0000 0000 0000 0000 FF00 0000 00FF" | ||
110 | $"FF00 0000 0000 00FF 0000 0000 0000 0000" | ||
111 | $"0000 0000 0000 0000 0000 FF00 0000 00FF" | ||
112 | $"FF00 0000 0000 00FF FFFF FFFF FFFF FFFF" | ||
113 | $"FFFF FFFF FFFF FFFF FFFF FF00 0000 00FF" | ||
114 | $"FF00 0000 0000 00FF 0505 0505 0505 0505" | ||
115 | $"0505 0505 FFE6 E6E6 E6E6 FF00 0000 00FF" | ||
116 | $"FF00 0000 0000 00FF 0505 0505 0505 0505" | ||
117 | $"0505 0505 FFE5 E6E5 E6E6 FF00 0000 00FF" | ||
118 | $"FF00 0000 0000 00FF 0505 0505 0505 0505" | ||
119 | $"0505 0505 FFE6 E6E6 E6E5 FF00 0000 00FF" | ||
120 | $"FF00 0000 0000 00FF 0505 0505 0505 0505" | ||
121 | $"0505 0505 FFE6 E5E6 E6E6 FF00 0000 00FF" | ||
122 | $"FF00 0000 0000 00FF 0505 0505 0505 0505" | ||
123 | $"0505 0505 FFE6 E6E6 E5E6 FF00 0000 00FF" | ||
124 | $"FF00 0000 0000 00FF 0505 0505 0505 0505" | ||
125 | $"0505 0505 FFE5 E6E6 E6E6 FF00 0000 00FF" | ||
126 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
127 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
128 | }; | ||
129 | |||
130 | data 'icm#' (-16455, "Item Icon") { | ||
131 | $"F24B D007 B028 5557 81B1 124A 8236 1005" | ||
132 | $"8000 1ABD 8030 557D FFFF FFFF FFFF FFFF" | ||
133 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
134 | }; | ||
135 | |||
136 | data 'icm4' (-16455, "Item Icon") { | ||
137 | $"A33F CDCC DCCD CAAE A333 0000 0000 CDEE" | ||
138 | $"333A 0000 CCCB 2E0D EDCE CDCD DB2B DB6F" | ||
139 | $"D00D 00C2 BBEA BCD5 D00D 00BD 2D2D CC2D" | ||
140 | $"D00D 0CDC CCDB BADC D00D 0000 0000 0DCE" | ||
141 | $"D00D 0000 0000 0D0D D00D B1BB 1BF9 FD0D" | ||
142 | $"D00D 1111 1199 8D0D ECDB BB1B B1F9 FECE" | ||
143 | }; | ||
144 | |||
145 | data 'icm8' (-16455, "Item Icon") { | ||
146 | $"DDDA DADD F8F8 F8F8 F8F8 F8F8 F864 8EAC" | ||
147 | $"DB23 23DC 0000 0000 0000 0000 F85C 89FB" | ||
148 | $"DC23 23DB 0000 0000 F608 3234 5E82 2AFA" | ||
149 | $"FBF8 F8FB F8F8 5633 335D 3488 575D EFF1" | ||
150 | $"F900 00FA 0000 2C63 5E34 FD64 5D2C 33AA" | ||
151 | $"FA00 00F9 0000 395E 5D5D 5733 0832 33F9" | ||
152 | $"F900 00FA 00F6 F92C 2B32 5D88 8888 88F8" | ||
153 | $"FA00 00F9 0000 0000 0000 0000 00FA F781" | ||
154 | $"F900 00FA 0000 0000 0000 0000 00F9 00F9" | ||
155 | $"FA00 00F9 3559 5335 5959 E9E7 E7FA 00FA" | ||
156 | $"F900 00FA 0505 0505 0505 E8E6 E6F9 00F9" | ||
157 | $"FBF8 F8FB 592F 5959 2F59 E9E7 E7FB F8FB" | ||
158 | }; | ||
159 | |||
160 | data 'icns' (-16455, "Item Icon") { | ||
161 | $"6963 6E73 0000 9AB8 4943 4E23 0000 0108" | ||
162 | $"FFFF FFFF F700 001D BB00 002B D700 0057" | ||
163 | $"ED00 009D BB00 0539 DD00 1261 F700 A4E1" | ||
164 | $"FFFE 539F 8100 A52F 8102 AED7 8105 4BAB" | ||
165 | $"8103 BD12 810E 4A65 8105 2492 8102 F926" | ||
166 | $"810B 5FA9 8114 0B7E 8108 05AC 8100 0021" | ||
167 | $"8100 0027 8100 0021 8100 0021 8100 0021" | ||
168 | $"81FF FFE1 8100 0FE1 8122 0AE1 8108 2FA1" | ||
169 | $"8141 0DE1 8104 0B61 8100 9DA1 FFFF FFFF" | ||
170 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
171 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
172 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
173 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
174 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
175 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
176 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
177 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
178 | $"6963 6C34 0000 0208 FFFF FFFF FFFF FFFF" | ||
179 | $"FFFF FFFF FFFF FFFF F333 333F 0000 0000" | ||
180 | $"0000 0000 0003 3E0F F333 333F 0000 0000" | ||
181 | $"0000 0000 00A4 3AEF F333 333F 0000 0000" | ||
182 | $"0000 0000 0DCA 3EEF F333 333F 0000 0000" | ||
183 | $"0000 0000 E1C5 FE0F F333 333F 0000 0000" | ||
184 | $"000C CDCB 1DEA E00F F333 333F 0000 0000" | ||
185 | $"0CCC 1CB1 C3FD 000F F333 333F 0000 0000" | ||
186 | $"D02C CB1D A9E0 000F FFFF FFFF FFFF FFFC" | ||
187 | $"C2C3 BCD3 EDDF FFFF F000 000F 0000 00CC" | ||
188 | $"2DAB 02BF 2DDD 666F F000 000F 0000 0C1D" | ||
189 | $"BBB1 BEAB BDCB D66F F000 000F 0000 CCD4" | ||
190 | $"E2CB BAEE B42C CD6F F000 000F 0000 C2BA" | ||
191 | $"BD2E FF3B DCC2 DCDD F000 000F 0000 D3BD" | ||
192 | $"D2CC 2DCD 02D0 DCEB F000 000F 0000 0EAC" | ||
193 | $"CDB2 CCCC 20D2 CDDB F000 000F 0000 CBBB" | ||
194 | $"3AAE E2D2 CC2C C2DC F000 000F 0000 BC2E" | ||
195 | $"DD4A EEAE EBBB BBCD F000 000F 000C DEDD" | ||
196 | $"00CD DAEA AAEF 35DC F000 000F 000B D000" | ||
197 | $"0000 CCD4 DEBE EADC F000 000F 0000 0000" | ||
198 | $"0000 0000 00F0 0BCD F000 000F 0000 0000" | ||
199 | $"0000 0000 00F0 0FEE F000 000F 0000 0000" | ||
200 | $"0000 0000 00F0 000F F000 000F 0000 0000" | ||
201 | $"0000 0000 00F0 000F F000 000F 0000 0000" | ||
202 | $"0000 0000 00F0 000F F000 000F FFFF FFFF" | ||
203 | $"FFFF FFFF FFF0 000F F000 000F 1111 1111" | ||
204 | $"1111 F999 99F0 000F F000 000F 1111 1111" | ||
205 | $"1111 F898 99F0 000F F000 000F 1111 1111" | ||
206 | $"1111 F999 98F0 000F F000 000F 1111 1111" | ||
207 | $"1111 F989 99F0 000F F000 000F 1111 1111" | ||
208 | $"1111 F899 89F0 000F F000 000F 1111 1111" | ||
209 | $"1111 F989 98F0 000F FFFF FFFF FFFF FFFF" | ||
210 | $"FFFF FFFF FFFF FFFF 6963 6C38 0000 0408" | ||
211 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
212 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
213 | $"FF23 2323 2323 23FF 0000 0000 0000 0000" | ||
214 | $"0000 0000 0000 0000 0000 00DB 22FC 00FF" | ||
215 | $"FF23 2323 2323 23FF 0000 0000 0000 0000" | ||
216 | $"0000 0000 0000 0000 0000 DB21 6BDB FCFF" | ||
217 | $"FF23 2323 2323 23FF 0000 0000 0000 0000" | ||
218 | $"0000 0000 0000 0000 0081 2BDA 6BB2 FCFF" | ||
219 | $"FF23 2323 2323 23FF 0000 0000 0000 0000" | ||
220 | $"0000 0000 0000 0000 FB03 5581 FDFB 00FF" | ||
221 | $"FF23 2323 2323 23FF 0000 0000 0000 0000" | ||
222 | $"0000 0007 2C32 325E 0358 88DE FC00 00FF" | ||
223 | $"FF23 2323 2323 23FF 0000 0000 0000 0000" | ||
224 | $"002B 0832 0832 5803 3988 ADFB 0000 00FF" | ||
225 | $"FF23 2323 2323 23FF 0000 0000 0000 0000" | ||
226 | $"3208 3208 5658 0934 88AD FC00 0000 00FF" | ||
227 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FF32" | ||
228 | $"0833 3964 5809 3388 AD32 FBFF FFFF FFFF" | ||
229 | $"FF00 0000 0000 00FF 0000 0000 0000 3208" | ||
230 | $"3339 8858 0934 82DF 3933 3281 D2D2 D2FF" | ||
231 | $"FF00 0000 0000 00FF 0000 0000 002C 0833" | ||
232 | $"6488 5E09 3388 B35E 6433 3233 81D2 D2FF" | ||
233 | $"FF00 0000 0000 00FF 0000 0000 F608 395D" | ||
234 | $"8858 0934 82E0 8888 5E39 332C 3281 D2FF" | ||
235 | $"FF00 0000 0000 00FF 0000 0000 F739 5E8E" | ||
236 | $"820F 5788 FFFD 645E 3357 0E32 3332 81F9" | ||
237 | $"FF00 0000 0000 00FF 0000 0000 3965 8833" | ||
238 | $"3933 3332 3357 320E 2C0E 322C 0E2D 815D" | ||
239 | $"FF00 0000 0000 00FF 0000 0000 F5FC 8808" | ||
240 | $"325D 5D34 320E 082C 0E2C 3233 3232 FA58" | ||
241 | $"FF00 0000 0000 00FF 0000 0000 2B58 3464" | ||
242 | $"88DE 8988 885E 5D33 3232 3332 335E F954" | ||
243 | $"FF00 0000 0000 00FF 0000 0000 5D33 5D82" | ||
244 | $"FA5D 8789 8EAC 89AC 885E 645E 5D64 5654" | ||
245 | $"FF00 0000 0000 00FF 0000 002C 8187 5756" | ||
246 | $"0000 F632 8189 B2DE 89B2 88AC 8888 F9F8" | ||
247 | $"FF00 0000 0000 00FF 0000 0081 562B 0000" | ||
248 | $"0000 0000 F6F7 325D 815E FB88 88FC 5656" | ||
249 | $"FF00 0000 0000 00FF 0000 0000 0000 0000" | ||
250 | $"0000 0000 0000 0000 0000 FF00 005D 57F8" | ||
251 | $"FF00 0000 0000 00FF 0000 0000 0000 0000" | ||
252 | $"0000 0000 0000 0000 0000 FF00 00FD AB88" | ||
253 | $"FF00 0000 0000 00FF 0000 0000 0000 0000" | ||
254 | $"0000 0000 0000 0000 0000 FF00 0000 00FF" | ||
255 | $"FF00 0000 0000 00FF 0000 0000 0000 0000" | ||
256 | $"0000 0000 0000 0000 0000 FF00 0000 00FF" | ||
257 | $"FF00 0000 0000 00FF 0000 0000 0000 0000" | ||
258 | $"0000 0000 0000 0000 0000 FF00 0000 00FF" | ||
259 | $"FF00 0000 0000 00FF FFFF FFFF FFFF FFFF" | ||
260 | $"FFFF FFFF FFFF FFFF FFFF FF00 0000 00FF" | ||
261 | $"FF00 0000 0000 00FF 0505 0505 0505 0505" | ||
262 | $"0505 0505 FFE6 E6E6 E6E6 FF00 0000 00FF" | ||
263 | $"FF00 0000 0000 00FF 0505 0505 0505 0505" | ||
264 | $"0505 0505 FFE5 E6E5 E6E6 FF00 0000 00FF" | ||
265 | $"FF00 0000 0000 00FF 0505 0505 0505 0505" | ||
266 | $"0505 0505 FFE6 E6E6 E6E5 FF00 0000 00FF" | ||
267 | $"FF00 0000 0000 00FF 0505 0505 0505 0505" | ||
268 | $"0505 0505 FFE6 E5E6 E6E6 FF00 0000 00FF" | ||
269 | $"FF00 0000 0000 00FF 0505 0505 0505 0505" | ||
270 | $"0505 0505 FFE6 E6E6 E5E6 FF00 0000 00FF" | ||
271 | $"FF00 0000 0000 00FF 0505 0505 0505 0505" | ||
272 | $"0505 0505 FFE5 E6E6 E6E6 FF00 0000 00FF" | ||
273 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
274 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
275 | $"696C 3332 0000 0670 9E00 83FF 0000 90FF" | ||
276 | $"058E EA44 FF00 0083 FF00 008F FF06 8FEA" | ||
277 | $"AB8E 4400 0083 FF00 008E FF07 5ABE AB8E" | ||
278 | $"4544 0000 83FF 0000 8DFF 0864 FE91 6945" | ||
279 | $"44FF 0000 83FF 0000 88FF 0DE2 E1CB B8A1" | ||
280 | $"FEB1 6245 44FF FF00 0083 FF00 0086 FF0A" | ||
281 | $"E2E6 E9EF B89F FEC1 6245 4480 FF01 0000" | ||
282 | $"83FF 0000 85FF 0AD9 E4E9 EBB8 9FFE C362" | ||
283 | $"4544 81FF 8D00 0BD7 E3DE BA8F A2FE C662" | ||
284 | $"45D0 6183 0083 FF00 0083 FF0D DAE5 D4B3" | ||
285 | $"679A FEC8 6245 A5C9 D361 8200 83FF 0000" | ||
286 | $"82FF 0FDC E2D4 A469 9EF2 C962 4579 9BC2" | ||
287 | $"D2D0 6181 0083 FF00 0081 FF11 E8DD D2B3" | ||
288 | $"6AA0 F3C7 5C1B 5D89 9CB5 CDD5 D361 8000" | ||
289 | $"83FF 0000 81FF 14DF C29C 657A DEB3 6A0D" | ||
290 | $"2082 ADBD C3D1 D5D7 D069 8800 83FF 0000" | ||
291 | $"81FF 14AE 8170 B9C5 C1CE C7B2 AFDA E7EA" | ||
292 | $"E1D9 D8D9 D469 8600 83FF 0000 81FF 14EE" | ||
293 | $"5C75 EBD4 9FB3 C4DE E7EC EBE3 E4DD D6CE" | ||
294 | $"C672 9C00 83FF 0000 81FF 14C6 A2C7 886F" | ||
295 | $"4D61 6F7F 9094 C1DB CCC1 C0B7 AB82 A200" | ||
296 | $"83FF 0000 81FF 1499 BFAE 5C8A 856D 504E" | ||
297 | $"5A5B 556C 8F8B 8C95 888F A400 83FF 0000" | ||
298 | $"80FF 15CA 667C 8C9F FFFF DCB5 8251 4A43" | ||
299 | $"3F4B 535E 6860 8FA6 0083 FF00 0080 FF02" | ||
300 | $"669F C283 FF0C DCC3 A88D 847B 686D 5A5E" | ||
301 | $"8FAF 0083 FF00 008F FF06 00FF FF81 8FB5" | ||
302 | $"0083 FF00 008F FF06 00FF FF22 4444 0083" | ||
303 | $"FF00 008F FF00 0081 FF01 0000 83FF 0000" | ||
304 | $"8FFF 0000 81FF 0100 0083 FF00 008F FF00" | ||
305 | $"0081 FF01 0000 83FF 9100 81FF 0100 0083" | ||
306 | $"FF00 0089 FF84 0081 FF01 0000 83FF 0000" | ||
307 | $"89FF 8400 81FF 0100 0083 FF00 0089 FF84" | ||
308 | $"0081 FF01 0000 83FF 0000 89FF 8400 81FF" | ||
309 | $"0100 0083 FF00 0089 FF84 0081 FF01 0000" | ||
310 | $"83FF 0000 89FF 8400 81FF 9E00 A500 90FF" | ||
311 | $"0301 0044 FF86 008F FF04 0900 0001 4486" | ||
312 | $"008E FF05 67BC 0001 1944 8600 8DFF 0666" | ||
313 | $"E49D 7119 44FF 8600 88FF 0BC9 BEA7 9B82" | ||
314 | $"E489 4419 44FF FF86 0086 FF0A CFB6 B9BB" | ||
315 | $"9B79 E493 4419 4480 FF86 0085 FF0A B2AC" | ||
316 | $"B6B5 9B7D E497 4419 4481 FF8D 000B AFAF" | ||
317 | $"A06E 5180 E49A 4419 9B62 8300 83FF 0000" | ||
318 | $"83FF 0DB2 B397 682E 76E4 9D44 1963 96A1" | ||
319 | $"6282 0083 FF00 0082 FF0F BEB0 9953 307E" | ||
320 | $"CF9C 4619 3459 8BA6 9C62 8100 83FF 0000" | ||
321 | $"81FF 11E0 B191 672E 7ED0 9A44 0E2A 3C55" | ||
322 | $"7BA0 A8A2 6280 0083 FF00 0081 FF14 C576" | ||
323 | $"4B2D 51B5 864F 040E 3461 818A 9FA8 A7A1" | ||
324 | $"687C 0083 FF00 0081 FF14 722D 3A7D 8683" | ||
325 | $"9998 8C85 A0B3 B9AE A9AA AAA5 687E 0083" | ||
326 | $"FF00 0081 FF14 E844 38B3 A962 6F7D 9DB2" | ||
327 | $"BEBC B5B7 AFA5 9B95 7392 0083 FF00 0081" | ||
328 | $"FF14 C283 9A44 3D1E 2934 4455 5C8E AC9A" | ||
329 | $"8B89 7D75 829A 0083 FF00 0081 FF14 6E8B" | ||
330 | $"8044 746B 4522 222F 302E 425C 5558 6055" | ||
331 | $"8E9E 0083 FF00 0080 FF15 B466 5A81 9FFF" | ||
332 | $"FFD6 9F5B 231B 1310 202B 333C 378E A000" | ||
333 | $"83FF 0000 80FF 0266 9FC2 83FF 0CD6 B692" | ||
334 | $"6F66 5B47 4931 3B8E A600 83FF 0000 8FFF" | ||
335 | $"0600 FFFF 728E AB00 83FF 0000 8FFF 0600" | ||
336 | $"FFFF 2244 4400 83FF 0000 8FFF 0000 81FF" | ||
337 | $"0100 0083 FF00 008F FF00 0081 FF01 0000" | ||
338 | $"83FF 0000 8FFF 0000 81FF 0100 0083 FF91" | ||
339 | $"0081 FF01 0000 83FF 0000 89FF 0000 827B" | ||
340 | $"0000 81FF 0100 0083 FF00 0089 FF00 0082" | ||
341 | $"7B00 0081 FF01 0000 83FF 0000 89FF 0000" | ||
342 | $"827B 0000 81FF 0100 0083 FF00 0089 FF00" | ||
343 | $"0082 7B00 0081 FF01 0000 83FF 0000 89FF" | ||
344 | $"0000 827B 0000 81FF 0100 0083 FF00 0089" | ||
345 | $"FF00 0082 7B00 0081 FF9E 00A5 0090 FF03" | ||
346 | $"0F43 44FF 8600 8FFF 0417 4316 0F44 8600" | ||
347 | $"8EFF 0565 C416 0F1A 4486 008D FF06 5567" | ||
348 | $"A76C 1A44 FF86 0088 FF0B BCA9 9293 3E67" | ||
349 | $"4D23 1A44 FFFF 8600 86FF 0AC6 9A98 9893" | ||
350 | $"3167 4A23 1A44 80FF 8600 85FF 0A9C 8E99" | ||
351 | $"9593 3767 4F23 1A44 81FF 8D00 0B92 8F86" | ||
352 | $"5747 3967 5223 1A7A 6183 0083 FF00 0083" | ||
353 | $"FF0D 9591 7C51 2A32 6753 231A 4B78 8361" | ||
354 | $"80FF 0100 0083 FF00 0082 FF13 A98B 7D41" | ||
355 | $"2C37 6353 241A 2C44 6D8A 8061 FFFF 0000" | ||
356 | $"83FF 0000 81FF 14DA 9278 5427 3761 5122" | ||
357 | $"1124 323F 6084 8D86 61FF 0000 83FF 0000" | ||
358 | $"81FF 14B7 5B3C 2730 5956 2A0A 0C2C 4F65" | ||
359 | $"6C85 8D89 8869 8800 83FF 0000 81FF 1461" | ||
360 | $"202F 6A76 7683 8378 748C 9A9D 918E 8E8C" | ||
361 | $"8869 5500 83FF 0000 81FF 14E7 2230 9694" | ||
362 | $"5354 5F80 95A2 9E9A 9D94 8881 7A73 4400" | ||
363 | $"83FF 0000 81FF 14C6 4651 3538 191F 2A36" | ||
364 | $"444A 7591 8173 7268 6081 FF00 83FF 0000" | ||
365 | $"81FF 0859 6A49 2277 683C 1A1D 8028 0838" | ||
366 | $"4D47 484F 478E FF00 83FF 0000 80FF 15A8" | ||
367 | $"654A 7F9F FFFF D39A 551C 140E 0B1B 262B" | ||
368 | $"3330 8E9A 0083 FF00 0080 FF02 659F C283" | ||
369 | $"FF0C D3B2 8E69 5F56 4243 2B35 8E9F 0083" | ||
370 | $"FF00 008F FF06 00FF FF6B 8EA7 0083 FF00" | ||
371 | $"008F FF06 00FF FF22 4444 0083 FF00 008F" | ||
372 | $"FF00 0081 FF01 0000 83FF 0000 8FFF 0000" | ||
373 | $"81FF 0100 0083 FF00 008F FF00 0081 FF01" | ||
374 | $"0000 83FF 9100 81FF 0100 0083 FF91 0081" | ||
375 | $"FF01 0000 83FF 9100 81FF 0100 0083 FF91" | ||
376 | $"0081 FF01 0000 83FF 9100 81FF 0100 0083" | ||
377 | $"FF91 0081 FF01 0000 83FF 9100 81FF 9E00" | ||
378 | $"6C38 6D6B 0000 0408 FFFF FFFF FFFF FFFF" | ||
379 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
380 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
381 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
382 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
383 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
384 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
385 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
386 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
387 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
388 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
389 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
390 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
391 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
392 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
393 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
394 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
395 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
396 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
397 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
398 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
399 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
400 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
401 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
402 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
403 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
404 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
405 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
406 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
407 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
408 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
409 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
410 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
411 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
412 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
413 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
414 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
415 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
416 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
417 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
418 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
419 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
420 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
421 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
422 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
423 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
424 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
425 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
426 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
427 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
428 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
429 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
430 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
431 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
432 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
433 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
434 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
435 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
436 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
437 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
438 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
439 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
440 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
441 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
442 | $"FFFF FFFF FFFF FFFF 6963 6823 0000 0248" | ||
443 | $"FFFF FFFF FFFF FFFF FFFF FFFF F770 0000" | ||
444 | $"0001 EEB0 0000 0001 F5D0 0000 0001 EF70" | ||
445 | $"0000 0001 DBB0 0000 0001 F570 0000 0001" | ||
446 | $"FED0 0000 0001 D5B0 0000 0001 EF70 0000" | ||
447 | $"0001 FAD0 0000 0001 FFFF FFFF FFFF FFFF" | ||
448 | $"FFFF FFFF C010 0000 01FF C010 0000 01FF" | ||
449 | $"C010 0000 01EF C010 0000 01FF C010 0000" | ||
450 | $"01FB C010 0000 01DF C010 0000 01FF C010" | ||
451 | $"0000 01FF C010 0000 01FF C010 0000 0181" | ||
452 | $"C010 0000 0181 C010 0000 0181 C010 0000" | ||
453 | $"0181 C010 0000 0181 C010 0000 0181 C010" | ||
454 | $"0000 0181 C010 0000 0181 C010 0000 0181" | ||
455 | $"C010 0000 0181 C010 0000 0181 C010 0000" | ||
456 | $"0181 C010 0000 0181 C01F FFFF FF81 C01F" | ||
457 | $"FFFF FF81 C010 0003 FF81 C011 1113 D581" | ||
458 | $"C010 4443 6F81 C012 000B BB81 C010 8883" | ||
459 | $"DD81 C014 2203 6B81 C011 004B BD81 C010" | ||
460 | $"1103 F781 C014 0423 5B81 FFFF FFFF FFFF" | ||
461 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
462 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
463 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
464 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
465 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
466 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
467 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
468 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
469 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
470 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
471 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
472 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
473 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
474 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
475 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
476 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
477 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
478 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
479 | $"6963 6834 0000 0488 FFFF FFFF FFFF FFFF" | ||
480 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
481 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
482 | $"FFFF FFFF FFFF FFFF FF33 3333 333F 0000" | ||
483 | $"0000 0000 0000 0000 0000 0000 0000 000F" | ||
484 | $"FF33 3333 333F 0000 0000 0000 0000 0000" | ||
485 | $"0000 0000 0000 000F FF33 3333 333F 0000" | ||
486 | $"0000 0000 0000 0000 0000 0000 0000 000F" | ||
487 | $"FF33 3333 333F 0000 0000 0000 0000 0000" | ||
488 | $"0000 0000 0000 000F FF33 3333 333F 0000" | ||
489 | $"0000 0000 0000 0000 0000 0000 0000 000F" | ||
490 | $"FF33 3333 333F 0000 0000 0000 0000 0000" | ||
491 | $"0000 0000 0000 000F FF33 3333 333F 0000" | ||
492 | $"0000 0000 0000 0000 0000 0000 0000 000F" | ||
493 | $"FF33 3333 333F 0000 0000 0000 0000 0000" | ||
494 | $"0000 0000 0000 000F FF33 3333 333F 0000" | ||
495 | $"0000 0000 0000 0000 0000 0000 0000 000F" | ||
496 | $"FF33 3333 333F 0000 0000 0000 0000 0000" | ||
497 | $"0000 0000 0000 000F FFFF FFFF FFFF FFFF" | ||
498 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
499 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
500 | $"FFFF FFFF FFFF FFFF FF00 0000 000F 0000" | ||
501 | $"0000 0000 0000 0000 0000 000F F666 666F" | ||
502 | $"FF00 0000 000F 0000 0000 0000 0000 0000" | ||
503 | $"0000 000F F666 666F FF00 0000 000F 0000" | ||
504 | $"0000 0000 0000 0000 0000 000F F666 666F" | ||
505 | $"FF00 0000 000F 0000 0000 0000 0000 0000" | ||
506 | $"0000 000F F666 666F FF00 0000 000F 0000" | ||
507 | $"0000 0000 0000 0000 0000 000F F666 666F" | ||
508 | $"FF00 0000 000F 0000 0000 0000 0000 0000" | ||
509 | $"0000 000F F666 666F FF00 0000 000F 0000" | ||
510 | $"0000 0000 0000 0000 0000 000F F666 666F" | ||
511 | $"FF00 0000 000F 0000 0000 0000 0000 0000" | ||
512 | $"0000 000F FFFF FFFF FF00 0000 000F 0000" | ||
513 | $"0000 0000 0000 0000 0000 000F FFFF FFFF" | ||
514 | $"FF00 0000 000F 0000 0000 0000 0000 0000" | ||
515 | $"0000 000F F000 000F FF00 0000 000F 0000" | ||
516 | $"0000 0000 0000 0000 0000 000F F000 000F" | ||
517 | $"FF00 0000 000F 0000 0000 0000 0000 0000" | ||
518 | $"0000 000F F000 000F FF00 0000 000F 0000" | ||
519 | $"0000 0000 0000 0000 0000 000F F000 000F" | ||
520 | $"FF00 0000 000F 0000 0000 0000 0000 0000" | ||
521 | $"0000 000F F000 000F FF00 0000 000F 0000" | ||
522 | $"0000 0000 0000 0000 0000 000F F000 000F" | ||
523 | $"FF00 0000 000F 0000 0000 0000 0000 0000" | ||
524 | $"0000 000F F000 000F FF00 0000 000F 0000" | ||
525 | $"0000 0000 0000 0000 0000 000F F000 000F" | ||
526 | $"FF00 0000 000F 0000 0000 0000 0000 0000" | ||
527 | $"0000 000F F000 000F FF00 0000 000F 0000" | ||
528 | $"0000 0000 0000 0000 0000 000F F000 000F" | ||
529 | $"FF00 0000 000F 0000 0000 0000 0000 0000" | ||
530 | $"0000 000F F000 000F FF00 0000 000F 0000" | ||
531 | $"0000 0000 0000 0000 0000 000F F000 000F" | ||
532 | $"FF00 0000 000F 0000 0000 0000 0000 0000" | ||
533 | $"0000 000F F000 000F FF00 0000 000F FFFF" | ||
534 | $"FFFF FFFF FFFF FFFF FFFF FFFF F000 000F" | ||
535 | $"FF00 0000 000F FFFF FFFF FFFF FFFF FFFF" | ||
536 | $"FFFF FFFF F000 000F FF00 0000 000F 1111" | ||
537 | $"1111 1111 1111 11FF 9999 999F F000 000F" | ||
538 | $"FF00 0000 000F 1111 1111 1111 1111 11FF" | ||
539 | $"9989 898F F000 000F FF00 0000 000F 1111" | ||
540 | $"1111 1111 1111 11FF 8998 999F F000 000F" | ||
541 | $"FF00 0000 000F 1111 1111 1111 1111 11FF" | ||
542 | $"9899 989F F000 000F FF00 0000 000F 1111" | ||
543 | $"1111 1111 1111 11FF 9989 998F F000 000F" | ||
544 | $"FF00 0000 000F 1111 1111 1111 1111 11FF" | ||
545 | $"8999 899F F000 000F FF00 0000 000F 1111" | ||
546 | $"1111 1111 1111 11FF 9899 989F F000 000F" | ||
547 | $"FF00 0000 000F 1111 1111 1111 1111 11FF" | ||
548 | $"9999 899F F000 000F FF00 0000 000F 1111" | ||
549 | $"1111 1111 1111 11FF 8989 989F F000 000F" | ||
550 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
551 | $"FFFF FFFF FFFF FFFF 6963 6838 0000 0908" | ||
552 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
553 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
554 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
555 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
556 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
557 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
558 | $"FFFF 2323 2323 2323 2323 23FF 0000 0000" | ||
559 | $"0000 0000 0000 0000 0000 0000 0000 0000" | ||
560 | $"0000 0000 0000 0000 0000 0000 0000 00FF" | ||
561 | $"FFFF 2323 2323 2323 2323 23FF 0000 0000" | ||
562 | $"0000 0000 0000 0000 0000 0000 0000 0000" | ||
563 | $"0000 0000 0000 0000 0000 0000 0000 00FF" | ||
564 | $"FFFF 2323 2323 2323 2323 23FF 0000 0000" | ||
565 | $"0000 0000 0000 0000 0000 0000 0000 0000" | ||
566 | $"0000 0000 0000 0000 0000 0000 0000 00FF" | ||
567 | $"FFFF 2323 2323 2323 2323 23FF 0000 0000" | ||
568 | $"0000 0000 0000 0000 0000 0000 0000 0000" | ||
569 | $"0000 0000 0000 0000 0000 0000 0000 00FF" | ||
570 | $"FFFF 2323 2323 2323 2323 23FF 0000 0000" | ||
571 | $"0000 0000 0000 0000 0000 0000 0000 0000" | ||
572 | $"0000 0000 0000 0000 0000 0000 0000 00FF" | ||
573 | $"FFFF 2323 2323 2323 2323 23FF 0000 0000" | ||
574 | $"0000 0000 0000 0000 0000 0000 0000 0000" | ||
575 | $"0000 0000 0000 0000 0000 0000 0000 00FF" | ||
576 | $"FFFF 2323 2323 2323 2323 23FF 0000 0000" | ||
577 | $"0000 0000 0000 0000 0000 0000 0000 0000" | ||
578 | $"0000 0000 0000 0000 0000 0000 0000 00FF" | ||
579 | $"FFFF 2323 2323 2323 2323 23FF 0000 0000" | ||
580 | $"0000 0000 0000 0000 0000 0000 0000 0000" | ||
581 | $"0000 0000 0000 0000 0000 0000 0000 00FF" | ||
582 | $"FFFF 2323 2323 2323 2323 23FF 0000 0000" | ||
583 | $"0000 0000 0000 0000 0000 0000 0000 0000" | ||
584 | $"0000 0000 0000 0000 0000 0000 0000 00FF" | ||
585 | $"FFFF 2323 2323 2323 2323 23FF 0000 0000" | ||
586 | $"0000 0000 0000 0000 0000 0000 0000 0000" | ||
587 | $"0000 0000 0000 0000 0000 0000 0000 00FF" | ||
588 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
589 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
590 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
591 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
592 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
593 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
594 | $"FFFF 0000 0000 0000 0000 00FF 0000 0000" | ||
595 | $"0000 0000 0000 0000 0000 0000 0000 0000" | ||
596 | $"0000 0000 0000 00FF FFD2 D2D2 D2D2 D2FF" | ||
597 | $"FFFF 0000 0000 0000 0000 00FF 0000 0000" | ||
598 | $"0000 0000 0000 0000 0000 0000 0000 0000" | ||
599 | $"0000 0000 0000 00FF FFD2 D2D2 D2D2 D2FF" | ||
600 | $"FFFF 0000 0000 0000 0000 00FF 0000 0000" | ||
601 | $"0000 0000 0000 0000 0000 0000 0000 0000" | ||
602 | $"0000 0000 0000 00FF FFD2 D2D2 D2D2 D2FF" | ||
603 | $"FFFF 0000 0000 0000 0000 00FF 0000 0000" | ||
604 | $"0000 0000 0000 0000 0000 0000 0000 0000" | ||
605 | $"0000 0000 0000 00FF FFD2 D2D2 D2D2 D2FF" | ||
606 | $"FFFF 0000 0000 0000 0000 00FF 0000 0000" | ||
607 | $"0000 0000 0000 0000 0000 0000 0000 0000" | ||
608 | $"0000 0000 0000 00FF FFD2 D2D2 D2D2 D2FF" | ||
609 | $"FFFF 0000 0000 0000 0000 00FF 0000 0000" | ||
610 | $"0000 0000 0000 0000 0000 0000 0000 0000" | ||
611 | $"0000 0000 0000 00FF FFD2 D2D2 D2D2 D2FF" | ||
612 | $"FFFF 0000 0000 0000 0000 00FF 0000 0000" | ||
613 | $"0000 0000 0000 0000 0000 0000 0000 0000" | ||
614 | $"0000 0000 0000 00FF FFD2 D2D2 D2D2 D2FF" | ||
615 | $"FFFF 0000 0000 0000 0000 00FF 0000 0000" | ||
616 | $"0000 0000 0000 0000 0000 0000 0000 0000" | ||
617 | $"0000 0000 0000 00FF FFFF FFFF FFFF FFFF" | ||
618 | $"FFFF 0000 0000 0000 0000 00FF 0000 0000" | ||
619 | $"0000 0000 0000 0000 0000 0000 0000 0000" | ||
620 | $"0000 0000 0000 00FF FFFF FFFF FFFF FFFF" | ||
621 | $"FFFF 0000 0000 0000 0000 00FF 0000 0000" | ||
622 | $"0000 0000 0000 0000 0000 0000 0000 0000" | ||
623 | $"0000 0000 0000 00FF FF00 0000 0000 00FF" | ||
624 | $"FFFF 0000 0000 0000 0000 00FF 0000 0000" | ||
625 | $"0000 0000 0000 0000 0000 0000 0000 0000" | ||
626 | $"0000 0000 0000 00FF FF00 0000 0000 00FF" | ||
627 | $"FFFF 0000 0000 0000 0000 00FF 0000 0000" | ||
628 | $"0000 0000 0000 0000 0000 0000 0000 0000" | ||
629 | $"0000 0000 0000 00FF FF00 0000 0000 00FF" | ||
630 | $"FFFF 0000 0000 0000 0000 00FF 0000 0000" | ||
631 | $"0000 0000 0000 0000 0000 0000 0000 0000" | ||
632 | $"0000 0000 0000 00FF FF00 0000 0000 00FF" | ||
633 | $"FFFF 0000 0000 0000 0000 00FF 0000 0000" | ||
634 | $"0000 0000 0000 0000 0000 0000 0000 0000" | ||
635 | $"0000 0000 0000 00FF FF00 0000 0000 00FF" | ||
636 | $"FFFF 0000 0000 0000 0000 00FF 0000 0000" | ||
637 | $"0000 0000 0000 0000 0000 0000 0000 0000" | ||
638 | $"0000 0000 0000 00FF FF00 0000 0000 00FF" | ||
639 | $"FFFF 0000 0000 0000 0000 00FF 0000 0000" | ||
640 | $"0000 0000 0000 0000 0000 0000 0000 0000" | ||
641 | $"0000 0000 0000 00FF FF00 0000 0000 00FF" | ||
642 | $"FFFF 0000 0000 0000 0000 00FF 0000 0000" | ||
643 | $"0000 0000 0000 0000 0000 0000 0000 0000" | ||
644 | $"0000 0000 0000 00FF FF00 0000 0000 00FF" | ||
645 | $"FFFF 0000 0000 0000 0000 00FF 0000 0000" | ||
646 | $"0000 0000 0000 0000 0000 0000 0000 0000" | ||
647 | $"0000 0000 0000 00FF FF00 0000 0000 00FF" | ||
648 | $"FFFF 0000 0000 0000 0000 00FF 0000 0000" | ||
649 | $"0000 0000 0000 0000 0000 0000 0000 0000" | ||
650 | $"0000 0000 0000 00FF FF00 0000 0000 00FF" | ||
651 | $"FFFF 0000 0000 0000 0000 00FF 0000 0000" | ||
652 | $"0000 0000 0000 0000 0000 0000 0000 0000" | ||
653 | $"0000 0000 0000 00FF FF00 0000 0000 00FF" | ||
654 | $"FFFF 0000 0000 0000 0000 00FF 0000 0000" | ||
655 | $"0000 0000 0000 0000 0000 0000 0000 0000" | ||
656 | $"0000 0000 0000 00FF FF00 0000 0000 00FF" | ||
657 | $"FFFF 0000 0000 0000 0000 00FF 0000 0000" | ||
658 | $"0000 0000 0000 0000 0000 0000 0000 0000" | ||
659 | $"0000 0000 0000 00FF FF00 0000 0000 00FF" | ||
660 | $"FFFF 0000 0000 0000 0000 00FF FFFF FFFF" | ||
661 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
662 | $"FFFF FFFF FFFF FFFF FF00 0000 0000 00FF" | ||
663 | $"FFFF 0000 0000 0000 0000 00FF FFFF FFFF" | ||
664 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
665 | $"FFFF FFFF FFFF FFFF FF00 0000 0000 00FF" | ||
666 | $"FFFF 0000 0000 0000 0000 00FF 0505 0505" | ||
667 | $"0505 0505 0505 0505 0505 0505 0505 FFFF" | ||
668 | $"E6E6 E6E6 E6E6 E6FF FF00 0000 0000 00FF" | ||
669 | $"FFFF 0000 0000 0000 0000 00FF 0505 0505" | ||
670 | $"0505 0505 0505 0505 0505 0505 0505 FFFF" | ||
671 | $"E6E6 E5E6 E5E6 E5FF FF00 0000 0000 00FF" | ||
672 | $"FFFF 0000 0000 0000 0000 00FF 0505 0505" | ||
673 | $"0505 0505 0505 0505 0505 0505 0505 FFFF" | ||
674 | $"E5E6 E6E6 E6E6 E6FF FF00 0000 0000 00FF" | ||
675 | $"FFFF 0000 0000 0000 0000 00FF 0505 0505" | ||
676 | $"0505 0505 0505 0505 0505 0505 0505 FFFF" | ||
677 | $"E6E6 E6E5 E6E5 E6FF FF00 0000 0000 00FF" | ||
678 | $"FFFF 0000 0000 0000 0000 00FF 0505 0505" | ||
679 | $"0505 0505 0505 0505 0505 0505 0505 FFFF" | ||
680 | $"E6E5 E6E6 E6E6 E5FF FF00 0000 0000 00FF" | ||
681 | $"FFFF 0000 0000 0000 0000 00FF 0505 0505" | ||
682 | $"0505 0505 0505 0505 0505 0505 0505 FFFF" | ||
683 | $"E6E6 E6E6 E5E6 E6FF FF00 0000 0000 00FF" | ||
684 | $"FFFF 0000 0000 0000 0000 00FF 0505 0505" | ||
685 | $"0505 0505 0505 0505 0505 0505 0505 FFFF" | ||
686 | $"E5E6 E6E6 E6E5 E6FF FF00 0000 0000 00FF" | ||
687 | $"FFFF 0000 0000 0000 0000 00FF 0505 0505" | ||
688 | $"0505 0505 0505 0505 0505 0505 0505 FFFF" | ||
689 | $"E6E6 E6E5 E6E6 E6FF FF00 0000 0000 00FF" | ||
690 | $"FFFF 0000 0000 0000 0000 00FF 0505 0505" | ||
691 | $"0505 0505 0505 0505 0505 0505 0505 FFFF" | ||
692 | $"E6E5 E6E6 E5E6 E6FF FF00 0000 0000 00FF" | ||
693 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
694 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
695 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
696 | $"6968 3332 0000 052A DF00 86FF 0000 A0FF" | ||
697 | $"8000 86FF 0000 A0FF 8000 86FF 0000 A0FF" | ||
698 | $"8000 86FF 0000 A0FF 8000 86FF 0000 A0FF" | ||
699 | $"8000 86FF 0000 A0FF 8000 86FF 0000 A0FF" | ||
700 | $"8000 86FF 0000 A0FF 8000 86FF 0000 A0FF" | ||
701 | $"8000 86FF 0000 A0FF E000 86FF 0000 98FF" | ||
702 | $"8800 86FF 0000 98FF 8800 86FF 0000 98FF" | ||
703 | $"8800 86FF 0000 98FF 8800 86FF 0000 98FF" | ||
704 | $"8800 86FF 0000 98FF 8800 86FF 0000 98FF" | ||
705 | $"8800 86FF 0000 98FF 8800 86FF 0000 98FF" | ||
706 | $"8800 86FF 0000 98FF 0100 0083 FF80 0086" | ||
707 | $"FF00 0098 FF01 0000 83FF 8000 86FF 0000" | ||
708 | $"98FF 0100 0083 FF80 0086 FF00 0098 FF01" | ||
709 | $"0000 83FF 8000 86FF 0000 98FF 0100 0083" | ||
710 | $"FF80 0086 FF00 0098 FF01 0000 83FF 8000" | ||
711 | $"86FF 0000 98FF 0100 0083 FF80 0086 FF00" | ||
712 | $"0098 FF01 0000 83FF 8000 86FF 0000 98FF" | ||
713 | $"0100 0083 FF80 0086 FF00 0098 FF01 0000" | ||
714 | $"83FF 8000 86FF 0000 98FF 0100 0083 FF80" | ||
715 | $"0086 FF00 0098 FF01 0000 83FF 8000 86FF" | ||
716 | $"0000 98FF 0100 0083 FF80 0086 FF9B 0083" | ||
717 | $"FF80 0086 FF9B 0083 FF80 0086 FF00 008F" | ||
718 | $"FF88 0083 FF80 0086 FF00 008F FF88 0083" | ||
719 | $"FF80 0086 FF00 008F FF88 0083 FF80 0086" | ||
720 | $"FF00 008F FF88 0083 FF80 0086 FF00 008F" | ||
721 | $"FF88 0083 FF80 0086 FF00 008F FF88 0083" | ||
722 | $"FF80 0086 FF00 008F FF88 0083 FF80 0086" | ||
723 | $"FF00 008F FF88 0083 FF80 0086 FF00 008F" | ||
724 | $"FF88 0083 FFAE 00E9 00A0 FF8A 00A0 FF8A" | ||
725 | $"00A0 FF8A 00A0 FF8A 00A0 FF8A 00A0 FF8A" | ||
726 | $"00A0 FF8A 00A0 FF8A 00A0 FF8A 00A0 FFE0" | ||
727 | $"0086 FF00 0098 FF88 0086 FF00 0098 FF88" | ||
728 | $"0086 FF00 0098 FF88 0086 FF00 0098 FF88" | ||
729 | $"0086 FF00 0098 FF88 0086 FF00 0098 FF88" | ||
730 | $"0086 FF00 0098 FF88 0086 FF00 0098 FF88" | ||
731 | $"0086 FF00 0098 FF88 0086 FF00 0098 FF01" | ||
732 | $"0000 83FF 8000 86FF 0000 98FF 0100 0083" | ||
733 | $"FF80 0086 FF00 0098 FF01 0000 83FF 8000" | ||
734 | $"86FF 0000 98FF 0100 0083 FF80 0086 FF00" | ||
735 | $"0098 FF01 0000 83FF 8000 86FF 0000 98FF" | ||
736 | $"0100 0083 FF80 0086 FF00 0098 FF01 0000" | ||
737 | $"83FF 8000 86FF 0000 98FF 0100 0083 FF80" | ||
738 | $"0086 FF00 0098 FF01 0000 83FF 8000 86FF" | ||
739 | $"0000 98FF 0100 0083 FF80 0086 FF00 0098" | ||
740 | $"FF01 0000 83FF 8000 86FF 0000 98FF 0100" | ||
741 | $"0083 FF80 0086 FF00 0098 FF01 0000 83FF" | ||
742 | $"8000 86FF 9B00 83FF 8000 86FF 9B00 83FF" | ||
743 | $"8000 86FF 0000 8FFF 0100 0084 7B01 0000" | ||
744 | $"83FF 8000 86FF 0000 8FFF 0100 0084 7B01" | ||
745 | $"0000 83FF 8000 86FF 0000 8FFF 0100 0084" | ||
746 | $"7B01 0000 83FF 8000 86FF 0000 8FFF 0100" | ||
747 | $"0084 7B01 0000 83FF 8000 86FF 0000 8FFF" | ||
748 | $"0100 0084 7B01 0000 83FF 8000 86FF 0000" | ||
749 | $"8FFF 0100 0084 7B01 0000 83FF 8000 86FF" | ||
750 | $"0000 8FFF 0100 0084 7B01 0000 83FF 8000" | ||
751 | $"86FF 0000 8FFF 0100 0084 7B01 0000 83FF" | ||
752 | $"8000 86FF 0000 8FFF 0100 0084 7B01 0000" | ||
753 | $"83FF AE00 E900 A0FF 8A00 A0FF 8A00 A0FF" | ||
754 | $"8A00 A0FF 8A00 A0FF 8A00 A0FF 8A00 A0FF" | ||
755 | $"8A00 A0FF 8A00 A0FF 8A00 A0FF E000 86FF" | ||
756 | $"0000 98FF 0100 0083 FF80 0086 FF00 0098" | ||
757 | $"FF01 0000 83FF 8000 86FF 0000 98FF 0100" | ||
758 | $"0083 FF80 0086 FF00 0098 FF01 0000 83FF" | ||
759 | $"8000 86FF 0000 98FF 0100 0083 FF80 0086" | ||
760 | $"FF00 0098 FF01 0000 83FF 8000 86FF 0000" | ||
761 | $"98FF 0100 0083 FF80 0086 FF00 0098 FF88" | ||
762 | $"0086 FF00 0098 FF88 0086 FF00 0098 FF01" | ||
763 | $"0000 83FF 8000 86FF 0000 98FF 0100 0083" | ||
764 | $"FF80 0086 FF00 0098 FF01 0000 83FF 8000" | ||
765 | $"86FF 0000 98FF 0100 0083 FF80 0086 FF00" | ||
766 | $"0098 FF01 0000 83FF 8000 86FF 0000 98FF" | ||
767 | $"0100 0083 FF80 0086 FF00 0098 FF01 0000" | ||
768 | $"83FF 8000 86FF 0000 98FF 0100 0083 FF80" | ||
769 | $"0086 FF00 0098 FF01 0000 83FF 8000 86FF" | ||
770 | $"0000 98FF 0100 0083 FF80 0086 FF00 0098" | ||
771 | $"FF01 0000 83FF 8000 86FF 0000 98FF 0100" | ||
772 | $"0083 FF80 0086 FF00 0098 FF01 0000 83FF" | ||
773 | $"8000 86FF 9B00 83FF 8000 86FF 9B00 83FF" | ||
774 | $"8000 86FF 9B00 83FF 8000 86FF 9B00 83FF" | ||
775 | $"8000 86FF 9B00 83FF 8000 86FF 9B00 83FF" | ||
776 | $"8000 86FF 9B00 83FF 8000 86FF 9B00 83FF" | ||
777 | $"8000 86FF 9B00 83FF 8000 86FF 9B00 83FF" | ||
778 | $"8000 86FF 9B00 83FF AE00 6838 6D6B 0000" | ||
779 | $"0908 FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
780 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
781 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
782 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
783 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
784 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
785 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
786 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
787 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
788 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
789 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
790 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
791 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
792 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
793 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
794 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
795 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
796 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
797 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
798 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
799 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
800 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
801 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
802 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
803 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
804 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
805 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
806 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
807 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
808 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
809 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
810 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
811 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
812 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
813 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
814 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
815 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
816 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
817 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
818 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
819 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
820 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
821 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
822 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
823 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
824 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
825 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
826 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
827 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
828 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
829 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
830 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
831 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
832 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
833 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
834 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
835 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
836 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
837 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
838 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
839 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
840 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
841 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
842 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
843 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
844 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
845 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
846 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
847 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
848 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
849 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
850 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
851 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
852 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
853 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
854 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
855 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
856 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
857 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
858 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
859 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
860 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
861 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
862 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
863 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
864 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
865 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
866 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
867 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
868 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
869 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
870 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
871 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
872 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
873 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
874 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
875 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
876 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
877 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
878 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
879 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
880 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
881 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
882 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
883 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
884 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
885 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
886 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
887 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
888 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
889 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
890 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
891 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
892 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
893 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
894 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
895 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
896 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
897 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
898 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
899 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
900 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
901 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
902 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
903 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
904 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
905 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
906 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
907 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
908 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
909 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
910 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
911 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
912 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
913 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
914 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
915 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
916 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
917 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
918 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
919 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
920 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
921 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
922 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
923 | $"FFFF 6963 7323 0000 0048 F557 D001 700E" | ||
924 | $"E024 9A9B 0175 9299 0162 923E 0001 9004" | ||
925 | $"0000 9BBC 102C 8434 5AFD FFFF FFFF FFFF" | ||
926 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
927 | $"FFFF FFFF FFFF FFFF FFFF 6963 7334 0000" | ||
928 | $"0088 AA3F DDDD DDDD DDAE A333 0000 0000" | ||
929 | $"0C3E 333A 0000 000C DBEC A333 0000 0CBC" | ||
930 | $"2A00 EDDF DDDB D2CB ECFF D00D 00CD BBBA" | ||
931 | $"B2D6 D00D 00B2 DDBB DCCB D00D 00D4 D2D2" | ||
932 | $"CC2D D00D 00BD CCE5 3EEC D00D 0C00 0000" | ||
933 | $"CBCB D00D 0000 0000 0D0D D00D 0000 0000" | ||
934 | $"0D00 D00D ABAB ABAF 9F00 D00D 1111 11B8" | ||
935 | $"9900 D00D 1111 1189 9F00 EDDA 8291 ABAF" | ||
936 | $"9FDD 6963 7338 0000 0108 DEDC DBB3 F9FA" | ||
937 | $"F9FA F9FA F9FA F9FA 8FFB DC23 23DB 0000" | ||
938 | $"0000 0000 0000 0032 6A88 DB23 23DC 0000" | ||
939 | $"0000 0000 F52B 3357 882B DC23 23DB 0000" | ||
940 | $"0000 F608 3234 33AD F600 FCFA F9AC F9FA" | ||
941 | $"F95D 0E5D 3457 8833 F1F2 FA00 00F9 0000" | ||
942 | $"0733 825E 33AD 6432 33EF F900 00FA 0000" | ||
943 | $"5D5E 5D33 825D 3332 2C57 FA00 00F9 0000" | ||
944 | $"5739 5D64 5D33 3232 335C F900 00FA 00F5" | ||
945 | $"5D57 F732 828E 8988 88F9 FA00 00F9 00F6" | ||
946 | $"F600 0000 F5F6 4F5D F85D F900 00FA 0000" | ||
947 | $"0000 0000 0000 00FA 0056 FA00 00FA 0000" | ||
948 | $"0000 0000 0000 00F9 0000 F900 00F9 8359" | ||
949 | $"8359 8359 ADD1 E8EA 0000 FA00 00FA 0505" | ||
950 | $"0505 0505 5FE5 E6E8 0000 F900 00F9 0505" | ||
951 | $"0505 0505 7DE6 E6D1 0000 ACF9 FAFC 8359" | ||
952 | $"8359 8359 ADD1 E8E9 FAF9 6973 3332 0000" | ||
953 | $"026C 0340 8080 4087 8005 5E51 80FF FF80" | ||
954 | $"86FF 06AA B457 80FF FF80 83FF 09F1 E1C1" | ||
955 | $"A94E D180 FFFF 8081 FF0B ECE6 DFBE BA4D" | ||
956 | $"D1FF 4080 8040 8080 4FA6 DCAD B3BC 65B4" | ||
957 | $"1900 80FF FF80 FFFF E9CF 87A7 B848 8FC6" | ||
958 | $"B719 80FF FF80 FFFF B58B A0C9 7D8B CFD4" | ||
959 | $"D89E 80FF FF80 FFFF ADAC A280 A5BE DBD4" | ||
960 | $"C79A 80FF FF80 FFF2 8F8E C5B4 7655 516E" | ||
961 | $"7A82 80FF FF80 FFD9 D880 FF09 F7DB C479" | ||
962 | $"B280 80FF FF80 86FF 0680 FF9A 80FF FF80" | ||
963 | $"86FF 0580 FFFF 80FF FF84 8000 4080 0005" | ||
964 | $"FFFF 80FF FF80 83FF 0080 8000 05FF FF80" | ||
965 | $"FFFF 8083 FF00 8080 0005 FFFF 4080 8040" | ||
966 | $"8380 0040 8000 0180 8081 0087 8001 0151" | ||
967 | $"8100 86FF 028B 0129 8100 83FF 05E2 D0B3" | ||
968 | $"943A D181 0081 FF0B D9BA B19E 952F D1FF" | ||
969 | $"4080 8040 8080 4F85 A369 8B98 378E 1900" | ||
970 | $"80FF FF80 FFFF D491 417F 9326 4893 9219" | ||
971 | $"80FF FF80 FFFF 774C 6C96 5E5A 94A0 A986" | ||
972 | $"80FF FF80 FFFF 9D73 7346 6589 ABA3 9280" | ||
973 | $"80FF FF80 FFED 6F7A BAA2 5028 253F 4A6A" | ||
974 | $"80FF FF80 FFD9 D880 FF09 F5D2 B569 9E73" | ||
975 | $"80FF FF80 86FF 0680 FF9A 80FF FF80 86FF" | ||
976 | $"0580 FFFF 80FF FF84 8009 403E 3E1F FFFF" | ||
977 | $"80FF FF80 83FF 0980 7B7B 3EFF FF80 FFFF" | ||
978 | $"8083 FF09 807B 7B3E FFFF 4080 8040 8380" | ||
979 | $"0540 3E3E 1F80 8081 0087 8001 1551 8100" | ||
980 | $"86FF 0290 202D 8100 83FF 05D9 C97F 6039" | ||
981 | $"D181 0081 FF0B CEA2 9759 4927 D1FF 4080" | ||
982 | $"8040 8080 4F6F 8657 474C 2976 5980 80FF" | ||
983 | $"FF80 FFFF C676 343F 4B1D 3977 7ED8 80FF" | ||
984 | $"FF80 FFFF 6540 536B 4C4E 7B85 8D79 80FF" | ||
985 | $"FF80 FFFF 8654 6638 5072 908A 7974 80FF" | ||
986 | $"FF80 FFEA 5D63 BB9E 4A20 1F36 3E65 80FF" | ||
987 | $"FF80 FFD9 D880 FF09 F4D0 B266 9B6F 80FF" | ||
988 | $"FF80 86FF 0680 FF9A 80FF FF80 86FF 0680" | ||
989 | $"FFFF 80FF FF80 8700 05FF FF80 FFFF 8087" | ||
990 | $"0005 FFFF 80FF FF80 8700 05FF FF40 8080" | ||
991 | $"4087 0001 8080 7338 6D6B 0000 0108 FFFF" | ||
992 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
993 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
994 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
995 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
996 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
997 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
998 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
999 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1000 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1001 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1002 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1003 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1004 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1005 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1006 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1007 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF 6963" | ||
1008 | $"6D23 0000 0038 F24B D007 B028 5557 81B1" | ||
1009 | $"124A 8236 1005 8000 1ABD 8030 557D FFFF" | ||
1010 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1011 | $"FFFF FFFF FFFF 6963 6D34 0000 0068 A33F" | ||
1012 | $"CDCC DCCD CAAE A333 0000 0000 CDEE 333A" | ||
1013 | $"0000 CCCB 2E0D EDCE CDCD DB2B DB6F D00D" | ||
1014 | $"00C2 BBEA BCD5 D00D 00BD 2D2D CC2D D00D" | ||
1015 | $"0CDC CCDB BADC D00D 0000 0000 0DCE D00D" | ||
1016 | $"0000 0000 0D0D D00D B1BB 1BF9 FD0D D00D" | ||
1017 | $"1111 1199 8D0D ECDB BB1B B1F9 FECE 6963" | ||
1018 | $"6D38 0000 00C8 DDDA DADD F8F8 F8F8 F8F8" | ||
1019 | $"F8F8 F864 8EAC DB23 23DC 0000 0000 0000" | ||
1020 | $"0000 F85C 89FB DC23 23DB 0000 0000 F608" | ||
1021 | $"3234 5E82 2AFA FBF8 F8FB F8F8 5633 335D" | ||
1022 | $"3488 575D EFF1 F900 00FA 0000 2C63 5E34" | ||
1023 | $"FD64 5D2C 33AA FA00 00F9 0000 395E 5D5D" | ||
1024 | $"5733 0832 33F9 F900 00FA 00F6 F92C 2B32" | ||
1025 | $"5D88 8888 88F8 FA00 00F9 0000 0000 0000" | ||
1026 | $"0000 00FA F781 F900 00FA 0000 0000 0000" | ||
1027 | $"0000 00F9 00F9 FA00 00F9 3559 5335 5959" | ||
1028 | $"E9E7 E7FA 00FA F900 00FA 0505 0505 0505" | ||
1029 | $"E8E6 E6F9 00F9 FBF8 F8FB 592F 5959 2F59" | ||
1030 | $"E9E7 E7FB F8FB 6974 3332 0000 245A 0000" | ||
1031 | $"0000 FF00 FF00 FF00 FB00 95FF 8100 C9FF" | ||
1032 | $"818E 81EA 8144 81FF 8500 95FF 8100 C9FF" | ||
1033 | $"818E 81EA 8144 81FF 8500 95FF 8100 C9FF" | ||
1034 | $"818E 81EA 8144 81FF 8500 95FF 8100 C9FF" | ||
1035 | $"818E 81EA 8144 81FF 8500 95FF 8100 C5FF" | ||
1036 | $"818F 81EA 81AB 818E 8144 8500 95FF 8100" | ||
1037 | $"C5FF 818F 81EA 81AB 818E 8144 8500 95FF" | ||
1038 | $"8100 C5FF 818F 81EA 81AB 818E 8144 8500" | ||
1039 | $"95FF 8100 C5FF 818F 81EA 81AB 818E 8144" | ||
1040 | $"8500 95FF 8100 C1FF 815A 81BE 81AB 818E" | ||
1041 | $"8145 8144 8500 95FF 8100 C1FF 815A 81BE" | ||
1042 | $"81AB 818E 8145 8144 8500 95FF 8100 C1FF" | ||
1043 | $"815A 81BE 81AB 818E 8145 8144 8500 95FF" | ||
1044 | $"8100 C1FF 815A 81BE 81AB 818E 8145 8144" | ||
1045 | $"8500 95FF 8100 BDFF 8164 81FE 8191 8169" | ||
1046 | $"8145 8144 81FF 8500 95FF 8100 BDFF 8164" | ||
1047 | $"81FE 8191 8169 8145 8144 81FF 8500 95FF" | ||
1048 | $"8100 BDFF 8164 81FE 8191 8169 8145 8144" | ||
1049 | $"81FF 8500 95FF 8100 BDFF 8164 81FE 8191" | ||
1050 | $"8169 8145 8144 81FF 8500 95FF 8100 A9FF" | ||
1051 | $"81E2 81E1 81CB 81B8 81A1 81FE 81B1 8162" | ||
1052 | $"8145 8144 85FF 8500 95FF 8100 A9FF 81E2" | ||
1053 | $"81E1 81CB 81B8 81A1 81FE 81B1 8162 8145" | ||
1054 | $"8144 85FF 8500 95FF 8100 A9FF 81E2 81E1" | ||
1055 | $"81CB 81B8 81A1 81FE 81B1 8162 8145 8144" | ||
1056 | $"85FF 8500 95FF 8100 A9FF 81E2 81E1 81CB" | ||
1057 | $"81B8 81A1 81FE 81B1 8162 8145 8144 85FF" | ||
1058 | $"8500 95FF 8100 A1FF 81E2 81E6 81E9 81EF" | ||
1059 | $"81B8 819F 81FE 81C1 8162 8145 8144 89FF" | ||
1060 | $"8500 95FF 8100 A1FF 81E2 81E6 81E9 81EF" | ||
1061 | $"81B8 819F 81FE 81C1 8162 8145 8144 89FF" | ||
1062 | $"8500 95FF 8100 A1FF 81E2 81E6 81E9 81EF" | ||
1063 | $"81B8 819F 81FE 81C1 8162 8145 8144 89FF" | ||
1064 | $"8500 95FF 8100 A1FF 81E2 81E6 81E9 81EF" | ||
1065 | $"81B8 819F 81FE 81C1 8162 8145 8144 89FF" | ||
1066 | $"8500 95FF 8100 9DFF 81D9 81E4 81E9 81EB" | ||
1067 | $"81B8 819F 81FE 81C3 8162 8145 8144 8DFF" | ||
1068 | $"8500 95FF 8100 9DFF 81D9 81E4 81E9 81EB" | ||
1069 | $"81B8 819F 81FE 81C3 8162 8145 8144 8DFF" | ||
1070 | $"8500 95FF 8100 9DFF 81D9 81E4 81E9 81EB" | ||
1071 | $"81B8 819F 81FE 81C3 8162 8145 8144 8DFF" | ||
1072 | $"8500 95FF 8100 9DFF 81D9 81E4 81E9 81EB" | ||
1073 | $"81B8 819F 81FE 81C3 8162 8145 8144 8DFF" | ||
1074 | $"BD00 81D7 81E3 81DE 81BA 818F 81A2 81FE" | ||
1075 | $"81C6 8162 8145 81D0 8161 CD00 81D7 81E3" | ||
1076 | $"81DE 81BA 818F 81A2 81FE 81C6 8162 8145" | ||
1077 | $"81D0 8161 CD00 81D7 81E3 81DE 81BA 818F" | ||
1078 | $"81A2 81FE 81C6 8162 8145 81D0 8161 CD00" | ||
1079 | $"81D7 81E3 81DE 81BA 818F 81A2 81FE 81C6" | ||
1080 | $"8162 8145 81D0 8161 9500 95FF 8100 95FF" | ||
1081 | $"81DA 81E5 81D4 81B3 8167 819A 81FE 81C8" | ||
1082 | $"8162 8145 81A5 81C9 81D3 8161 9100 95FF" | ||
1083 | $"8100 95FF 81DA 81E5 81D4 81B3 8167 819A" | ||
1084 | $"81FE 81C8 8162 8145 81A5 81C9 81D3 8161" | ||
1085 | $"9100 95FF 8100 95FF 81DA 81E5 81D4 81B3" | ||
1086 | $"8167 819A 81FE 81C8 8162 8145 81A5 81C9" | ||
1087 | $"81D3 8161 9100 95FF 8100 95FF 81DA 81E5" | ||
1088 | $"81D4 81B3 8167 819A 81FE 81C8 8162 8145" | ||
1089 | $"81A5 81C9 81D3 8161 9100 95FF 8100 91FF" | ||
1090 | $"81DC 81E2 81D4 81A4 8169 819E 81F2 81C9" | ||
1091 | $"8162 8145 8179 819B 81C2 81D2 81D0 8161" | ||
1092 | $"8D00 95FF 8100 91FF 81DC 81E2 81D4 81A4" | ||
1093 | $"8169 819E 81F2 81C9 8162 8145 8179 819B" | ||
1094 | $"81C2 81D2 81D0 8161 8D00 95FF 8100 91FF" | ||
1095 | $"81DC 81E2 81D4 81A4 8169 819E 81F2 81C9" | ||
1096 | $"8162 8145 8179 819B 81C2 81D2 81D0 8161" | ||
1097 | $"8D00 95FF 8100 91FF 81DC 81E2 81D4 81A4" | ||
1098 | $"8169 819E 81F2 81C9 8162 8145 8179 819B" | ||
1099 | $"81C2 81D2 81D0 8161 8D00 95FF 8100 8DFF" | ||
1100 | $"81E8 81DD 81D2 81B3 816A 81A0 81F3 81C7" | ||
1101 | $"815C 811B 815D 8189 819C 81B5 81CD 81D5" | ||
1102 | $"81D3 8161 8900 95FF 8100 8DFF 81E8 81DD" | ||
1103 | $"81D2 81B3 816A 81A0 81F3 81C7 815C 811B" | ||
1104 | $"815D 8189 819C 81B5 81CD 81D5 81D3 8161" | ||
1105 | $"8900 95FF 8100 8DFF 81E8 81DD 81D2 81B3" | ||
1106 | $"816A 81A0 81F3 81C7 815C 811B 815D 8189" | ||
1107 | $"819C 81B5 81CD 81D5 81D3 8161 8900 95FF" | ||
1108 | $"8100 8DFF 81E8 81DD 81D2 81B3 816A 81A0" | ||
1109 | $"81F3 81C7 815C 811B 815D 8189 819C 81B5" | ||
1110 | $"81CD 81D5 81D3 8161 8900 95FF 8100 8DFF" | ||
1111 | $"81DF 81C2 819C 8165 817A 81DE 81B3 816A" | ||
1112 | $"810D 8120 8182 81AD 81BD 81C3 81D1 81D5" | ||
1113 | $"81D7 81D0 8169 8188 8100 95FF 8100 8DFF" | ||
1114 | $"81DF 81C2 819C 8165 817A 81DE 81B3 816A" | ||
1115 | $"810D 8120 8182 81AD 81BD 81C3 81D1 81D5" | ||
1116 | $"81D7 81D0 8169 8188 8100 95FF 8100 8DFF" | ||
1117 | $"81DF 81C2 819C 8165 817A 81DE 81B3 816A" | ||
1118 | $"810D 8120 8182 81AD 81BD 81C3 81D1 81D5" | ||
1119 | $"81D7 81D0 8169 8188 8100 95FF 8100 8DFF" | ||
1120 | $"81DF 81C2 819C 8165 817A 81DE 81B3 816A" | ||
1121 | $"810D 8120 8182 81AD 81BD 81C3 81D1 81D5" | ||
1122 | $"81D7 81D0 8169 8188 8100 95FF 8100 8DFF" | ||
1123 | $"81AE 8181 8170 81B9 81C5 81C1 81CE 81C7" | ||
1124 | $"81B2 81AF 81DA 81E7 81EA 81E1 81D9 81D8" | ||
1125 | $"81D9 81D4 8169 8186 8100 95FF 8100 8DFF" | ||
1126 | $"81AE 8181 8170 81B9 81C5 81C1 81CE 81C7" | ||
1127 | $"81B2 81AF 81DA 81E7 81EA 81E1 81D9 81D8" | ||
1128 | $"81D9 81D4 8169 8186 8100 95FF 8100 8DFF" | ||
1129 | $"81AE 8181 8170 81B9 81C5 81C1 81CE 81C7" | ||
1130 | $"81B2 81AF 81DA 81E7 81EA 81E1 81D9 81D8" | ||
1131 | $"81D9 81D4 8169 8186 8100 95FF 8100 8DFF" | ||
1132 | $"81AE 8181 8170 81B9 81C5 81C1 81CE 81C7" | ||
1133 | $"81B2 81AF 81DA 81E7 81EA 81E1 81D9 81D8" | ||
1134 | $"81D9 81D4 8169 8186 8100 95FF 8100 8DFF" | ||
1135 | $"81EE 815C 8175 81EB 81D4 819F 81B3 81C4" | ||
1136 | $"81DE 81E7 81EC 81EB 81E3 81E4 81DD 81D6" | ||
1137 | $"81CE 81C6 8172 819C 8100 95FF 8100 8DFF" | ||
1138 | $"81EE 815C 8175 81EB 81D4 819F 81B3 81C4" | ||
1139 | $"81DE 81E7 81EC 81EB 81E3 81E4 81DD 81D6" | ||
1140 | $"81CE 81C6 8172 819C 8100 95FF 8100 8DFF" | ||
1141 | $"81EE 815C 8175 81EB 81D4 819F 81B3 81C4" | ||
1142 | $"81DE 81E7 81EC 81EB 81E3 81E4 81DD 81D6" | ||
1143 | $"81CE 81C6 8172 819C 8100 95FF 8100 8DFF" | ||
1144 | $"81EE 815C 8175 81EB 81D4 819F 81B3 81C4" | ||
1145 | $"81DE 81E7 81EC 81EB 81E3 81E4 81DD 81D6" | ||
1146 | $"81CE 81C6 8172 819C 8100 95FF 8100 8DFF" | ||
1147 | $"81C6 81A2 81C7 8188 816F 814D 8161 816F" | ||
1148 | $"817F 8190 8194 81C1 81DB 81CC 81C1 81C0" | ||
1149 | $"81B7 81AB 8182 81A2 8100 95FF 8100 8DFF" | ||
1150 | $"81C6 81A2 81C7 8188 816F 814D 8161 816F" | ||
1151 | $"817F 8190 8194 81C1 81DB 81CC 81C1 81C0" | ||
1152 | $"81B7 81AB 8182 81A2 8100 95FF 8100 8DFF" | ||
1153 | $"81C6 81A2 81C7 8188 816F 814D 8161 816F" | ||
1154 | $"817F 8190 8194 81C1 81DB 81CC 81C1 81C0" | ||
1155 | $"81B7 81AB 8182 81A2 8100 95FF 8100 8DFF" | ||
1156 | $"81C6 81A2 81C7 8188 816F 814D 8161 816F" | ||
1157 | $"817F 8190 8194 81C1 81DB 81CC 81C1 81C0" | ||
1158 | $"81B7 81AB 8182 81A2 8100 95FF 8100 8DFF" | ||
1159 | $"8199 81BF 81AE 815C 818A 8185 816D 8150" | ||
1160 | $"814E 815A 815B 8155 816C 818F 818B 818C" | ||
1161 | $"8195 8188 818F 81A4 8100 95FF 8100 8DFF" | ||
1162 | $"8199 81BF 81AE 815C 818A 8185 816D 8150" | ||
1163 | $"814E 815A 815B 8155 816C 818F 818B 818C" | ||
1164 | $"8195 8188 818F 81A4 8100 95FF 8100 8DFF" | ||
1165 | $"8199 81BF 81AE 815C 818A 8185 816D 8150" | ||
1166 | $"814E 815A 815B 8155 816C 818F 818B 818C" | ||
1167 | $"8195 8188 818F 81A4 8100 95FF 8100 8DFF" | ||
1168 | $"8199 81BF 81AE 815C 818A 8185 816D 8150" | ||
1169 | $"814E 815A 815B 8155 816C 818F 818B 818C" | ||
1170 | $"8195 8188 818F 81A4 8100 95FF 8100 89FF" | ||
1171 | $"81CA 8166 817C 818C 819F 85FF 81DC 81B5" | ||
1172 | $"8182 8151 814A 8143 813F 814B 8153 815E" | ||
1173 | $"8168 8160 818F 81A6 8100 95FF 8100 89FF" | ||
1174 | $"81CA 8166 817C 818C 819F 85FF 81DC 81B5" | ||
1175 | $"8182 8151 814A 8143 813F 814B 8153 815E" | ||
1176 | $"8168 8160 818F 81A6 8100 95FF 8100 89FF" | ||
1177 | $"81CA 8166 817C 818C 819F 85FF 81DC 81B5" | ||
1178 | $"8182 8151 814A 8143 813F 814B 8153 815E" | ||
1179 | $"8168 8160 818F 81A6 8100 95FF 8100 89FF" | ||
1180 | $"81CA 8166 817C 818C 819F 85FF 81DC 81B5" | ||
1181 | $"8182 8151 814A 8143 813F 814B 8153 815E" | ||
1182 | $"8168 8160 818F 81A6 8100 95FF 8100 89FF" | ||
1183 | $"8166 819F 81C2 95FF 81DC 81C3 81A8 818D" | ||
1184 | $"8184 817B 8168 816D 815A 815E 818F 81AF" | ||
1185 | $"8100 95FF 8100 89FF 8166 819F 81C2 95FF" | ||
1186 | $"81DC 81C3 81A8 818D 8184 817B 8168 816D" | ||
1187 | $"815A 815E 818F 81AF 8100 95FF 8100 89FF" | ||
1188 | $"8166 819F 81C2 95FF 81DC 81C3 81A8 818D" | ||
1189 | $"8184 817B 8168 816D 815A 815E 818F 81AF" | ||
1190 | $"8100 95FF 8100 89FF 8166 819F 81C2 95FF" | ||
1191 | $"81DC 81C3 81A8 818D 8184 817B 8168 816D" | ||
1192 | $"815A 815E 818F 81AF 8100 95FF 8100 C5FF" | ||
1193 | $"8100 85FF 8181 818F 81B5 8100 95FF 8100" | ||
1194 | $"C5FF 8100 85FF 8181 818F 81B5 8100 95FF" | ||
1195 | $"8100 C5FF 8100 85FF 8181 818F 81B5 8100" | ||
1196 | $"95FF 8100 C5FF 8100 85FF 8181 818F 81B5" | ||
1197 | $"8100 95FF 8100 C5FF 8100 85FF 8122 8544" | ||
1198 | $"8100 95FF 8100 C5FF 8100 85FF 8122 8544" | ||
1199 | $"8100 95FF 8100 C5FF 8100 85FF 8122 8544" | ||
1200 | $"8100 95FF 8100 C5FF 8100 85FF 8122 8544" | ||
1201 | $"8100 95FF 8100 C5FF 8100 8DFF 8500 95FF" | ||
1202 | $"8100 C5FF 8100 8DFF 8500 95FF 8100 C5FF" | ||
1203 | $"8100 8DFF 8500 95FF 8100 C5FF 8100 8DFF" | ||
1204 | $"8500 95FF 8100 C5FF 8100 8DFF 8500 95FF" | ||
1205 | $"8100 C5FF 8100 8DFF 8500 95FF 8100 C5FF" | ||
1206 | $"8100 8DFF 8500 95FF 8100 C5FF 8100 8DFF" | ||
1207 | $"8500 95FF 8100 C5FF 8100 8DFF 8500 95FF" | ||
1208 | $"8100 C5FF 8100 8DFF 8500 95FF 8100 C5FF" | ||
1209 | $"8100 8DFF 8500 95FF 8100 C5FF 8100 8DFF" | ||
1210 | $"8500 95FF CD00 8DFF 8500 95FF CD00 8DFF" | ||
1211 | $"8500 95FF CD00 8DFF 8500 95FF CD00 8DFF" | ||
1212 | $"8500 95FF 8100 ADFF 9900 8DFF 8500 95FF" | ||
1213 | $"8100 ADFF 9900 8DFF 8500 95FF 8100 ADFF" | ||
1214 | $"9900 8DFF 8500 95FF 8100 ADFF 9900 8DFF" | ||
1215 | $"8500 95FF 8100 ADFF 9900 8DFF 8500 95FF" | ||
1216 | $"8100 ADFF 9900 8DFF 8500 95FF 8100 ADFF" | ||
1217 | $"9900 8DFF 8500 95FF 8100 ADFF 9900 8DFF" | ||
1218 | $"8500 95FF 8100 ADFF 9900 8DFF 8500 95FF" | ||
1219 | $"8100 ADFF 9900 8DFF 8500 95FF 8100 ADFF" | ||
1220 | $"9900 8DFF 8500 95FF 8100 ADFF 9900 8DFF" | ||
1221 | $"8500 95FF 8100 ADFF 9900 8DFF 8500 95FF" | ||
1222 | $"8100 ADFF 9900 8DFF 8500 95FF 8100 ADFF" | ||
1223 | $"9900 8DFF 8500 95FF 8100 ADFF 9900 8DFF" | ||
1224 | $"8500 95FF 8100 ADFF 9900 8DFF 8500 95FF" | ||
1225 | $"8100 ADFF 9900 8DFF 8500 95FF 8100 ADFF" | ||
1226 | $"9900 8DFF 8500 95FF 8100 ADFF 9900 8DFF" | ||
1227 | $"8500 95FF 8100 ADFF 9900 8DFF 8500 95FF" | ||
1228 | $"8100 ADFF 9900 8DFF 8500 95FF 8100 ADFF" | ||
1229 | $"9900 8DFF 8500 95FF 8100 ADFF 9900 8DFF" | ||
1230 | $"FF00 FF00 FF00 FB00 FF00 FF00 FF00 FF00" | ||
1231 | $"9500 C9FF 8101 8100 8144 81FF A100 C9FF" | ||
1232 | $"8101 8100 8144 81FF A100 C9FF 8101 8100" | ||
1233 | $"8144 81FF A100 C9FF 8101 8100 8144 81FF" | ||
1234 | $"A100 C5FF 8109 8500 8101 8144 A100 C5FF" | ||
1235 | $"8109 8500 8101 8144 A100 C5FF 8109 8500" | ||
1236 | $"8101 8144 A100 C5FF 8109 8500 8101 8144" | ||
1237 | $"A100 C1FF 8167 81BC 8100 8101 8119 8144" | ||
1238 | $"A100 C1FF 8167 81BC 8100 8101 8119 8144" | ||
1239 | $"A100 C1FF 8167 81BC 8100 8101 8119 8144" | ||
1240 | $"A100 C1FF 8167 81BC 8100 8101 8119 8144" | ||
1241 | $"A100 BDFF 8166 81E4 819D 8171 8119 8144" | ||
1242 | $"81FF A100 BDFF 8166 81E4 819D 8171 8119" | ||
1243 | $"8144 81FF A100 BDFF 8166 81E4 819D 8171" | ||
1244 | $"8119 8144 81FF A100 BDFF 8166 81E4 819D" | ||
1245 | $"8171 8119 8144 81FF A100 A9FF 81C9 81BE" | ||
1246 | $"81A7 819B 8182 81E4 8189 8144 8119 8144" | ||
1247 | $"85FF A100 A9FF 81C9 81BE 81A7 819B 8182" | ||
1248 | $"81E4 8189 8144 8119 8144 85FF A100 A9FF" | ||
1249 | $"81C9 81BE 81A7 819B 8182 81E4 8189 8144" | ||
1250 | $"8119 8144 85FF A100 A9FF 81C9 81BE 81A7" | ||
1251 | $"819B 8182 81E4 8189 8144 8119 8144 85FF" | ||
1252 | $"A100 A1FF 81CF 81B6 81B9 81BB 819B 8179" | ||
1253 | $"81E4 8193 8144 8119 8144 89FF A100 A1FF" | ||
1254 | $"81CF 81B6 81B9 81BB 819B 8179 81E4 8193" | ||
1255 | $"8144 8119 8144 89FF A100 A1FF 81CF 81B6" | ||
1256 | $"81B9 81BB 819B 8179 81E4 8193 8144 8119" | ||
1257 | $"8144 89FF A100 A1FF 81CF 81B6 81B9 81BB" | ||
1258 | $"819B 8179 81E4 8193 8144 8119 8144 89FF" | ||
1259 | $"A100 9DFF 81B2 81AC 81B6 81B5 819B 817D" | ||
1260 | $"81E4 8197 8144 8119 8144 8DFF A100 9DFF" | ||
1261 | $"81B2 81AC 81B6 81B5 819B 817D 81E4 8197" | ||
1262 | $"8144 8119 8144 8DFF A100 9DFF 81B2 81AC" | ||
1263 | $"81B6 81B5 819B 817D 81E4 8197 8144 8119" | ||
1264 | $"8144 8DFF A100 9DFF 81B2 81AC 81B6 81B5" | ||
1265 | $"819B 817D 81E4 8197 8144 8119 8144 8DFF" | ||
1266 | $"BD00 85AF 81A0 816E 8151 8180 81E4 819A" | ||
1267 | $"8144 8119 819B 8162 CD00 85AF 81A0 816E" | ||
1268 | $"8151 8180 81E4 819A 8144 8119 819B 8162" | ||
1269 | $"CD00 85AF 81A0 816E 8151 8180 81E4 819A" | ||
1270 | $"8144 8119 819B 8162 CD00 85AF 81A0 816E" | ||
1271 | $"8151 8180 81E4 819A 8144 8119 819B 8162" | ||
1272 | $"9500 95FF 8100 95FF 81B2 81B3 8197 8168" | ||
1273 | $"812E 8176 81E4 819D 8144 8119 8163 8196" | ||
1274 | $"81A1 8162 9100 95FF 8100 95FF 81B2 81B3" | ||
1275 | $"8197 8168 812E 8176 81E4 819D 8144 8119" | ||
1276 | $"8163 8196 81A1 8162 9100 95FF 8100 95FF" | ||
1277 | $"81B2 81B3 8197 8168 812E 8176 81E4 819D" | ||
1278 | $"8144 8119 8163 8196 81A1 8162 9100 95FF" | ||
1279 | $"8100 95FF 81B2 81B3 8197 8168 812E 8176" | ||
1280 | $"81E4 819D 8144 8119 8163 8196 81A1 8162" | ||
1281 | $"9100 95FF 8100 91FF 81BE 81B0 8199 8153" | ||
1282 | $"8130 817E 81CF 819C 8146 8119 8134 8159" | ||
1283 | $"818B 81A6 819C 8162 8D00 95FF 8100 91FF" | ||
1284 | $"81BE 81B0 8199 8153 8130 817E 81CF 819C" | ||
1285 | $"8146 8119 8134 8159 818B 81A6 819C 8162" | ||
1286 | $"8D00 95FF 8100 91FF 81BE 81B0 8199 8153" | ||
1287 | $"8130 817E 81CF 819C 8146 8119 8134 8159" | ||
1288 | $"818B 81A6 819C 8162 8D00 95FF 8100 91FF" | ||
1289 | $"81BE 81B0 8199 8153 8130 817E 81CF 819C" | ||
1290 | $"8146 8119 8134 8159 818B 81A6 819C 8162" | ||
1291 | $"8D00 95FF 8100 8DFF 81E0 81B1 8191 8167" | ||
1292 | $"812E 817E 81D0 819A 8144 810E 812A 813C" | ||
1293 | $"8155 817B 81A0 81A8 81A2 8162 8900 95FF" | ||
1294 | $"8100 8DFF 81E0 81B1 8191 8167 812E 817E" | ||
1295 | $"81D0 819A 8144 810E 812A 813C 8155 817B" | ||
1296 | $"81A0 81A8 81A2 8162 8900 95FF 8100 8DFF" | ||
1297 | $"81E0 81B1 8191 8167 812E 817E 81D0 819A" | ||
1298 | $"8144 810E 812A 813C 8155 817B 81A0 81A8" | ||
1299 | $"81A2 8162 8900 95FF 8100 8DFF 81E0 81B1" | ||
1300 | $"8191 8167 812E 817E 81D0 819A 8144 810E" | ||
1301 | $"812A 813C 8155 817B 81A0 81A8 81A2 8162" | ||
1302 | $"8900 95FF 8100 8DFF 81C5 8176 814B 812D" | ||
1303 | $"8151 81B5 8186 814F 8104 810E 8134 8161" | ||
1304 | $"8181 818A 819F 81A8 81A7 81A1 8168 817C" | ||
1305 | $"8100 95FF 8100 8DFF 81C5 8176 814B 812D" | ||
1306 | $"8151 81B5 8186 814F 8104 810E 8134 8161" | ||
1307 | $"8181 818A 819F 81A8 81A7 81A1 8168 817C" | ||
1308 | $"8100 95FF 8100 8DFF 81C5 8176 814B 812D" | ||
1309 | $"8151 81B5 8186 814F 8104 810E 8134 8161" | ||
1310 | $"8181 818A 819F 81A8 81A7 81A1 8168 817C" | ||
1311 | $"8100 95FF 8100 8DFF 81C5 8176 814B 812D" | ||
1312 | $"8151 81B5 8186 814F 8104 810E 8134 8161" | ||
1313 | $"8181 818A 819F 81A8 81A7 81A1 8168 817C" | ||
1314 | $"8100 95FF 8100 8DFF 8172 812D 813A 817D" | ||
1315 | $"8186 8183 8199 8198 818C 8185 81A0 81B3" | ||
1316 | $"81B9 81AE 81A9 85AA 81A5 8168 817E 8100" | ||
1317 | $"95FF 8100 8DFF 8172 812D 813A 817D 8186" | ||
1318 | $"8183 8199 8198 818C 8185 81A0 81B3 81B9" | ||
1319 | $"81AE 81A9 85AA 81A5 8168 817E 8100 95FF" | ||
1320 | $"8100 8DFF 8172 812D 813A 817D 8186 8183" | ||
1321 | $"8199 8198 818C 8185 81A0 81B3 81B9 81AE" | ||
1322 | $"81A9 85AA 81A5 8168 817E 8100 95FF 8100" | ||
1323 | $"8DFF 8172 812D 813A 817D 8186 8183 8199" | ||
1324 | $"8198 818C 8185 81A0 81B3 81B9 81AE 81A9" | ||
1325 | $"85AA 81A5 8168 817E 8100 95FF 8100 8DFF" | ||
1326 | $"81E8 8144 8138 81B3 81A9 8162 816F 817D" | ||
1327 | $"819D 81B2 81BE 81BC 81B5 81B7 81AF 81A5" | ||
1328 | $"819B 8195 8173 8192 8100 95FF 8100 8DFF" | ||
1329 | $"81E8 8144 8138 81B3 81A9 8162 816F 817D" | ||
1330 | $"819D 81B2 81BE 81BC 81B5 81B7 81AF 81A5" | ||
1331 | $"819B 8195 8173 8192 8100 95FF 8100 8DFF" | ||
1332 | $"81E8 8144 8138 81B3 81A9 8162 816F 817D" | ||
1333 | $"819D 81B2 81BE 81BC 81B5 81B7 81AF 81A5" | ||
1334 | $"819B 8195 8173 8192 8100 95FF 8100 8DFF" | ||
1335 | $"81E8 8144 8138 81B3 81A9 8162 816F 817D" | ||
1336 | $"819D 81B2 81BE 81BC 81B5 81B7 81AF 81A5" | ||
1337 | $"819B 8195 8173 8192 8100 95FF 8100 8DFF" | ||
1338 | $"81C2 8183 819A 8144 813D 811E 8129 8134" | ||
1339 | $"8144 8155 815C 818E 81AC 819A 818B 8189" | ||
1340 | $"817D 8175 8182 819A 8100 95FF 8100 8DFF" | ||
1341 | $"81C2 8183 819A 8144 813D 811E 8129 8134" | ||
1342 | $"8144 8155 815C 818E 81AC 819A 818B 8189" | ||
1343 | $"817D 8175 8182 819A 8100 95FF 8100 8DFF" | ||
1344 | $"81C2 8183 819A 8144 813D 811E 8129 8134" | ||
1345 | $"8144 8155 815C 818E 81AC 819A 818B 8189" | ||
1346 | $"817D 8175 8182 819A 8100 95FF 8100 8DFF" | ||
1347 | $"81C2 8183 819A 8144 813D 811E 8129 8134" | ||
1348 | $"8144 8155 815C 818E 81AC 819A 818B 8189" | ||
1349 | $"817D 8175 8182 819A 8100 95FF 8100 8DFF" | ||
1350 | $"816E 818B 8180 8144 8174 816B 8145 8522" | ||
1351 | $"812F 8130 812E 8142 815C 8155 8158 8160" | ||
1352 | $"8155 818E 819E 8100 95FF 8100 8DFF 816E" | ||
1353 | $"818B 8180 8144 8174 816B 8145 8522 812F" | ||
1354 | $"8130 812E 8142 815C 8155 8158 8160 8155" | ||
1355 | $"818E 819E 8100 95FF 8100 8DFF 816E 818B" | ||
1356 | $"8180 8144 8174 816B 8145 8522 812F 8130" | ||
1357 | $"812E 8142 815C 8155 8158 8160 8155 818E" | ||
1358 | $"819E 8100 95FF 8100 8DFF 816E 818B 8180" | ||
1359 | $"8144 8174 816B 8145 8522 812F 8130 812E" | ||
1360 | $"8142 815C 8155 8158 8160 8155 818E 819E" | ||
1361 | $"8100 95FF 8100 89FF 81B4 8166 815A 8181" | ||
1362 | $"819F 85FF 81D6 819F 815B 8123 811B 8113" | ||
1363 | $"8110 8120 812B 8133 813C 8137 818E 81A0" | ||
1364 | $"8100 95FF 8100 89FF 81B4 8166 815A 8181" | ||
1365 | $"819F 85FF 81D6 819F 815B 8123 811B 8113" | ||
1366 | $"8110 8120 812B 8133 813C 8137 818E 81A0" | ||
1367 | $"8100 95FF 8100 89FF 81B4 8166 815A 8181" | ||
1368 | $"819F 85FF 81D6 819F 815B 8123 811B 8113" | ||
1369 | $"8110 8120 812B 8133 813C 8137 818E 81A0" | ||
1370 | $"8100 95FF 8100 89FF 81B4 8166 815A 8181" | ||
1371 | $"819F 85FF 81D6 819F 815B 8123 811B 8113" | ||
1372 | $"8110 8120 812B 8133 813C 8137 818E 81A0" | ||
1373 | $"8100 95FF 8100 89FF 8166 819F 81C2 95FF" | ||
1374 | $"81D6 81B6 8192 816F 8166 815B 8147 8149" | ||
1375 | $"8131 813B 818E 81A6 8100 95FF 8100 89FF" | ||
1376 | $"8166 819F 81C2 95FF 81D6 81B6 8192 816F" | ||
1377 | $"8166 815B 8147 8149 8131 813B 818E 81A6" | ||
1378 | $"8100 95FF 8100 89FF 8166 819F 81C2 95FF" | ||
1379 | $"81D6 81B6 8192 816F 8166 815B 8147 8149" | ||
1380 | $"8131 813B 818E 81A6 8100 95FF 8100 89FF" | ||
1381 | $"8166 819F 81C2 95FF 81D6 81B6 8192 816F" | ||
1382 | $"8166 815B 8147 8149 8131 813B 818E 81A6" | ||
1383 | $"8100 95FF 8100 C5FF 8100 85FF 8172 818E" | ||
1384 | $"81AB 8100 95FF 8100 C5FF 8100 85FF 8172" | ||
1385 | $"818E 81AB 8100 95FF 8100 C5FF 8100 85FF" | ||
1386 | $"8172 818E 81AB 8100 95FF 8100 C5FF 8100" | ||
1387 | $"85FF 8172 818E 81AB 8100 95FF 8100 C5FF" | ||
1388 | $"8100 85FF 8122 8544 8100 95FF 8100 C5FF" | ||
1389 | $"8100 85FF 8122 8544 8100 95FF 8100 C5FF" | ||
1390 | $"8100 85FF 8122 8544 8100 95FF 8100 C5FF" | ||
1391 | $"8100 85FF 8122 8544 8100 95FF 8100 C5FF" | ||
1392 | $"8100 8DFF 8500 95FF 8100 C5FF 8100 8DFF" | ||
1393 | $"8500 95FF 8100 C5FF 8100 8DFF 8500 95FF" | ||
1394 | $"8100 C5FF 8100 8DFF 8500 95FF 8100 C5FF" | ||
1395 | $"8100 8DFF 8500 95FF 8100 C5FF 8100 8DFF" | ||
1396 | $"8500 95FF 8100 C5FF 8100 8DFF 8500 95FF" | ||
1397 | $"8100 C5FF 8100 8DFF 8500 95FF 8100 C5FF" | ||
1398 | $"8100 8DFF 8500 95FF 8100 C5FF 8100 8DFF" | ||
1399 | $"8500 95FF 8100 C5FF 8100 8DFF 8500 95FF" | ||
1400 | $"8100 C5FF 8100 8DFF 8500 95FF CD00 8DFF" | ||
1401 | $"8500 95FF CD00 8DFF 8500 95FF CD00 8DFF" | ||
1402 | $"8500 95FF CD00 8DFF 8500 95FF 8100 ADFF" | ||
1403 | $"8100 917B 8100 8DFF 8500 95FF 8100 ADFF" | ||
1404 | $"8100 917B 8100 8DFF 8500 95FF 8100 ADFF" | ||
1405 | $"8100 917B 8100 8DFF 8500 95FF 8100 ADFF" | ||
1406 | $"8100 917B 8100 8DFF 8500 95FF 8100 ADFF" | ||
1407 | $"8100 917B 8100 8DFF 8500 95FF 8100 ADFF" | ||
1408 | $"8100 917B 8100 8DFF 8500 95FF 8100 ADFF" | ||
1409 | $"8100 917B 8100 8DFF 8500 95FF 8100 ADFF" | ||
1410 | $"8100 917B 8100 8DFF 8500 95FF 8100 ADFF" | ||
1411 | $"8100 917B 8100 8DFF 8500 95FF 8100 ADFF" | ||
1412 | $"8100 917B 8100 8DFF 8500 95FF 8100 ADFF" | ||
1413 | $"8100 917B 8100 8DFF 8500 95FF 8100 ADFF" | ||
1414 | $"8100 917B 8100 8DFF 8500 95FF 8100 ADFF" | ||
1415 | $"8100 917B 8100 8DFF 8500 95FF 8100 ADFF" | ||
1416 | $"8100 917B 8100 8DFF 8500 95FF 8100 ADFF" | ||
1417 | $"8100 917B 8100 8DFF 8500 95FF 8100 ADFF" | ||
1418 | $"8100 917B 8100 8DFF 8500 95FF 8100 ADFF" | ||
1419 | $"8100 917B 8100 8DFF 8500 95FF 8100 ADFF" | ||
1420 | $"8100 917B 8100 8DFF 8500 95FF 8100 ADFF" | ||
1421 | $"8100 917B 8100 8DFF 8500 95FF 8100 ADFF" | ||
1422 | $"8100 917B 8100 8DFF 8500 95FF 8100 ADFF" | ||
1423 | $"8100 917B 8100 8DFF 8500 95FF 8100 ADFF" | ||
1424 | $"8100 917B 8100 8DFF 8500 95FF 8100 ADFF" | ||
1425 | $"8100 917B 8100 8DFF 8500 95FF 8100 ADFF" | ||
1426 | $"8100 917B 8100 8DFF FF00 FF00 FF00 FB00" | ||
1427 | $"FF00 FF00 FF00 FF00 9500 C9FF 810F 8143" | ||
1428 | $"8144 81FF A100 C9FF 810F 8143 8144 81FF" | ||
1429 | $"A100 C9FF 810F 8143 8144 81FF A100 C9FF" | ||
1430 | $"810F 8143 8144 81FF A100 C5FF 8117 8143" | ||
1431 | $"8116 810F 8144 A100 C5FF 8117 8143 8116" | ||
1432 | $"810F 8144 A100 C5FF 8117 8143 8116 810F" | ||
1433 | $"8144 A100 C5FF 8117 8143 8116 810F 8144" | ||
1434 | $"A100 C1FF 8165 81C4 8116 810F 811A 8144" | ||
1435 | $"A100 C1FF 8165 81C4 8116 810F 811A 8144" | ||
1436 | $"A100 C1FF 8165 81C4 8116 810F 811A 8144" | ||
1437 | $"A100 C1FF 8165 81C4 8116 810F 811A 8144" | ||
1438 | $"A100 BDFF 8155 8167 81A7 816C 811A 8144" | ||
1439 | $"81FF A100 BDFF 8155 8167 81A7 816C 811A" | ||
1440 | $"8144 81FF A100 BDFF 8155 8167 81A7 816C" | ||
1441 | $"811A 8144 81FF A100 BDFF 8155 8167 81A7" | ||
1442 | $"816C 811A 8144 81FF A100 A9FF 81BC 81A9" | ||
1443 | $"8192 8193 813E 8167 814D 8123 811A 8144" | ||
1444 | $"85FF A100 A9FF 81BC 81A9 8192 8193 813E" | ||
1445 | $"8167 814D 8123 811A 8144 85FF A100 A9FF" | ||
1446 | $"81BC 81A9 8192 8193 813E 8167 814D 8123" | ||
1447 | $"811A 8144 85FF A100 A9FF 81BC 81A9 8192" | ||
1448 | $"8193 813E 8167 814D 8123 811A 8144 85FF" | ||
1449 | $"A100 A1FF 81C6 819A 8598 8193 8131 8167" | ||
1450 | $"814A 8123 811A 8144 89FF A100 A1FF 81C6" | ||
1451 | $"819A 8598 8193 8131 8167 814A 8123 811A" | ||
1452 | $"8144 89FF A100 A1FF 81C6 819A 8598 8193" | ||
1453 | $"8131 8167 814A 8123 811A 8144 89FF A100" | ||
1454 | $"A1FF 81C6 819A 8598 8193 8131 8167 814A" | ||
1455 | $"8123 811A 8144 89FF A100 9DFF 819C 818E" | ||
1456 | $"8199 8195 8193 8137 8167 814F 8123 811A" | ||
1457 | $"8144 8DFF A100 9DFF 819C 818E 8199 8195" | ||
1458 | $"8193 8137 8167 814F 8123 811A 8144 8DFF" | ||
1459 | $"A100 9DFF 819C 818E 8199 8195 8193 8137" | ||
1460 | $"8167 814F 8123 811A 8144 8DFF A100 9DFF" | ||
1461 | $"819C 818E 8199 8195 8193 8137 8167 814F" | ||
1462 | $"8123 811A 8144 8DFF BD00 8192 818F 8186" | ||
1463 | $"8157 8147 8139 8167 8152 8123 811A 817A" | ||
1464 | $"8161 CD00 8192 818F 8186 8157 8147 8139" | ||
1465 | $"8167 8152 8123 811A 817A 8161 CD00 8192" | ||
1466 | $"818F 8186 8157 8147 8139 8167 8152 8123" | ||
1467 | $"811A 817A 8161 CD00 8192 818F 8186 8157" | ||
1468 | $"8147 8139 8167 8152 8123 811A 817A 8161" | ||
1469 | $"9500 95FF 8100 95FF 8195 8191 817C 8151" | ||
1470 | $"812A 8132 8167 8153 8123 811A 814B 8178" | ||
1471 | $"8183 8161 89FF 8500 95FF 8100 95FF 8195" | ||
1472 | $"8191 817C 8151 812A 8132 8167 8153 8123" | ||
1473 | $"811A 814B 8178 8183 8161 89FF 8500 95FF" | ||
1474 | $"8100 95FF 8195 8191 817C 8151 812A 8132" | ||
1475 | $"8167 8153 8123 811A 814B 8178 8183 8161" | ||
1476 | $"89FF 8500 95FF 8100 95FF 8195 8191 817C" | ||
1477 | $"8151 812A 8132 8167 8153 8123 811A 814B" | ||
1478 | $"8178 8183 8161 89FF 8500 95FF 8100 91FF" | ||
1479 | $"81A9 818B 817D 8141 812C 8137 8163 8153" | ||
1480 | $"8124 811A 812C 8144 816D 818A 8180 8161" | ||
1481 | $"85FF 8500 95FF 8100 91FF 81A9 818B 817D" | ||
1482 | $"8141 812C 8137 8163 8153 8124 811A 812C" | ||
1483 | $"8144 816D 818A 8180 8161 85FF 8500 95FF" | ||
1484 | $"8100 91FF 81A9 818B 817D 8141 812C 8137" | ||
1485 | $"8163 8153 8124 811A 812C 8144 816D 818A" | ||
1486 | $"8180 8161 85FF 8500 95FF 8100 91FF 81A9" | ||
1487 | $"818B 817D 8141 812C 8137 8163 8153 8124" | ||
1488 | $"811A 812C 8144 816D 818A 8180 8161 85FF" | ||
1489 | $"8500 95FF 8100 8DFF 81DA 8192 8178 8154" | ||
1490 | $"8127 8137 8161 8151 8122 8111 8124 8132" | ||
1491 | $"813F 8160 8184 818D 8186 8161 81FF 8500" | ||
1492 | $"95FF 8100 8DFF 81DA 8192 8178 8154 8127" | ||
1493 | $"8137 8161 8151 8122 8111 8124 8132 813F" | ||
1494 | $"8160 8184 818D 8186 8161 81FF 8500 95FF" | ||
1495 | $"8100 8DFF 81DA 8192 8178 8154 8127 8137" | ||
1496 | $"8161 8151 8122 8111 8124 8132 813F 8160" | ||
1497 | $"8184 818D 8186 8161 81FF 8500 95FF 8100" | ||
1498 | $"8DFF 81DA 8192 8178 8154 8127 8137 8161" | ||
1499 | $"8151 8122 8111 8124 8132 813F 8160 8184" | ||
1500 | $"818D 8186 8161 81FF 8500 95FF 8100 8DFF" | ||
1501 | $"81B7 815B 813C 8127 8130 8159 8156 812A" | ||
1502 | $"810A 810C 812C 814F 8165 816C 8185 818D" | ||
1503 | $"8189 8188 8169 8188 8100 95FF 8100 8DFF" | ||
1504 | $"81B7 815B 813C 8127 8130 8159 8156 812A" | ||
1505 | $"810A 810C 812C 814F 8165 816C 8185 818D" | ||
1506 | $"8189 8188 8169 8188 8100 95FF 8100 8DFF" | ||
1507 | $"81B7 815B 813C 8127 8130 8159 8156 812A" | ||
1508 | $"810A 810C 812C 814F 8165 816C 8185 818D" | ||
1509 | $"8189 8188 8169 8188 8100 95FF 8100 8DFF" | ||
1510 | $"81B7 815B 813C 8127 8130 8159 8156 812A" | ||
1511 | $"810A 810C 812C 814F 8165 816C 8185 818D" | ||
1512 | $"8189 8188 8169 8188 8100 95FF 8100 8DFF" | ||
1513 | $"8161 8120 812F 816A 8576 8583 8178 8174" | ||
1514 | $"818C 819A 819D 8191 858E 818C 8188 8169" | ||
1515 | $"8155 8100 95FF 8100 8DFF 8161 8120 812F" | ||
1516 | $"816A 8576 8583 8178 8174 818C 819A 819D" | ||
1517 | $"8191 858E 818C 8188 8169 8155 8100 95FF" | ||
1518 | $"8100 8DFF 8161 8120 812F 816A 8576 8583" | ||
1519 | $"8178 8174 818C 819A 819D 8191 858E 818C" | ||
1520 | $"8188 8169 8155 8100 95FF 8100 8DFF 8161" | ||
1521 | $"8120 812F 816A 8576 8583 8178 8174 818C" | ||
1522 | $"819A 819D 8191 858E 818C 8188 8169 8155" | ||
1523 | $"8100 95FF 8100 8DFF 81E7 8122 8130 8196" | ||
1524 | $"8194 8153 8154 815F 8180 8195 81A2 819E" | ||
1525 | $"819A 819D 8194 8188 8181 817A 8173 8144" | ||
1526 | $"8100 95FF 8100 8DFF 81E7 8122 8130 8196" | ||
1527 | $"8194 8153 8154 815F 8180 8195 81A2 819E" | ||
1528 | $"819A 819D 8194 8188 8181 817A 8173 8144" | ||
1529 | $"8100 95FF 8100 8DFF 81E7 8122 8130 8196" | ||
1530 | $"8194 8153 8154 815F 8180 8195 81A2 819E" | ||
1531 | $"819A 819D 8194 8188 8181 817A 8173 8144" | ||
1532 | $"8100 95FF 8100 8DFF 81E7 8122 8130 8196" | ||
1533 | $"8194 8153 8154 815F 8180 8195 81A2 819E" | ||
1534 | $"819A 819D 8194 8188 8181 817A 8173 8144" | ||
1535 | $"8100 95FF 8100 8DFF 81C6 8146 8151 8135" | ||
1536 | $"8138 8119 811F 812A 8136 8144 814A 8175" | ||
1537 | $"8191 8181 8173 8172 8168 8160 8181 81FF" | ||
1538 | $"8100 95FF 8100 8DFF 81C6 8146 8151 8135" | ||
1539 | $"8138 8119 811F 812A 8136 8144 814A 8175" | ||
1540 | $"8191 8181 8173 8172 8168 8160 8181 81FF" | ||
1541 | $"8100 95FF 8100 8DFF 81C6 8146 8151 8135" | ||
1542 | $"8138 8119 811F 812A 8136 8144 814A 8175" | ||
1543 | $"8191 8181 8173 8172 8168 8160 8181 81FF" | ||
1544 | $"8100 95FF 8100 8DFF 81C6 8146 8151 8135" | ||
1545 | $"8138 8119 811F 812A 8136 8144 814A 8175" | ||
1546 | $"8191 8181 8173 8172 8168 8160 8181 81FF" | ||
1547 | $"8100 95FF 8100 8DFF 8159 816A 8149 8122" | ||
1548 | $"8177 8168 813C 811A 811D 8928 8138 814D" | ||
1549 | $"8147 8148 814F 8147 818E 81FF 8100 95FF" | ||
1550 | $"8100 8DFF 8159 816A 8149 8122 8177 8168" | ||
1551 | $"813C 811A 811D 8928 8138 814D 8147 8148" | ||
1552 | $"814F 8147 818E 81FF 8100 95FF 8100 8DFF" | ||
1553 | $"8159 816A 8149 8122 8177 8168 813C 811A" | ||
1554 | $"811D 8928 8138 814D 8147 8148 814F 8147" | ||
1555 | $"818E 81FF 8100 95FF 8100 8DFF 8159 816A" | ||
1556 | $"8149 8122 8177 8168 813C 811A 811D 8928" | ||
1557 | $"8138 814D 8147 8148 814F 8147 818E 81FF" | ||
1558 | $"8100 95FF 8100 89FF 81A8 8165 814A 817F" | ||
1559 | $"819F 85FF 81D3 819A 8155 811C 8114 810E" | ||
1560 | $"810B 811B 8126 812B 8133 8130 818E 819A" | ||
1561 | $"8100 95FF 8100 89FF 81A8 8165 814A 817F" | ||
1562 | $"819F 85FF 81D3 819A 8155 811C 8114 810E" | ||
1563 | $"810B 811B 8126 812B 8133 8130 818E 819A" | ||
1564 | $"8100 95FF 8100 89FF 81A8 8165 814A 817F" | ||
1565 | $"819F 85FF 81D3 819A 8155 811C 8114 810E" | ||
1566 | $"810B 811B 8126 812B 8133 8130 818E 819A" | ||
1567 | $"8100 95FF 8100 89FF 81A8 8165 814A 817F" | ||
1568 | $"819F 85FF 81D3 819A 8155 811C 8114 810E" | ||
1569 | $"810B 811B 8126 812B 8133 8130 818E 819A" | ||
1570 | $"8100 95FF 8100 89FF 8165 819F 81C2 95FF" | ||
1571 | $"81D3 81B2 818E 8169 815F 8156 8142 8143" | ||
1572 | $"812B 8135 818E 819F 8100 95FF 8100 89FF" | ||
1573 | $"8165 819F 81C2 95FF 81D3 81B2 818E 8169" | ||
1574 | $"815F 8156 8142 8143 812B 8135 818E 819F" | ||
1575 | $"8100 95FF 8100 89FF 8165 819F 81C2 95FF" | ||
1576 | $"81D3 81B2 818E 8169 815F 8156 8142 8143" | ||
1577 | $"812B 8135 818E 819F 8100 95FF 8100 89FF" | ||
1578 | $"8165 819F 81C2 95FF 81D3 81B2 818E 8169" | ||
1579 | $"815F 8156 8142 8143 812B 8135 818E 819F" | ||
1580 | $"8100 95FF 8100 C5FF 8100 85FF 816B 818E" | ||
1581 | $"81A7 8100 95FF 8100 C5FF 8100 85FF 816B" | ||
1582 | $"818E 81A7 8100 95FF 8100 C5FF 8100 85FF" | ||
1583 | $"816B 818E 81A7 8100 95FF 8100 C5FF 8100" | ||
1584 | $"85FF 816B 818E 81A7 8100 95FF 8100 C5FF" | ||
1585 | $"8100 85FF 8122 8544 8100 95FF 8100 C5FF" | ||
1586 | $"8100 85FF 8122 8544 8100 95FF 8100 C5FF" | ||
1587 | $"8100 85FF 8122 8544 8100 95FF 8100 C5FF" | ||
1588 | $"8100 85FF 8122 8544 8100 95FF 8100 C5FF" | ||
1589 | $"8100 8DFF 8500 95FF 8100 C5FF 8100 8DFF" | ||
1590 | $"8500 95FF 8100 C5FF 8100 8DFF 8500 95FF" | ||
1591 | $"8100 C5FF 8100 8DFF 8500 95FF 8100 C5FF" | ||
1592 | $"8100 8DFF 8500 95FF 8100 C5FF 8100 8DFF" | ||
1593 | $"8500 95FF 8100 C5FF 8100 8DFF 8500 95FF" | ||
1594 | $"8100 C5FF 8100 8DFF 8500 95FF 8100 C5FF" | ||
1595 | $"8100 8DFF 8500 95FF 8100 C5FF 8100 8DFF" | ||
1596 | $"8500 95FF 8100 C5FF 8100 8DFF 8500 95FF" | ||
1597 | $"8100 C5FF 8100 8DFF 8500 95FF CD00 8DFF" | ||
1598 | $"8500 95FF CD00 8DFF 8500 95FF CD00 8DFF" | ||
1599 | $"8500 95FF CD00 8DFF 8500 95FF CD00 8DFF" | ||
1600 | $"8500 95FF CD00 8DFF 8500 95FF CD00 8DFF" | ||
1601 | $"8500 95FF CD00 8DFF 8500 95FF CD00 8DFF" | ||
1602 | $"8500 95FF CD00 8DFF 8500 95FF CD00 8DFF" | ||
1603 | $"8500 95FF CD00 8DFF 8500 95FF CD00 8DFF" | ||
1604 | $"8500 95FF CD00 8DFF 8500 95FF CD00 8DFF" | ||
1605 | $"8500 95FF CD00 8DFF 8500 95FF CD00 8DFF" | ||
1606 | $"8500 95FF CD00 8DFF 8500 95FF CD00 8DFF" | ||
1607 | $"8500 95FF CD00 8DFF 8500 95FF CD00 8DFF" | ||
1608 | $"8500 95FF CD00 8DFF 8500 95FF CD00 8DFF" | ||
1609 | $"8500 95FF CD00 8DFF 8500 95FF CD00 8DFF" | ||
1610 | $"8500 95FF CD00 8DFF 8500 95FF CD00 8DFF" | ||
1611 | $"8500 95FF CD00 8DFF FF00 FF00 FF00 FB00" | ||
1612 | $"7438 6D6B 0000 4008 FFFF FFFF FFFF FFFF" | ||
1613 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1614 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1615 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1616 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1617 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1618 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1619 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1620 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1621 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1622 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1623 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1624 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1625 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1626 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1627 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1628 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1629 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1630 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1631 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1632 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1633 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1634 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1635 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1636 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1637 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1638 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1639 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1640 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1641 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1642 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1643 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1644 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1645 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1646 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1647 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1648 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1649 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1650 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1651 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1652 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1653 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1654 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1655 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1656 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1657 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1658 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1659 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1660 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1661 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1662 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1663 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1664 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1665 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1666 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1667 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1668 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1669 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1670 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1671 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1672 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1673 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1674 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1675 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1676 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1677 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1678 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1679 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1680 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1681 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1682 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1683 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1684 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1685 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1686 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1687 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1688 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1689 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1690 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1691 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1692 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1693 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1694 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1695 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1696 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1697 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1698 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1699 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1700 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1701 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1702 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1703 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1704 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1705 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1706 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1707 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1708 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1709 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1710 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1711 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1712 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1713 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1714 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1715 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1716 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1717 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1718 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1719 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1720 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1721 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1722 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1723 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1724 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1725 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1726 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1727 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1728 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1729 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1730 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1731 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1732 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1733 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1734 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1735 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1736 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1737 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1738 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1739 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1740 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1741 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1742 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1743 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1744 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1745 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1746 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1747 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1748 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1749 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1750 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1751 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1752 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1753 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1754 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1755 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1756 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1757 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1758 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1759 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1760 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1761 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1762 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1763 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1764 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1765 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1766 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1767 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1768 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1769 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1770 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1771 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1772 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1773 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1774 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1775 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1776 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1777 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1778 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1779 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1780 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1781 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1782 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1783 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1784 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1785 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1786 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1787 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1788 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1789 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1790 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1791 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1792 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1793 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1794 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1795 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1796 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1797 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1798 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1799 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1800 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1801 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1802 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1803 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1804 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1805 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1806 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1807 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1808 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1809 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1810 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1811 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1812 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1813 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1814 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1815 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1816 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1817 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1818 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1819 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1820 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1821 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1822 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1823 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1824 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1825 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1826 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1827 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1828 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1829 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1830 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1831 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1832 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1833 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1834 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1835 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1836 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1837 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1838 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1839 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1840 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1841 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1842 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1843 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1844 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1845 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1846 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1847 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1848 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1849 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1850 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1851 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1852 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1853 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1854 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1855 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1856 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1857 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1858 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1859 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1860 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1861 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1862 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1863 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1864 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1865 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1866 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1867 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1868 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1869 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1870 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1871 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1872 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1873 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1874 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1875 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1876 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1877 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1878 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1879 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1880 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1881 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1882 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1883 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1884 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1885 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1886 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1887 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1888 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1889 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1890 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1891 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1892 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1893 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1894 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1895 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1896 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1897 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1898 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1899 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1900 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1901 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1902 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1903 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1904 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1905 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1906 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1907 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1908 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1909 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1910 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1911 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1912 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1913 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1914 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1915 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1916 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1917 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1918 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1919 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1920 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1921 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1922 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1923 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1924 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1925 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1926 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1927 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1928 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1929 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1930 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1931 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1932 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1933 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1934 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1935 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1936 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1937 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1938 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1939 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1940 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1941 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1942 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1943 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1944 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1945 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1946 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1947 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1948 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1949 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1950 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1951 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1952 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1953 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1954 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1955 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1956 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1957 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1958 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1959 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1960 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1961 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1962 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1963 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1964 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1965 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1966 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1967 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1968 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1969 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1970 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1971 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1972 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1973 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1974 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1975 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1976 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1977 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1978 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1979 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1980 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1981 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1982 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1983 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1984 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1985 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1986 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1987 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1988 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1989 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1990 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1991 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1992 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1993 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1994 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1995 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1996 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1997 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1998 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
1999 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2000 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2001 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2002 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2003 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2004 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2005 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2006 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2007 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2008 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2009 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2010 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2011 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2012 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2013 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2014 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2015 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2016 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2017 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2018 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2019 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2020 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2021 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2022 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2023 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2024 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2025 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2026 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2027 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2028 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2029 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2030 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2031 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2032 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2033 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2034 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2035 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2036 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2037 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2038 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2039 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2040 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2041 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2042 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2043 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2044 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2045 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2046 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2047 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2048 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2049 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2050 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2051 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2052 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2053 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2054 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2055 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2056 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2057 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2058 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2059 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2060 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2061 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2062 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2063 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2064 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2065 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2066 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2067 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2068 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2069 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2070 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2071 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2072 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2073 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2074 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2075 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2076 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2077 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2078 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2079 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2080 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2081 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2082 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2083 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2084 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2085 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2086 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2087 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2088 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2089 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2090 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2091 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2092 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2093 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2094 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2095 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2096 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2097 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2098 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2099 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2100 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2101 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2102 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2103 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2104 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2105 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2106 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2107 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2108 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2109 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2110 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2111 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2112 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2113 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2114 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2115 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2116 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2117 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2118 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2119 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2120 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2121 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2122 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2123 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2124 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2125 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2126 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2127 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2128 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2129 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2130 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2131 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2132 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2133 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2134 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2135 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2136 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2137 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2138 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2139 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2140 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2141 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2142 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2143 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2144 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2145 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2146 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2147 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2148 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2149 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2150 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2151 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2152 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2153 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2154 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2155 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2156 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2157 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2158 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2159 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2160 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2161 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2162 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2163 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2164 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2165 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2166 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2167 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2168 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2169 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2170 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2171 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2172 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2173 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2174 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2175 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2176 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2177 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2178 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2179 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2180 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2181 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2182 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2183 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2184 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2185 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2186 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2187 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2188 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2189 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2190 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2191 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2192 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2193 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2194 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2195 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2196 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2197 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2198 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2199 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2200 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2201 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2202 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2203 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2204 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2205 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2206 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2207 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2208 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2209 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2210 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2211 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2212 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2213 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2214 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2215 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2216 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2217 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2218 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2219 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2220 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2221 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2222 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2223 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2224 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2225 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2226 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2227 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2228 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2229 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2230 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2231 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2232 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2233 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2234 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2235 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2236 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2237 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2238 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2239 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2240 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2241 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2242 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2243 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2244 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2245 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2246 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2247 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2248 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2249 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2250 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2251 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2252 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2253 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2254 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2255 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2256 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2257 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2258 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2259 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2260 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2261 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2262 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2263 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2264 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2265 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2266 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2267 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2268 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2269 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2270 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2271 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2272 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2273 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2274 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2275 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2276 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2277 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2278 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2279 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2280 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2281 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2282 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2283 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2284 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2285 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2286 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2287 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2288 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2289 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2290 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2291 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2292 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2293 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2294 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2295 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2296 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2297 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2298 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2299 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2300 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2301 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2302 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2303 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2304 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2305 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2306 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2307 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2308 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2309 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2310 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2311 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2312 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2313 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2314 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2315 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2316 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2317 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2318 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2319 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2320 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2321 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2322 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2323 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2324 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2325 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2326 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2327 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2328 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2329 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2330 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2331 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2332 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2333 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2334 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2335 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2336 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2337 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2338 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2339 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2340 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2341 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2342 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2343 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2344 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2345 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2346 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2347 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2348 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2349 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2350 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2351 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2352 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2353 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2354 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2355 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2356 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2357 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2358 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2359 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2360 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2361 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2362 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2363 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2364 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2365 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2366 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2367 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2368 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2369 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2370 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2371 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2372 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2373 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2374 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2375 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2376 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2377 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2378 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2379 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2380 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2381 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2382 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2383 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2384 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2385 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2386 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2387 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2388 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2389 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2390 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2391 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2392 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2393 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2394 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2395 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2396 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2397 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2398 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2399 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2400 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2401 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2402 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2403 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2404 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2405 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2406 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2407 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2408 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2409 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2410 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2411 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2412 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2413 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2414 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2415 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2416 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2417 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2418 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2419 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2420 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2421 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2422 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2423 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2424 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2425 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2426 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2427 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2428 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2429 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2430 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2431 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2432 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2433 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2434 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2435 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2436 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2437 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2438 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2439 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2440 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2441 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2442 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2443 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2444 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2445 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2446 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2447 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2448 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2449 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2450 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2451 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2452 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2453 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2454 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2455 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2456 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2457 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2458 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2459 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2460 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2461 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2462 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2463 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2464 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2465 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2466 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2467 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2468 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2469 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2470 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2471 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2472 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2473 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2474 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2475 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2476 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2477 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2478 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2479 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2480 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2481 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2482 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2483 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2484 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2485 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2486 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2487 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2488 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2489 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2490 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2491 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2492 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2493 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2494 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2495 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2496 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2497 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2498 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2499 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2500 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2501 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2502 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2503 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2504 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2505 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2506 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2507 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2508 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2509 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2510 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2511 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2512 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2513 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2514 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2515 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2516 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2517 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2518 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2519 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2520 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2521 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2522 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2523 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2524 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2525 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2526 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2527 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2528 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2529 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2530 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2531 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2532 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2533 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2534 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2535 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2536 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2537 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2538 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2539 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2540 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2541 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2542 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2543 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2544 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2545 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2546 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2547 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2548 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2549 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2550 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2551 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2552 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2553 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2554 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2555 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2556 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2557 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2558 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2559 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2560 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2561 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2562 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2563 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2564 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2565 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2566 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2567 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2568 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2569 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2570 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2571 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2572 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2573 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2574 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2575 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2576 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2577 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2578 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2579 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2580 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2581 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2582 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2583 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2584 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2585 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2586 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2587 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2588 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2589 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2590 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2591 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2592 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2593 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2594 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2595 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2596 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2597 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2598 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2599 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2600 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2601 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2602 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2603 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2604 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2605 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2606 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2607 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2608 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2609 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2610 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2611 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2612 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2613 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2614 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2615 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2616 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2617 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2618 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2619 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2620 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2621 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2622 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2623 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2624 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2625 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2626 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2627 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2628 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2629 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2630 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2631 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2632 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2633 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2634 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2635 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2636 | $"FFFF FFFF FFFF FFFF" | ||
2637 | }; | ||
2638 | |||
2639 | data 'ics#' (-16455, "Item Icon") { | ||
2640 | $"F557 D001 700E E024 9A9B 0175 9299 0162" | ||
2641 | $"923E 0001 9004 0000 9BBC 102C 8434 5AFD" | ||
2642 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2643 | $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" | ||
2644 | }; | ||
2645 | |||
2646 | data 'ics4' (-16455, "Item Icon") { | ||
2647 | $"AA3F DDDD DDDD DDAE A333 0000 0000 0C3E" | ||
2648 | $"333A 0000 000C DBEC A333 0000 0CBC 2A00" | ||
2649 | $"EDDF DDDB D2CB ECFF D00D 00CD BBBA B2D6" | ||
2650 | $"D00D 00B2 DDBB DCCB D00D 00D4 D2D2 CC2D" | ||
2651 | $"D00D 00BD CCE5 3EEC D00D 0C00 0000 CBCB" | ||
2652 | $"D00D 0000 0000 0D0D D00D 0000 0000 0D00" | ||
2653 | $"D00D ABAB ABAF 9F00 D00D 1111 11B8 9900" | ||
2654 | $"D00D 1111 1189 9F00 EDDA 8291 ABAF 9FDD" | ||
2655 | }; | ||
2656 | |||
2657 | data 'ics8' (-16455, "Item Icon") { | ||
2658 | $"DEDC DBB3 F9FA F9FA F9FA F9FA F9FA 8FFB" | ||
2659 | $"DC23 23DB 0000 0000 0000 0000 0032 6A88" | ||
2660 | $"DB23 23DC 0000 0000 0000 F52B 3357 882B" | ||
2661 | $"DC23 23DB 0000 0000 F608 3234 33AD F600" | ||
2662 | $"FCFA F9AC F9FA F95D 0E5D 3457 8833 F1F2" | ||
2663 | $"FA00 00F9 0000 0733 825E 33AD 6432 33EF" | ||
2664 | $"F900 00FA 0000 5D5E 5D33 825D 3332 2C57" | ||
2665 | $"FA00 00F9 0000 5739 5D64 5D33 3232 335C" | ||
2666 | $"F900 00FA 00F5 5D57 F732 828E 8988 88F9" | ||
2667 | $"FA00 00F9 00F6 F600 0000 F5F6 4F5D F85D" | ||
2668 | $"F900 00FA 0000 0000 0000 0000 00FA 0056" | ||
2669 | $"FA00 00FA 0000 0000 0000 0000 00F9 0000" | ||
2670 | $"F900 00F9 8359 8359 8359 ADD1 E8EA 0000" | ||
2671 | $"FA00 00FA 0505 0505 0505 5FE5 E6E8 0000" | ||
2672 | $"F900 00F9 0505 0505 0505 7DE6 E6D1 0000" | ||
2673 | $"ACF9 FAFC 8359 8359 8359 ADD1 E8E9 FAF9" | ||
2674 | }; | ||
2675 | |||
diff --git a/rbutil/rbutilApp.cpp b/rbutil/rbutilApp.cpp index 215e9ebc8e..c30e5b4aaa 100644 --- a/rbutil/rbutilApp.cpp +++ b/rbutil/rbutilApp.cpp | |||
@@ -19,6 +19,7 @@ | |||
19 | ****************************************************************************/ | 19 | ****************************************************************************/ |
20 | 20 | ||
21 | #include "rbutilApp.h" | 21 | #include "rbutilApp.h" |
22 | #include "bootloaders.h" | ||
22 | 23 | ||
23 | GlobalVars* gv = new GlobalVars(); | 24 | GlobalVars* gv = new GlobalVars(); |
24 | 25 | ||
@@ -30,15 +31,16 @@ bool rbutilFrmApp::OnInit() | |||
30 | 31 | ||
31 | wxLogVerbose(wxT("=== begin rbutilFrmApp::Oninit()")); | 32 | wxLogVerbose(wxT("=== begin rbutilFrmApp::Oninit()")); |
32 | 33 | ||
34 | |||
33 | gv->stdpaths = new wxStandardPaths(); | 35 | gv->stdpaths = new wxStandardPaths(); |
34 | 36 | ||
35 | // Get application directory | 37 | // Get application directory |
36 | // DANGER! GetDataDir() doesn't portably return the application directory | 38 | // DANGER! GetDataDir() doesn't portably return the application directory |
37 | // We want to use the form below instead, but not until wxWidgets 2.8 is | 39 | // We want to use the form below instead, but not until wxWidgets 2.8 is |
38 | // released. | 40 | // released. *Datadir gives the wrong dir for this on Linux/Mac even on Wx2.8 * |
39 | gv->AppDir = gv->stdpaths->GetExecutablePath().BeforeLast(PATH_SEP_CHR); | 41 | gv->AppDir = gv->stdpaths->GetExecutablePath().BeforeLast(PATH_SEP_CHR); |
40 | // buf = gv->stdpaths->GetDataDir(); buf.Append(PATH_SEP); | 42 | // buf = gv->stdpaths->GetDataDir(); buf.Append(PATH_SEP); |
41 | // gv->AppDir = buf.BeforeLast(PATH_SEP_CHR).c_str(); | 43 | // gv->AppDir = buf.BeforeLast(PATH_SEP_CHR).c_str(); |
42 | 44 | ||
43 | buf = gv->stdpaths->GetUserDataDir(); | 45 | buf = gv->stdpaths->GetUserDataDir(); |
44 | if (! wxDirExists(buf) ) | 46 | if (! wxDirExists(buf) ) |
@@ -80,6 +82,7 @@ bool rbutilFrmApp::OnInit() | |||
80 | SetTopWindow(myFrame); | 82 | SetTopWindow(myFrame); |
81 | myFrame->Show(TRUE); | 83 | myFrame->Show(TRUE); |
82 | 84 | ||
85 | initIpodpatcher(); // reserve mem for ipodpatcher | ||
83 | wxLogVerbose(wxT("=== end rbUtilFrmApp::OnInit()")); | 86 | wxLogVerbose(wxT("=== end rbUtilFrmApp::OnInit()")); |
84 | return TRUE; | 87 | return TRUE; |
85 | } | 88 | } |
@@ -92,7 +95,7 @@ int rbutilFrmApp::OnExit() | |||
92 | 95 | ||
93 | gv->logfile->Close(); | 96 | gv->logfile->Close(); |
94 | /* Enabling this code causes the program to crash. I | 97 | /* Enabling this code causes the program to crash. I |
95 | * have no idea why. | 98 | * have no idea why. (possibly because deleting non existing objects ? :-) ) |
96 | wxLog::DontCreateOnDemand(); | 99 | wxLog::DontCreateOnDemand(); |
97 | // Free a bunch of structures. | 100 | // Free a bunch of structures. |
98 | delete gv->GlobalConfig; | 101 | delete gv->GlobalConfig; |
@@ -120,15 +123,15 @@ bool rbutilFrmApp::ReadGlobalConfig(rbutilFrm* myFrame) | |||
120 | // are of course the same directory. | 123 | // are of course the same directory. |
121 | buf.Printf(wxT("%s" PATH_SEP "rbutil.ini"), gv->AppDir.c_str() ); | 124 | buf.Printf(wxT("%s" PATH_SEP "rbutil.ini"), gv->AppDir.c_str() ); |
122 | 125 | ||
123 | if (! wxFileExists(buf) ) | 126 | // if (! wxFileExists(buf) ) |
124 | { | 127 | // { |
125 | gv->ResourceDir = gv->stdpaths->GetResourcesDir(); | 128 | // gv->ResourceDir = gv->stdpaths->GetResourcesDir(); |
126 | buf.Printf(wxT("%s" PATH_SEP "rbutil.ini"), | 129 | // buf.Printf(wxT("%s" PATH_SEP "rbutil.ini"), |
127 | gv->ResourceDir.c_str() ); | 130 | // gv->ResourceDir.c_str() ); |
128 | } else | 131 | // } else |
129 | { | 132 | // { |
130 | gv->ResourceDir = gv->AppDir; | 133 | // gv->ResourceDir = gv->AppDir; |
131 | } | 134 | // } |
132 | 135 | ||
133 | wxFileInputStream* cfgis = new wxFileInputStream(buf); | 136 | wxFileInputStream* cfgis = new wxFileInputStream(buf); |
134 | 137 | ||
@@ -146,13 +149,33 @@ bool rbutilFrmApp::ReadGlobalConfig(rbutilFrm* myFrame) | |||
146 | gv->GlobalConfig->SetPath(wxT("/platforms")); | 149 | gv->GlobalConfig->SetPath(wxT("/platforms")); |
147 | while(gv->GlobalConfig->Read(buf.Format(wxT("platform%d"), i + 1), | 150 | while(gv->GlobalConfig->Read(buf.Format(wxT("platform%d"), i + 1), |
148 | &tmpstr)) { | 151 | &tmpstr)) { |
149 | gv->plat_id.Add(tmpstr); | 152 | wxString cur = tmpstr; |
153 | //gv->plat_id.Add(tmpstr); | ||
150 | gv->GlobalConfig->Read(buf.Format(wxT("/%s/name"), | 154 | gv->GlobalConfig->Read(buf.Format(wxT("/%s/name"), |
151 | gv->plat_id[i].c_str()), &tmpstr); | 155 | cur.c_str()), &tmpstr); |
152 | gv->plat_name.Add(tmpstr); | 156 | gv->plat_name.Add(tmpstr); |
157 | gv->GlobalConfig->Read(buf.Format(wxT("/%s/platform"), | ||
158 | cur.c_str()), &tmpstr); | ||
159 | gv->plat_id.Add(tmpstr); | ||
153 | gv->GlobalConfig->Read(buf.Format(wxT("/%s/released"), | 160 | gv->GlobalConfig->Read(buf.Format(wxT("/%s/released"), |
154 | gv->plat_id[i].c_str()), &tmpstr); | 161 | cur.c_str()), &tmpstr); |
155 | gv->plat_released.Add( (tmpstr == wxT("yes")) ? true : false ) ; | 162 | gv->plat_released.Add( (tmpstr == wxT("yes")) ? true : false ) ; |
163 | gv->GlobalConfig->Read(buf.Format(wxT("/%s/needsbootloader"), | ||
164 | cur.c_str()), &tmpstr); | ||
165 | gv->plat_needsbootloader.Add( (tmpstr == wxT("yes")) ? true : false ) ; | ||
166 | gv->GlobalConfig->Read(buf.Format(wxT("/%s/bootloadermethod"), | ||
167 | cur.c_str()), &tmpstr); | ||
168 | gv->plat_bootloadermethod.Add(tmpstr); | ||
169 | gv->GlobalConfig->Read(buf.Format(wxT("/%s/bootloadername"), | ||
170 | cur.c_str()), &tmpstr); | ||
171 | gv->plat_bootloadername.Add(tmpstr); | ||
172 | gv->GlobalConfig->Read(buf.Format(wxT("/%s/autodetect"), | ||
173 | cur.c_str()), &tmpstr); | ||
174 | gv->plat_autodetect.Add( (tmpstr == wxT("yes")) ? true : false ) ; | ||
175 | gv->GlobalConfig->Read(buf.Format(wxT("/%s/combinedname"), | ||
176 | cur.c_str()), &tmpstr); | ||
177 | gv->plat_combinedname.Add(tmpstr); | ||
178 | |||
156 | i++; | 179 | i++; |
157 | } | 180 | } |
158 | 181 | ||
@@ -184,6 +207,9 @@ bool rbutilFrmApp::ReadGlobalConfig(rbutilFrm* myFrame) | |||
184 | gv->GlobalConfig->Read(wxT("prog_name"), &tmpstr); | 207 | gv->GlobalConfig->Read(wxT("prog_name"), &tmpstr); |
185 | gv->prog_name = tmpstr; | 208 | gv->prog_name = tmpstr; |
186 | 209 | ||
210 | gv->GlobalConfig->Read(wxT("bootloader_url"), &tmpstr); | ||
211 | gv->bootloader_url = tmpstr; | ||
212 | |||
187 | #ifdef __WXMSW__ | 213 | #ifdef __WXMSW__ |
188 | gv->curdestdir = wxT("D:\\"); | 214 | gv->curdestdir = wxT("D:\\"); |
189 | #else | 215 | #else |
diff --git a/rbutil/rbutilFrm.cpp b/rbutil/rbutilFrm.cpp index 0d56e9c5b1..738da27f2a 100644 --- a/rbutil/rbutilFrm.cpp +++ b/rbutil/rbutilFrm.cpp | |||
@@ -28,6 +28,8 @@ | |||
28 | #include "tools2_3d.xpm" | 28 | #include "tools2_3d.xpm" |
29 | #include "rblogo.xpm" | 29 | #include "rblogo.xpm" |
30 | 30 | ||
31 | #include "bootloaders.h" | ||
32 | |||
31 | #include "wizard.xpm" | 33 | #include "wizard.xpm" |
32 | 34 | ||
33 | //---------------------------------------------------------------------------- | 35 | //---------------------------------------------------------------------------- |
@@ -39,6 +41,7 @@ BEGIN_EVENT_TABLE(rbutilFrm,wxFrame) | |||
39 | EVT_BUTTON (ID_REMOVE_BTN, rbutilFrm::OnRemoveBtn) | 41 | EVT_BUTTON (ID_REMOVE_BTN, rbutilFrm::OnRemoveBtn) |
40 | EVT_BUTTON (ID_FONT_BTN, rbutilFrm::OnFontBtn) | 42 | EVT_BUTTON (ID_FONT_BTN, rbutilFrm::OnFontBtn) |
41 | EVT_BUTTON (ID_BOOTLOADER_BTN, rbutilFrm::OnBootloaderBtn) | 43 | EVT_BUTTON (ID_BOOTLOADER_BTN, rbutilFrm::OnBootloaderBtn) |
44 | EVT_BUTTON (ID_BOOTLOADERREMOVE_BTN, rbutilFrm::OnBootloaderRemoveBtn) | ||
42 | 45 | ||
43 | EVT_CLOSE(rbutilFrm::rbutilFrmClose) | 46 | EVT_CLOSE(rbutilFrm::rbutilFrmClose) |
44 | EVT_MENU(ID_FILE_EXIT, rbutilFrm::OnFileExit) | 47 | EVT_MENU(ID_FILE_EXIT, rbutilFrm::OnFileExit) |
@@ -116,8 +119,7 @@ void rbutilFrm::CreateGUIControls(void) | |||
116 | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL | wxALL,5); | 119 | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL | wxALL,5); |
117 | 120 | ||
118 | WxStaticText2 = new wxStaticText(WxPanel1, ID_WXSTATICTEXT2, | 121 | WxStaticText2 = new wxStaticText(WxPanel1, ID_WXSTATICTEXT2, |
119 | _("Install Rockbox on your audio player"), wxPoint(70,16), | 122 | _("Install Rockbox on your audio player")); |
120 | wxSize(175,17), 0, wxT("WxStaticText2")); | ||
121 | WxFlexGridSizer1->Add(WxStaticText2,0, | 123 | WxFlexGridSizer1->Add(WxStaticText2,0, |
122 | wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxALL,5); | 124 | wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxALL,5); |
123 | 125 | ||
@@ -149,11 +151,24 @@ void rbutilFrm::CreateGUIControls(void) | |||
149 | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL | wxALL,5); | 151 | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL | wxALL,5); |
150 | 152 | ||
151 | WxStaticText3 = new wxStaticText(WxPanel1, ID_WXSTATICTEXT3, | 153 | WxStaticText3 = new wxStaticText(WxPanel1, ID_WXSTATICTEXT3, |
152 | _("Remove Rockbox from your audio player"), wxPoint(60,66), | 154 | _("Remove Rockbox from your audio player")); |
153 | wxSize(196,17), 0, wxT("WxStaticText3")); | ||
154 | WxFlexGridSizer1->Add(WxStaticText3,0, | 155 | WxFlexGridSizer1->Add(WxStaticText3,0, |
155 | wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxALL,5); | 156 | wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxALL,5); |
156 | 157 | ||
158 | wxBitmap WxBitmapButton4_BITMAP (uninstall_3d_xpm); | ||
159 | WxBitmapButton4 = new wxBitmapButton(WxPanel1, ID_BOOTLOADERREMOVE_BTN, | ||
160 | WxBitmapButton4_BITMAP, wxPoint(0,0), wxSize(64,54), | ||
161 | wxRAISED_BORDER | wxBU_AUTODRAW, wxDefaultValidator, | ||
162 | wxT("WxBitmapButton4")); | ||
163 | WxBitmapButton4->SetToolTip(_("Uninstall Bootloader")); | ||
164 | WxFlexGridSizer1->Add(WxBitmapButton4,0, | ||
165 | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL | wxALL,5); | ||
166 | |||
167 | WxStaticText4 = new wxStaticText(WxPanel1, ID_WXSTATICTEXT4, | ||
168 | _("Remove Rockbox Bootloader from your audio player")); | ||
169 | WxFlexGridSizer1->Add(WxStaticText4,0, | ||
170 | wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxALL,5); | ||
171 | |||
157 | WxMenuBar1 = new wxMenuBar(); | 172 | WxMenuBar1 = new wxMenuBar(); |
158 | wxMenu *ID_FILE_MENU_Mnu_Obj = new wxMenu(0); | 173 | wxMenu *ID_FILE_MENU_Mnu_Obj = new wxMenu(0); |
159 | WxMenuBar1->Append(ID_FILE_MENU_Mnu_Obj, _("&File")); | 174 | WxMenuBar1->Append(ID_FILE_MENU_Mnu_Obj, _("&File")); |
@@ -251,7 +266,10 @@ void rbutilFrm::OnFileWipeCache(wxCommandEvent& event) | |||
251 | 266 | ||
252 | if (! rm_rf(cacheloc) ) | 267 | if (! rm_rf(cacheloc) ) |
253 | { | 268 | { |
254 | MESG_DIALOG(_("Local download cache has been deleted.")); | 269 | wxMessageDialog* msg = new wxMessageDialog(this, _("Local download cache has been deleted.") |
270 | ,"Cache deletion", wxOK |wxICON_INFORMATION); | ||
271 | msg->ShowModal(); | ||
272 | delete msg; | ||
255 | } | 273 | } |
256 | else { | 274 | else { |
257 | MESG_DIALOG(_("Errors occured deleting the local download cache.")); | 275 | MESG_DIALOG(_("Errors occured deleting the local download cache.")); |
@@ -260,16 +278,207 @@ void rbutilFrm::OnFileWipeCache(wxCommandEvent& event) | |||
260 | wxMkdir(cacheloc, 0777); | 278 | wxMkdir(cacheloc, 0777); |
261 | } | 279 | } |
262 | 280 | ||
281 | void rbutilFrm::OnBootloaderRemoveBtn(wxCommandEvent& event) | ||
282 | { | ||
283 | wxLogVerbose("=== begin rbutilFrm::OnBootloaderRemoveBtn(event)"); | ||
284 | |||
285 | wxWizard *wizard = new wxWizard(this, wxID_ANY, | ||
286 | _("Rockbox Bootloader Uninstallation Wizard"), | ||
287 | wxBitmap(wizard_xpm), | ||
288 | wxDefaultPosition, | ||
289 | wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER); | ||
290 | wxBootPlatformPage* page1 = new wxBootPlatformPage(wizard); | ||
291 | wxBootLocationPage* page2 = new wxBootLocationPage(wizard); // Only one of these pages are shown | ||
292 | wxIpodLocationPage* page3 = new wxIpodLocationPage(wizard); // depending on Device selected | ||
293 | |||
294 | page1->SetNext(page2); | ||
295 | page2->SetPrev(page1); | ||
296 | page2->SetNext(page3); | ||
297 | page3->SetPrev(page2); | ||
298 | |||
299 | wizard->GetPageAreaSizer()->Add(page1); | ||
300 | |||
301 | |||
302 | if (wizard->RunWizard(page1) ) | ||
303 | { | ||
304 | // uninstall the bootloader | ||
305 | if(gv->curbootloadermethod == "ipodpatcher") | ||
306 | { | ||
307 | |||
308 | if(ipodpatcher(BOOTLOADER_REM)) | ||
309 | { | ||
310 | wxMessageDialog* msg = new wxMessageDialog(this, _("The Bootloader has been uninstalled.") | ||
311 | ,"Uninstallation", wxOK |wxICON_INFORMATION); | ||
312 | msg->ShowModal(); | ||
313 | delete msg; | ||
314 | } | ||
315 | else | ||
316 | { | ||
317 | MESG_DIALOG(_("The Uninstallation has failed.") ); | ||
318 | } | ||
319 | } | ||
320 | else if(gv->curbootloadermethod == "gigabeatf") | ||
321 | { | ||
322 | |||
323 | if(gigabeatf(BOOTLOADER_REM)) | ||
324 | { | ||
325 | wxMessageDialog* msg = new wxMessageDialog(this, _("The Bootloader has been uninstalled.") | ||
326 | ,"Uninstallation", wxOK |wxICON_INFORMATION); | ||
327 | msg->ShowModal(); | ||
328 | delete msg; | ||
329 | } | ||
330 | else | ||
331 | MESG_DIALOG(_("The Uninstallation has failed.") ); | ||
332 | } | ||
333 | else if(gv->curbootloadermethod == "h10") | ||
334 | { | ||
335 | if(h10(BOOTLOADER_REM)) | ||
336 | { | ||
337 | wxMessageDialog* msg = new wxMessageDialog(this, _("The Bootloader has been uninstalled.") | ||
338 | ,"Uninstallation", wxOK |wxICON_INFORMATION); | ||
339 | msg->ShowModal(); | ||
340 | delete msg; | ||
341 | } | ||
342 | else | ||
343 | MESG_DIALOG(_("The Uninstallation has failed.") ); | ||
344 | |||
345 | } | ||
346 | else if(gv->curbootloadermethod == "iaudio" ) | ||
347 | { | ||
348 | wxMessageDialog* msg = new wxMessageDialog(this, _("To uninstall the Bootloader on this Device,\n" | ||
349 | "you need to download and install an Original Firmware from the Manufacturer.") | ||
350 | ,"Uninstallation", wxOK |wxICON_INFORMATION); | ||
351 | msg->ShowModal(); | ||
352 | delete msg; | ||
353 | } | ||
354 | else if(gv->curbootloadermethod == "fwpatcher" ) | ||
355 | { | ||
356 | wxMessageDialog* msg = new wxMessageDialog(this, _("To uninstall the Bootloader on this Device,\n" | ||
357 | "you need to download and install an original Firmware from the Manufacturer.\n" | ||
358 | "To do this, you need to boot into the original Firmware.") | ||
359 | ,"Uninstallation", wxOK |wxICON_INFORMATION); | ||
360 | msg->ShowModal(); | ||
361 | delete msg; | ||
362 | } | ||
363 | else | ||
364 | { | ||
365 | MESG_DIALOG(_("Unsupported Bootloader Method") ); | ||
366 | } | ||
367 | } | ||
368 | else | ||
369 | { | ||
370 | MESG_DIALOG(_("The bootloader Uninstallation wizard was cancelled") ); | ||
371 | } | ||
372 | |||
373 | wxLogVerbose("=== end rbutilFrm::OnBootloaderRemoveBtn"); | ||
374 | } | ||
263 | 375 | ||
264 | void rbutilFrm::OnBootloaderBtn(wxCommandEvent& event) | 376 | void rbutilFrm::OnBootloaderBtn(wxCommandEvent& event) |
265 | { | 377 | { |
266 | if (!wxLaunchDefaultBrowser(wxT( | 378 | wxLogVerbose("=== begin rbutilFrm::OnBootloaderBtn(event)"); |
267 | "http://www.rockbox.org/twiki/bin/view/Main/" | 379 | |
268 | "DocsIndex#Rockbox_Installation_Instruction") ) ) | 380 | wxWizard *wizard = new wxWizard(this, wxID_ANY, |
381 | _("Rockbox Installation Wizard"), | ||
382 | wxBitmap(wizard_xpm), | ||
383 | wxDefaultPosition, | ||
384 | wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER); | ||
385 | wxBootPlatformPage* page1 = new wxBootPlatformPage(wizard); | ||
386 | wxFirmwareLocationPage* page2 = new wxFirmwareLocationPage(wizard); //this page is optional | ||
387 | wxBootLocationPage* page3 = new wxBootLocationPage(wizard); // Only one of these pages are shown | ||
388 | wxIpodLocationPage* page4 = new wxIpodLocationPage(wizard); // depending on Device selected | ||
389 | |||
390 | page1->SetNext(page2); | ||
391 | page2->SetPrev(page1); | ||
392 | page2->SetNext(page3); | ||
393 | page3->SetPrev(page2); | ||
394 | page3->SetNext(page4); | ||
395 | page4->SetPrev(page3); | ||
396 | |||
397 | wizard->GetPageAreaSizer()->Add(page1); | ||
398 | |||
399 | if (wizard->RunWizard(page1) ) | ||
400 | { | ||
401 | // start installation depending on player | ||
402 | if(gv->curbootloadermethod == "ipodpatcher") | ||
403 | { | ||
404 | |||
405 | if(ipodpatcher(BOOTLOADER_ADD)) | ||
406 | { | ||
407 | wxMessageDialog* msg = new wxMessageDialog(this, _("The Bootloader has been installed on your device.") | ||
408 | ,"Installation", wxOK |wxICON_INFORMATION); | ||
409 | msg->ShowModal(); | ||
410 | delete msg; | ||
411 | } | ||
412 | else | ||
413 | { | ||
414 | MESG_DIALOG(_("The installation has failed.") ); | ||
415 | } | ||
416 | } | ||
417 | else if(gv->curbootloadermethod == "gigabeatf") | ||
418 | { | ||
419 | |||
420 | if(gigabeatf(BOOTLOADER_ADD)) | ||
421 | { | ||
422 | wxMessageDialog* msg = new wxMessageDialog(this, _("The Bootloader has been installed on your device.") | ||
423 | ,"Installation", wxOK |wxICON_INFORMATION); | ||
424 | msg->ShowModal(); | ||
425 | delete msg; | ||
426 | } | ||
427 | else | ||
428 | MESG_DIALOG(_("The installation has failed.") ); | ||
429 | } | ||
430 | else if(gv->curbootloadermethod == "iaudio" ) | ||
431 | { | ||
432 | if(iaudiox5(BOOTLOADER_ADD)) | ||
433 | { | ||
434 | wxMessageDialog* msg = new wxMessageDialog(this, _("The Bootloader has been installed on your device.\n" | ||
435 | "Now turn OFF your Device, unplug USB,and insert Charger\n" | ||
436 | "Your Device will automatically upgrade the flash with the Rockbox bootloader") | ||
437 | ,"Installation", wxOK |wxICON_INFORMATION); | ||
438 | msg->ShowModal(); | ||
439 | delete msg; | ||
440 | } | ||
441 | else | ||
442 | MESG_DIALOG(_("The installation has failed.") ); | ||
443 | } | ||
444 | else if(gv->curbootloadermethod == "fwpatcher") | ||
445 | { | ||
446 | if(fwpatcher(BOOTLOADER_ADD)) | ||
447 | { | ||
448 | wxMessageDialog* msg = new wxMessageDialog(this, _("The Bootloader has been patched and copied on your device.\n" | ||
449 | "Now use the Firmware upgrade option of your Device\n") | ||
450 | ,"Installation", wxOK |wxICON_INFORMATION); | ||
451 | msg->ShowModal(); | ||
452 | delete msg; | ||
453 | } | ||
454 | else | ||
455 | MESG_DIALOG(_("The installation has failed.") ); | ||
456 | } | ||
457 | else if(gv->curbootloadermethod == "h10") | ||
458 | { | ||
459 | if(h10(BOOTLOADER_ADD)) | ||
460 | { | ||
461 | wxMessageDialog* msg = new wxMessageDialog(this, _("The Bootloader has been patched and copied on your device.\n" | ||
462 | "Now use the Firmware upgrade option of your Device\n") | ||
463 | ,"Installation", wxOK |wxICON_INFORMATION); | ||
464 | msg->ShowModal(); | ||
465 | delete msg; | ||
466 | } | ||
467 | else | ||
468 | MESG_DIALOG(_("The installation has failed.") ); | ||
469 | } | ||
470 | else | ||
471 | { | ||
472 | MESG_DIALOG(_("Unsupported Bootloader Method") ); | ||
473 | } | ||
474 | } | ||
475 | else | ||
269 | { | 476 | { |
270 | ERR_DIALOG(_("Unable to launch external browser"), | 477 | MESG_DIALOG(_("The bootloader installation wizard was cancelled") ); |
271 | _("Boot loader install instructions.")); | ||
272 | } | 478 | } |
479 | |||
480 | wxLogVerbose("=== end rbutilFrm::OnBootloaderBtn"); | ||
481 | |||
273 | } | 482 | } |
274 | 483 | ||
275 | void rbutilFrm::OnInstallBtn(wxCommandEvent& event) | 484 | void rbutilFrm::OnInstallBtn(wxCommandEvent& event) |
@@ -378,7 +587,10 @@ void rbutilFrm::OnInstallBtn(wxCommandEvent& event) | |||
378 | 587 | ||
379 | if ( !UnzipFile(dest, gv->curdestdir, true) ) | 588 | if ( !UnzipFile(dest, gv->curdestdir, true) ) |
380 | { | 589 | { |
381 | MESG_DIALOG(_("Rockbox has been installed on your device.") ); | 590 | wxMessageDialog* msg = new wxMessageDialog(this, _("Rockbox has been installed on your device.") |
591 | ,"Installation", wxOK |wxICON_INFORMATION); | ||
592 | msg->ShowModal(); | ||
593 | delete msg; | ||
382 | } else | 594 | } else |
383 | { | 595 | { |
384 | wxRemoveFile(dest); | 596 | wxRemoveFile(dest); |
@@ -472,7 +684,10 @@ void rbutilFrm::OnFontBtn(wxCommandEvent& event) | |||
472 | 684 | ||
473 | if ( !UnzipFile(dest, gv->curdestdir, true) ) | 685 | if ( !UnzipFile(dest, gv->curdestdir, true) ) |
474 | { | 686 | { |
475 | MESG_DIALOG(_("The Rockbox fonts have been installed on your device.") ); | 687 | wxMessageDialog* msg = new wxMessageDialog(this, _("The Rockbox fonts have been installed on your device.") |
688 | ,"Installation", wxOK |wxICON_INFORMATION); | ||
689 | msg->ShowModal(); | ||
690 | delete msg; | ||
476 | } else | 691 | } else |
477 | { | 692 | { |
478 | wxRemoveFile(dest); | 693 | wxRemoveFile(dest); |
@@ -511,7 +726,11 @@ void rbutilFrm::OnRemoveBtn(wxCommandEvent& event) | |||
511 | _("The uninstallation wizard was cancelled or completed with " | 726 | _("The uninstallation wizard was cancelled or completed with " |
512 | "some errors.") ); | 727 | "some errors.") ); |
513 | } else { | 728 | } else { |
514 | MESG_DIALOG(_("The uninstall wizard completed successfully") ); | 729 | wxMessageDialog* msg = new wxMessageDialog(this, _("The uninstall wizard completed successfully\n" |
730 | "Depending on which Device you own, you also have to uninstall the Bootloader") | ||
731 | ,"Uninstallation", wxOK |wxICON_INFORMATION); | ||
732 | msg->ShowModal(); | ||
733 | delete msg; | ||
515 | } | 734 | } |
516 | } else | 735 | } else |
517 | { | 736 | { |
@@ -542,7 +761,10 @@ void rbutilFrm::OnPortableInstall(wxCommandEvent& event) | |||
542 | { | 761 | { |
543 | if ( InstallRbutil(gv->curdestdir) ) | 762 | if ( InstallRbutil(gv->curdestdir) ) |
544 | { | 763 | { |
545 | MESG_DIALOG(_("The Rockbox Utility has been installed on your device.") ); | 764 | wxMessageDialog* msg = new wxMessageDialog(this, _("The Rockbox Utility has been installed on your device.") |
765 | ,"Installation", wxOK |wxICON_INFORMATION); | ||
766 | msg->ShowModal(); | ||
767 | delete msg; | ||
546 | } else | 768 | } else |
547 | { | 769 | { |
548 | ERR_DIALOG(_("Installation failed"), _("Portable Install")); | 770 | ERR_DIALOG(_("Installation failed"), _("Portable Install")); |
diff --git a/rbutil/rbutilFrm.h b/rbutil/rbutilFrm.h index b0332d0c74..9e75be3851 100644 --- a/rbutil/rbutilFrm.h +++ b/rbutil/rbutilFrm.h | |||
@@ -58,11 +58,13 @@ public: | |||
58 | public: | 58 | public: |
59 | wxMenuBar *WxMenuBar1; | 59 | wxMenuBar *WxMenuBar1; |
60 | wxStaticText *WxStaticText3; | 60 | wxStaticText *WxStaticText3; |
61 | wxStaticText *WxStaticText4; | ||
61 | wxBitmapButton *WxBitmapButton2; | 62 | wxBitmapButton *WxBitmapButton2; |
62 | wxStaticText *WxStaticText2; | 63 | wxStaticText *WxStaticText2; |
63 | wxBitmapButton *WxBitmapButton1; | 64 | wxBitmapButton *WxBitmapButton1; |
64 | wxBitmapButton *WxBitmapButton3; | 65 | wxBitmapButton *WxBitmapButton3; |
65 | wxBitmapButton *WxBitmapButton4; | 66 | wxBitmapButton *WxBitmapButton4; |
67 | wxBitmapButton *WxBitmapButton5; | ||
66 | wxFlexGridSizer *WxFlexGridSizer1; | 68 | wxFlexGridSizer *WxFlexGridSizer1; |
67 | wxStaticBoxSizer *WxStaticBoxSizer3; | 69 | wxStaticBoxSizer *WxStaticBoxSizer3; |
68 | wxStaticBitmap *WxStaticBitmap1; | 70 | wxStaticBitmap *WxStaticBitmap1; |
@@ -78,7 +80,9 @@ public: | |||
78 | ID_PORTABLE_INSTALL = 1037, | 80 | ID_PORTABLE_INSTALL = 1037, |
79 | 81 | ||
80 | ID_WXSTATICTEXT3 = 1032, | 82 | ID_WXSTATICTEXT3 = 1032, |
81 | ID_REMOVE_BTN = 1031, | 83 | ID_WXSTATICTEXT4 = 1032, |
84 | ID_REMOVE_BTN = 1039, | ||
85 | ID_BOOTLOADERREMOVE_BTN = 1038, | ||
82 | ID_WXSTATICTEXT2 = 1029, | 86 | ID_WXSTATICTEXT2 = 1029, |
83 | ID_INSTALL_BTN = 1028, | 87 | ID_INSTALL_BTN = 1028, |
84 | ID_WXSTATICBITMAP1 = 1053, | 88 | ID_WXSTATICBITMAP1 = 1053, |
@@ -100,6 +104,7 @@ public: | |||
100 | void OnFontBtn(wxCommandEvent& event); | 104 | void OnFontBtn(wxCommandEvent& event); |
101 | void OnBootloaderBtn(wxCommandEvent& event); | 105 | void OnBootloaderBtn(wxCommandEvent& event); |
102 | void OnPortableInstall(wxCommandEvent& event); | 106 | void OnPortableInstall(wxCommandEvent& event); |
107 | void OnBootloaderRemoveBtn(wxCommandEvent& event); | ||
103 | 108 | ||
104 | }; | 109 | }; |
105 | 110 | ||
diff --git a/rbutil/wizard_pages.cpp b/rbutil/wizard_pages.cpp index 7cd38cf004..2c4c609271 100644 --- a/rbutil/wizard_pages.cpp +++ b/rbutil/wizard_pages.cpp | |||
@@ -19,6 +19,85 @@ | |||
19 | ****************************************************************************/ | 19 | ****************************************************************************/ |
20 | 20 | ||
21 | #include "wizard_pages.h" | 21 | #include "wizard_pages.h" |
22 | #include "bootloaders.h" | ||
23 | |||
24 | wxBootPlatformPage::wxBootPlatformPage(wxWizard *parent) : wxWizardPageSimple(parent) | ||
25 | { | ||
26 | wxBoxSizer* WxBoxSizer1 = new wxBoxSizer(wxVERTICAL); | ||
27 | |||
28 | wxStaticText* WxStaticText1 = new wxStaticText(this, wxID_ANY, | ||
29 | _("Please select the model of audio device that you would like to" | ||
30 | "\ninstall the Rockbox Bootloader on from the list below:")); | ||
31 | WxBoxSizer1->Add(WxStaticText1,0,wxGROW | wxALL,5); | ||
32 | |||
33 | wxArrayString arrayStringFor_WxListBox1; | ||
34 | for (unsigned int i=0; i< gv->plat_name.GetCount(); i++) { | ||
35 | if (gv->plat_needsbootloader[i]) | ||
36 | { | ||
37 | if(gv->plat_autodetect[i]) | ||
38 | { | ||
39 | if(arrayStringFor_WxListBox1.Index(gv->plat_combinedname[i]) == wxNOT_FOUND) | ||
40 | arrayStringFor_WxListBox1.Add(gv->plat_combinedname[i]); | ||
41 | } | ||
42 | else | ||
43 | { | ||
44 | arrayStringFor_WxListBox1.Add(gv->plat_name[i]); | ||
45 | } | ||
46 | } | ||
47 | } | ||
48 | |||
49 | BootPlatformListBox = new wxListBox(this, wxID_ANY, wxDefaultPosition, | ||
50 | wxDefaultSize, arrayStringFor_WxListBox1, wxLB_SINGLE); | ||
51 | WxBoxSizer1->Add(BootPlatformListBox,0,wxGROW | wxALL,5); | ||
52 | |||
53 | SetSizer(WxBoxSizer1); | ||
54 | WxBoxSizer1->Fit(this); | ||
55 | |||
56 | for (unsigned int i=0; i< gv->plat_id.GetCount(); i++) { | ||
57 | if (gv->plat_id[i] == gv->curplat) BootPlatformListBox->SetSelection(i); | ||
58 | } | ||
59 | |||
60 | } | ||
61 | |||
62 | wxWizardPage * wxBootPlatformPage::GetNext() const | ||
63 | { | ||
64 | if(gv->curbootloadermethod != "fwpatcher"&& gv->curbootloadermethod != "ipodpatcher") | ||
65 | { | ||
66 | if(wxWizardPageSimple::GetNext()->GetNext() != NULL) // not iriver hx0 and ipod, skip one page | ||
67 | return wxWizardPageSimple::GetNext()->GetNext(); | ||
68 | } | ||
69 | else if(gv->curbootloadermethod == "ipodpatcher") | ||
70 | { | ||
71 | if(wxWizardPageSimple::GetNext()->GetNext() != NULL) | ||
72 | if(wxWizardPageSimple::GetNext()->GetNext()->GetNext() != NULL) | ||
73 | return wxWizardPageSimple::GetNext()->GetNext()->GetNext(); //ipod, skip 2 pages | ||
74 | else | ||
75 | return wxWizardPageSimple::GetNext()->GetNext(); //ipod, skip 1 page (for uninstallation) | ||
76 | } | ||
77 | |||
78 | // all others , no skip | ||
79 | return wxWizardPageSimple::GetNext(); | ||
80 | } | ||
81 | |||
82 | bool wxBootPlatformPage::TransferDataFromWindow() | ||
83 | { | ||
84 | if (BootPlatformListBox->GetSelection() == wxNOT_FOUND ) | ||
85 | { | ||
86 | WARN_DIALOG(_("You must select an audio device type before proceeding"), | ||
87 | _("Select Platform")); | ||
88 | return false; | ||
89 | } else | ||
90 | { | ||
91 | int idx = gv->plat_name.Index(BootPlatformListBox->GetStringSelection()); | ||
92 | if(idx == wxNOT_FOUND) idx =gv->plat_combinedname.Index(BootPlatformListBox->GetStringSelection()); | ||
93 | gv->curplatnum = idx; | ||
94 | gv->curplat = gv->plat_id[gv->curplatnum]; | ||
95 | gv->curbootloadermethod = gv->plat_bootloadermethod[gv->curplatnum]; | ||
96 | gv->curbootloader = gv->plat_bootloadername[gv->curplatnum]; | ||
97 | |||
98 | return true; | ||
99 | } | ||
100 | } | ||
22 | 101 | ||
23 | wxPlatformPage::wxPlatformPage(wxWizard *parent) : wxWizardPageSimple(parent) | 102 | wxPlatformPage::wxPlatformPage(wxWizard *parent) : wxWizardPageSimple(parent) |
24 | { | 103 | { |
@@ -56,8 +135,265 @@ bool wxPlatformPage::TransferDataFromWindow() | |||
56 | } | 135 | } |
57 | } | 136 | } |
58 | 137 | ||
138 | BEGIN_EVENT_TABLE(wxIpodLocationPage,wxWizardPageSimple) | ||
139 | EVT_BUTTON (ID_IPODLOCATION_BTN, wxIpodLocationPage::OnIpodLocationBtn) | ||
140 | EVT_WIZARD_PAGE_CHANGING(wxID_ANY, wxIpodLocationPage::OnWizardPageChanging) | ||
141 | END_EVENT_TABLE(); | ||
142 | |||
143 | wxIpodLocationPage::wxIpodLocationPage(wxWizard* parent) : wxWizardPageSimple(parent) | ||
144 | { | ||
145 | |||
146 | wxBoxSizer* WxBoxSizer1 = new wxBoxSizer(wxVERTICAL); | ||
147 | |||
148 | // Header text | ||
149 | IpodLocationLabel = new wxStaticText(this, wxID_ANY, | ||
150 | wxT("Rockbox utility needs to know the device where your ipod\n" | ||
151 | "device is located on your computer. Rockbox utility\n" | ||
152 | "has detected the following location:")); | ||
153 | WxBoxSizer1->Add(IpodLocationLabel,0,wxGROW | wxALL, 5); | ||
154 | |||
155 | // device location | ||
156 | wxBoxSizer* WxBoxSizer3 = new wxBoxSizer(wxHORIZONTAL); | ||
157 | WxBoxSizer1->Add(WxBoxSizer3,0, | ||
158 | wxGROW | wxALIGN_CENTER_VERTICAL | wxALL, 5); | ||
159 | |||
160 | IpodLocationText = new wxStaticText(this, wxID_ANY, "", | ||
161 | wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT); | ||
162 | WxBoxSizer3->Add(IpodLocationText,1, | ||
163 | wxGROW | wxALIGN_CENTER_VERTICAL | wxALL, 5); | ||
164 | |||
165 | IpodLocationBtn = new wxButton(this, ID_IPODLOCATION_BTN, wxT("Scan"), | ||
166 | wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, | ||
167 | wxT("IpodLocationBtn")); | ||
168 | IpodLocationBtn->SetToolTip(wxT("Scan for your Ipod")); | ||
169 | WxBoxSizer3->Add(IpodLocationBtn,0,wxALIGN_CENTER_VERTICAL | wxALL, 5); | ||
170 | |||
171 | // Extra text | ||
172 | IpodLocationExtraText = new wxStaticText(this,wxID_ANY, wxT("")); | ||
173 | WxBoxSizer1->Add(IpodLocationExtraText,0,wxGROW | wxALL, 5); | ||
174 | |||
175 | SetSizer(WxBoxSizer1); | ||
176 | WxBoxSizer1->Fit(this); | ||
177 | } | ||
178 | |||
179 | wxWizardPage* wxIpodLocationPage::GetPrev() const | ||
180 | { | ||
181 | if(gv->curbootloadermethod == "ipodpatcher") //if ipod, skip previous | ||
182 | { | ||
183 | if(wxWizardPageSimple::GetPrev()->GetPrev() != NULL) | ||
184 | return wxWizardPageSimple::GetPrev()->GetPrev(); | ||
185 | |||
186 | } | ||
187 | } | ||
188 | |||
189 | void wxIpodLocationPage::OnWizardPageChanging(wxWizardEvent& event) | ||
190 | { | ||
191 | if(event.GetDirection()) // going forwards in the Wizard | ||
192 | { | ||
193 | if(gv->curbootloadermethod=="ipodpatcher") | ||
194 | { | ||
195 | if(IpodLocationText->GetLabel() == "no Ipod found" || | ||
196 | IpodLocationText->GetLabel() =="More than 1 Ipod found" || | ||
197 | IpodLocationText->GetLabel() =="") | ||
198 | { | ||
199 | WARN_DIALOG(_("No valid ipod found!"), _("Select Location")); | ||
200 | event.Veto(); //stop pagechanging | ||
201 | } | ||
202 | } | ||
203 | } | ||
204 | } | ||
205 | |||
206 | void wxIpodLocationPage::OnIpodLocationBtn(wxCommandEvent& event) | ||
207 | { | ||
208 | wxLogVerbose("=== begin wxIpodLocationPage::OnIpodLocationBtn"); | ||
209 | struct ipod_t ipod; | ||
210 | int n = ipod_scan(&ipod); | ||
211 | |||
212 | gv->curbootloader="bootloader-"; | ||
213 | gv->curbootloader.Append(ipod.targetname); | ||
214 | if(n == 0) | ||
215 | IpodLocationText->SetLabel("no Ipod found"); | ||
216 | else if( n==1) | ||
217 | IpodLocationText->SetLabel(ipod.modelstr); | ||
218 | else | ||
219 | IpodLocationText->SetLabel("More than 1 Ipod found"); | ||
220 | |||
221 | if(ipod.macpod) | ||
222 | IpodLocationExtraText->SetLabel("This Ipod is a Mac formated Ipod\n" | ||
223 | "Rockbox will not work on this.\n" | ||
224 | "You have to convert it first to Fat32"); | ||
225 | wxLogVerbose("=== end wxIpodLocationPage::OnIpodLocationBtn"); | ||
226 | |||
227 | } | ||
228 | |||
229 | BEGIN_EVENT_TABLE(wxBootLocationPage,wxWizardPageSimple) | ||
230 | EVT_BUTTON (ID_BOOTLOCATION_BTN, wxBootLocationPage::OnBootLocationBtn) | ||
231 | EVT_WIZARD_PAGE_CHANGING(wxID_ANY, wxBootLocationPage::OnWizardPageChanging) | ||
232 | END_EVENT_TABLE(); | ||
233 | |||
234 | wxBootLocationPage::wxBootLocationPage(wxWizard* parent) : wxWizardPageSimple(parent) | ||
235 | { | ||
236 | |||
237 | wxBoxSizer* WxBoxSizer1 = new wxBoxSizer(wxVERTICAL); | ||
238 | |||
239 | // Header text | ||
240 | BootLocationLabel = new wxStaticText(this, wxID_ANY, | ||
241 | wxT("Rockbox utility needs to know the folder where your audio\n" | ||
242 | "device is located on your computer. Currently Rockbox utility\n" | ||
243 | "is configured to use the following location:")); | ||
244 | WxBoxSizer1->Add(BootLocationLabel,0,wxGROW | wxALL, 5); | ||
245 | |||
246 | // device location | ||
247 | wxBoxSizer* WxBoxSizer3 = new wxBoxSizer(wxHORIZONTAL); | ||
248 | WxBoxSizer1->Add(WxBoxSizer3,0, | ||
249 | wxGROW | wxALIGN_CENTER_VERTICAL | wxALL, 5); | ||
250 | |||
251 | if (gv->curdestdir == wxT("")) gv->curdestdir = _("<none>"); | ||
252 | BootLocationText = new wxStaticText(this, wxID_ANY, gv->curdestdir, | ||
253 | wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT); | ||
254 | WxBoxSizer3->Add(BootLocationText,1, | ||
255 | wxGROW | wxALIGN_CENTER_VERTICAL | wxALL, 5); | ||
256 | |||
257 | BootLocationBtn = new wxButton(this, ID_BOOTLOCATION_BTN, wxT("Change"), | ||
258 | wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, | ||
259 | wxT("BootLocationBtn")); | ||
260 | BootLocationBtn->SetToolTip(wxT("Select the location of your audio device")); | ||
261 | WxBoxSizer3->Add(BootLocationBtn,0,wxALIGN_CENTER_VERTICAL | wxALL, 5); | ||
262 | |||
263 | SetSizer(WxBoxSizer1); | ||
264 | WxBoxSizer1->Fit(this); | ||
265 | } | ||
266 | |||
267 | wxWizardPage* wxBootLocationPage::GetPrev() const | ||
268 | { | ||
269 | if(gv->curbootloadermethod != "fwpatcher") | ||
270 | { | ||
271 | if(wxWizardPageSimple::GetPrev()->GetPrev() != NULL) | ||
272 | return wxWizardPageSimple::GetPrev()->GetPrev(); | ||
273 | |||
274 | } | ||
275 | |||
276 | return wxWizardPageSimple::GetPrev(); | ||
277 | } | ||
278 | |||
279 | wxWizardPage* wxBootLocationPage::GetNext() const | ||
280 | { | ||
281 | if(gv->curbootloadermethod == "ipodpatcher") | ||
282 | { | ||
283 | return wxWizardPageSimple::GetNext(); // if ipod then this is not the last page | ||
284 | } | ||
285 | else return NULL; // else this is the last page | ||
286 | } | ||
287 | |||
288 | void wxBootLocationPage::OnWizardPageChanging(wxWizardEvent& event) | ||
289 | { | ||
290 | if(event.GetDirection()) // going forwards in the Wizard | ||
291 | { | ||
292 | if(!wxDirExists(BootLocationText->GetLabel())) | ||
293 | { | ||
294 | WARN_DIALOG(_("You have not selected a valid location for your audio " | ||
295 | "device"), _("Select Location")); | ||
296 | event.Veto(); | ||
297 | } | ||
298 | |||
299 | } | ||
300 | } | ||
301 | |||
302 | bool wxBootLocationPage::TransferDataFromWindow() | ||
303 | { | ||
304 | gv->curdestdir = BootLocationText->GetLabel(); | ||
305 | return true; | ||
306 | |||
307 | } | ||
308 | |||
309 | |||
310 | void wxBootLocationPage::OnBootLocationBtn(wxCommandEvent& event) | ||
311 | { | ||
312 | const wxString& temp = wxDirSelector( | ||
313 | _("Please select the location of your audio device"), gv->curdestdir); | ||
314 | wxLogVerbose("=== begin wxBootLocationPage::OnBootLocationBtn(event)"); | ||
315 | if (!temp.empty()) | ||
316 | { | ||
317 | BootLocationText->SetLabel(temp); | ||
318 | } | ||
319 | wxLogVerbose("=== end wxBootLocationPage::OnBootLocationBtn"); | ||
320 | |||
321 | } | ||
322 | |||
323 | |||
324 | BEGIN_EVENT_TABLE(wxFirmwareLocationPage,wxWizardPageSimple) | ||
325 | EVT_BUTTON (ID_FIRMWARELOCATION_BTN, wxFirmwareLocationPage::OnFirmwareFilenameBtn) | ||
326 | EVT_WIZARD_PAGE_CHANGING(wxID_ANY, wxFirmwareLocationPage::OnWizardPageChanging) | ||
327 | END_EVENT_TABLE(); | ||
328 | |||
329 | wxFirmwareLocationPage::wxFirmwareLocationPage(wxWizard* parent) : wxWizardPageSimple(parent) | ||
330 | { | ||
331 | |||
332 | wxBoxSizer* WxBoxSizer1 = new wxBoxSizer(wxVERTICAL); | ||
333 | |||
334 | // Header text | ||
335 | FirmwareLocationText = new wxStaticText(this, wxID_ANY, | ||
336 | wxT("For this step Rockbox Utility needs an original Firmware.\n" | ||
337 | "You can download this from the Manufacturers Website.")); | ||
338 | WxBoxSizer1->Add(FirmwareLocationText,0,wxGROW | wxALL, 5); | ||
339 | |||
340 | // Filename text | ||
341 | wxBoxSizer* WxBoxSizer4 = new wxBoxSizer(wxHORIZONTAL); | ||
342 | WxBoxSizer1->Add(WxBoxSizer4,0, | ||
343 | wxGROW | wxALIGN_CENTER_VERTICAL | wxALL, 5); | ||
344 | |||
345 | FirmwareLocationFilename = new wxStaticText(this, wxID_ANY, gv->curfirmware, | ||
346 | wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT); | ||
347 | WxBoxSizer4->Add(FirmwareLocationFilename,1, | ||
348 | wxGROW | wxALIGN_CENTER_VERTICAL | wxALL, 5); | ||
349 | |||
350 | // Button | ||
351 | FirmwareLocationBtn = new wxButton(this, ID_FIRMWARELOCATION_BTN, wxT("Explore"), | ||
352 | wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, | ||
353 | wxT("FirmwareLocationBtn")); | ||
354 | FirmwareLocationBtn->SetToolTip(wxT("Select the location of the downloaded Firmware")); | ||
355 | WxBoxSizer4->Add(FirmwareLocationBtn,0,wxALIGN_CENTER_VERTICAL | wxALL, 5); | ||
356 | |||
357 | |||
358 | SetSizer(WxBoxSizer1); | ||
359 | WxBoxSizer1->Fit(this); | ||
360 | } | ||
361 | |||
362 | void wxFirmwareLocationPage::OnWizardPageChanging(wxWizardEvent& event) | ||
363 | { | ||
364 | if(event.GetDirection()) // going forwards in the Wizard | ||
365 | { | ||
366 | if( !wxFileExists(gv->curfirmware)) | ||
367 | { | ||
368 | WARN_DIALOG(_("You have not selected a valid location for the firmware " | ||
369 | "file"), _("Select File")); | ||
370 | event.Veto(); | ||
371 | } | ||
372 | } | ||
373 | |||
374 | } | ||
375 | |||
376 | void wxFirmwareLocationPage::OnFirmwareFilenameBtn(wxCommandEvent& event) | ||
377 | { | ||
378 | wxString temp = wxFileSelector( | ||
379 | _("Please select the location of the original Firmware"), gv->curdestdir,"","","*.hex"); | ||
380 | wxLogVerbose("=== begin wxFirmwareLocationPage::OnFirmwareFilenameBtn(event)"); | ||
381 | if (!temp.empty()) | ||
382 | { | ||
383 | gv->curfirmware=temp; | ||
384 | if(temp.Length() > 30) | ||
385 | { | ||
386 | temp.Remove(0, temp.Length()-30); | ||
387 | temp.Prepend("..."); | ||
388 | } | ||
389 | FirmwareLocationFilename->SetLabel(temp); | ||
390 | } | ||
391 | wxLogVerbose("=== end wxFirmwareLocationPage::OnFirmwareFilenameBtn"); | ||
392 | } | ||
393 | |||
59 | BEGIN_EVENT_TABLE(wxLocationPage,wxWizardPageSimple) | 394 | BEGIN_EVENT_TABLE(wxLocationPage,wxWizardPageSimple) |
60 | EVT_BUTTON (ID_LOCATION_BTN, wxLocationPage::OnLocationBtn) | 395 | EVT_BUTTON (ID_LOCATION_BTN, wxLocationPage::OnLocationBtn) |
396 | EVT_WIZARD_PAGE_CHANGING(wxID_ANY, wxLocationPage::OnWizardPageChanging) | ||
61 | END_EVENT_TABLE(); | 397 | END_EVENT_TABLE(); |
62 | 398 | ||
63 | wxLocationPage::wxLocationPage(wxWizard* parent) : wxWizardPageSimple(parent) | 399 | wxLocationPage::wxLocationPage(wxWizard* parent) : wxWizardPageSimple(parent) |
@@ -90,18 +426,24 @@ wxLocationPage::wxLocationPage(wxWizard* parent) : wxWizardPageSimple(parent) | |||
90 | WxBoxSizer1->Fit(this); | 426 | WxBoxSizer1->Fit(this); |
91 | } | 427 | } |
92 | 428 | ||
93 | bool wxLocationPage::TransferDataFromWindow() | 429 | |
430 | void wxLocationPage::OnWizardPageChanging(wxWizardEvent& event) | ||
94 | { | 431 | { |
95 | if ( wxDirExists(LocationText->GetLabel() ) ) | 432 | if(event.GetDirection()) // going forwards in the Wizard |
96 | { | 433 | { |
97 | gv->curdestdir = LocationText->GetLabel(); | 434 | if(!wxDirExists(LocationText->GetLabel())) |
98 | return true; | 435 | { |
99 | } else | 436 | WARN_DIALOG(_("You have not selected a valid location for your audio " |
100 | { | ||
101 | WARN_DIALOG(_("You have not selected a valid location for your audio " | ||
102 | "device"), _("Select Location")); | 437 | "device"), _("Select Location")); |
103 | return false; | 438 | event.Veto(); |
104 | } | 439 | } |
440 | } | ||
441 | } | ||
442 | |||
443 | bool wxLocationPage::TransferDataFromWindow() | ||
444 | { | ||
445 | gv->curdestdir = LocationText->GetLabel(); | ||
446 | return true; | ||
105 | } | 447 | } |
106 | 448 | ||
107 | void wxLocationPage::OnLocationBtn(wxCommandEvent& event) | 449 | void wxLocationPage::OnLocationBtn(wxCommandEvent& event) |
diff --git a/rbutil/wizard_pages.h b/rbutil/wizard_pages.h index d0fd4459e0..1b6dc5be78 100644 --- a/rbutil/wizard_pages.h +++ b/rbutil/wizard_pages.h | |||
@@ -24,6 +24,96 @@ | |||
24 | 24 | ||
25 | #include "rbutil.h" | 25 | #include "rbutil.h" |
26 | 26 | ||
27 | class wxBootPlatformPage : public wxWizardPageSimple | ||
28 | { | ||
29 | public: | ||
30 | wxBootPlatformPage(wxWizard *parent); | ||
31 | virtual bool TransferDataFromWindow(void); | ||
32 | virtual wxWizardPage *GetNext() const; | ||
33 | void SetNext(wxWizardPage * next) {wxWizardPageSimple::SetNext(next); my_next = next;} | ||
34 | |||
35 | public: | ||
36 | wxListBox* BootPlatformListBox; | ||
37 | wxWizardPage *my_next; | ||
38 | }; | ||
39 | |||
40 | class wxIpodLocationPage : public wxWizardPageSimple | ||
41 | { | ||
42 | private: | ||
43 | DECLARE_EVENT_TABLE() | ||
44 | |||
45 | public: | ||
46 | enum { | ||
47 | ID_IPODLOCATION_BTN = 1000, | ||
48 | }; | ||
49 | public: | ||
50 | wxIpodLocationPage(wxWizard* parent); | ||
51 | void OnIpodLocationBtn(wxCommandEvent& event); | ||
52 | void OnWizardPageChanging(wxWizardEvent& event); | ||
53 | virtual wxWizardPage *GetPrev() const; | ||
54 | void SetPrev(wxWizardPage * prev) {wxWizardPageSimple::SetPrev(prev); my_prev = prev;} | ||
55 | |||
56 | private: | ||
57 | wxStaticText* IpodLocationText; | ||
58 | wxStaticText* IpodLocationLabel; | ||
59 | wxStaticText* IpodLocationExtraText; | ||
60 | wxButton* IpodLocationBtn; | ||
61 | wxWizardPage *my_prev; | ||
62 | }; | ||
63 | |||
64 | |||
65 | |||
66 | class wxBootLocationPage : public wxWizardPageSimple | ||
67 | { | ||
68 | private: | ||
69 | DECLARE_EVENT_TABLE() | ||
70 | |||
71 | public: | ||
72 | enum { | ||
73 | ID_BOOTLOCATION_BTN = 1000, | ||
74 | }; | ||
75 | |||
76 | public: | ||
77 | wxBootLocationPage(wxWizard* parent); | ||
78 | virtual bool TransferDataFromWindow(void); | ||
79 | void OnBootLocationBtn(wxCommandEvent& event); | ||
80 | void OnPageShown(wxWizardEvent& event); | ||
81 | void OnWizardPageChanging(wxWizardEvent& event); | ||
82 | virtual wxWizardPage *GetPrev() const; | ||
83 | virtual wxWizardPage *GetNext() const; | ||
84 | void SetPrev(wxWizardPage * prev) {wxWizardPageSimple::SetPrev(prev); my_prev = prev;} | ||
85 | |||
86 | private: | ||
87 | wxStaticText* BootLocationText; | ||
88 | wxStaticText* BootLocationLabel; | ||
89 | wxButton* BootLocationBtn; | ||
90 | wxWizardPage *my_prev; | ||
91 | |||
92 | }; | ||
93 | |||
94 | class wxFirmwareLocationPage : public wxWizardPageSimple | ||
95 | { | ||
96 | private: | ||
97 | DECLARE_EVENT_TABLE() | ||
98 | |||
99 | public: | ||
100 | enum { | ||
101 | ID_FIRMWARELOCATION_BTN = 1000, | ||
102 | }; | ||
103 | |||
104 | public: | ||
105 | wxFirmwareLocationPage(wxWizard* parent); | ||
106 | void OnFirmwareFilenameBtn(wxCommandEvent& event); | ||
107 | void OnWizardPageChanging(wxWizardEvent& event); | ||
108 | |||
109 | private: | ||
110 | wxStaticText* FirmwareLocationText; | ||
111 | wxStaticText* FirmwareLocationFilename; | ||
112 | wxButton* FirmwareLocationBtn; | ||
113 | |||
114 | }; | ||
115 | |||
116 | |||
27 | class wxPlatformPage : public wxWizardPageSimple | 117 | class wxPlatformPage : public wxWizardPageSimple |
28 | { | 118 | { |
29 | public: | 119 | public: |
@@ -47,9 +137,10 @@ public: | |||
47 | public: | 137 | public: |
48 | wxLocationPage(wxWizard* parent); | 138 | wxLocationPage(wxWizard* parent); |
49 | virtual bool TransferDataFromWindow(void); | 139 | virtual bool TransferDataFromWindow(void); |
140 | void OnWizardPageChanging(wxWizardEvent& event); | ||
50 | void OnLocationBtn(wxCommandEvent& event); | 141 | void OnLocationBtn(wxCommandEvent& event); |
51 | 142 | ||
52 | public: | 143 | private: |
53 | wxStaticText* LocationText; | 144 | wxStaticText* LocationText; |
54 | }; | 145 | }; |
55 | 146 | ||
@@ -69,7 +160,7 @@ public: | |||
69 | void OnBuildBox(wxCommandEvent& event); | 160 | void OnBuildBox(wxCommandEvent& event); |
70 | void OnPageShown(wxWizardEvent& event); | 161 | void OnPageShown(wxWizardEvent& event); |
71 | 162 | ||
72 | public: | 163 | private: |
73 | wxRadioBox* BuildRadioBox; | 164 | wxRadioBox* BuildRadioBox; |
74 | wxStaticText* DetailText; | 165 | wxStaticText* DetailText; |
75 | wxCheckBox* NoCacheCheckBox; | 166 | wxCheckBox* NoCacheCheckBox; |
@@ -81,7 +172,7 @@ public: | |||
81 | wxFullUninstallPage(wxWizard *parent); | 172 | wxFullUninstallPage(wxWizard *parent); |
82 | virtual bool TransferDataFromWindow(void); | 173 | virtual bool TransferDataFromWindow(void); |
83 | 174 | ||
84 | public: | 175 | private: |
85 | wxCheckBox* FullCheckBox; | 176 | wxCheckBox* FullCheckBox; |
86 | }; | 177 | }; |
87 | 178 | ||