Showing preview only (1,332K chars total). Download the full file or copy to clipboard to get everything.
Repository: Zibri/ZiPhone
Branch: master
Commit: d779b8517c0a
Files: 66
Total size: 1.3 MB
Directory structure:
gitextract_uzn2e98b/
├── Makefile.freebsd
├── Makefile.haiku
├── Makefile.linux
├── Makefile.macintel32
├── Makefile.macintel64
├── Makefile.macppc
├── Makefile.win
├── abstractfile.c
├── abstractfile.h
├── abstractfilewinleg.c
├── common.h
├── docs/
│ ├── license.txt
│ ├── plugin-howto.txt
│ ├── readme.txt
│ └── troubleshooting.txt
├── gui-gtk/
│ └── zgui.c
├── gui-mac/
│ ├── English.lproj/
│ │ ├── InfoPlist.strings
│ │ ├── Localizable.strings
│ │ ├── MainMenu.nib/
│ │ │ ├── designable.nib
│ │ │ └── keyedobjects.nib
│ │ ├── MainMenu.strings
│ │ └── donate.html
│ ├── French.lproj/
│ │ ├── InfoPlist.strings
│ │ ├── Localizable.strings
│ │ ├── MainMenu.nib/
│ │ │ ├── designable.nib
│ │ │ └── keyedobjects.nib
│ │ ├── MainMenu.strings
│ │ └── donate.html
│ ├── Info.plist
│ ├── Italian.lproj/
│ │ ├── MainMenu.nib/
│ │ │ ├── designable.nib
│ │ │ └── keyedobjects.nib
│ │ └── MainMenu.strings
│ ├── Key.tif
│ ├── Locked.tif
│ ├── Spanish.lproj/
│ │ ├── Localizable.strings
│ │ ├── MainMenu.nib/
│ │ │ ├── designable.nib
│ │ │ └── keyedobjects.nib
│ │ └── MainMenu.strings
│ ├── Start.tif
│ ├── Stop.tif
│ ├── Unlocked.tif
│ ├── ZiPhoneOSX.xcodeproj/
│ │ ├── lex.mode1v3
│ │ ├── lex.pbxuser
│ │ └── project.pbxproj
│ ├── ZiPhoneOSX_Prefix.pch
│ ├── ZiPhoneWindowController.h
│ ├── ZiPhoneWindowController.m
│ ├── getversion.sh
│ ├── i18n-supported.list
│ ├── i18n.sh
│ ├── iPhone.icns
│ ├── icon/
│ │ ├── Z-Phone.psd
│ │ └── Z-PhonePortrait.psd
│ ├── main.m
│ └── readme.txt
├── install-freebsd.txt
├── install-haiku.txt
├── install-linux.txt
├── install-mac.txt
├── install-windows.txt
├── libibooter.cpp
├── libibooter.h
├── linuxgui.sh
├── macgui.sh
├── macrelease.sh
└── ziphone.cpp
================================================
FILE CONTENTS
================================================
================================================
FILE: Makefile.freebsd
================================================
#ZiPhone FreeBSD make
CC=g++8
CFLAGS=-g
INC=-I$(SRCDIR)
SRCDIR=src
OBJDIR=build
LDFLAGS=-lusb
OBJS=ziphone.o
LIBOBJS=libibooter.o
all: setup ziphone bzip2
VPATH=$(SRCDIR)
.cpp.o:
$(CC) $(CFLAGS) -c $< $(INC) -o $(OBJDIR)/$@
ziphone: $(LIBOBJS) $(OBJS)
cd $(OBJDIR); $(CC) $(LDFLAGS) $^ -o $@; rm -rf *.o
setup: clean
mkdir -p $(OBJDIR); cp *dat $(OBJDIR)/; cp -r docs $(OBJDIR)/
bzip2:
mv $(OBJDIR) ziphone-3.6-cli-freebsd-32; tar -jcvf ziphone-3.6-cli-freebsd-32.tar.bz2 ziphone-3.6-cli-freebsd-32
clean:
rm -rf $(OBJDIR)
================================================
FILE: Makefile.haiku
================================================
#ZiPhone Haiku Make
CC=/bin/x86/g++
CFLAGS=-g
INC=-I$(SRCDIR) -I/system/non-packaged/include
SRCDIR=src
OBJDIR=build
LDFLAGS=-L/system/lib/x86 /system/lib/x86/libusb-0.1.so.4
OBJS=ziphone.o
LIBOBJS=libibooter.o
all: setup ziphone bzip2
VPATH=$(SRCDIR)
.cpp.o:
$(CC) $(CFLAGS) -c $< $(INC) -o $(OBJDIR)/$@
ziphone: $(LIBOBJS) $(OBJS)
cd $(OBJDIR); $(CC) $(LDFLAGS) $^ -o $@; rm -rf *.o
setup: clean
mkdir -p $(OBJDIR); cp *dat $(OBJDIR)/; cp -r docs $(OBJDIR)/
bzip2:
mv $(OBJDIR) ziphone-3.6-cli-haiku-32; tar -jcvf ziphone-3.6-cli-haiku-32.tar.bz2 ziphone-3.6-cli-haiku-32
clean:
rm -rf $(OBJDIR) ziphone-3.6-cli-haiku-32.tar.bz2 ziphone-3.6-cli-haiku-32
================================================
FILE: Makefile.linux
================================================
#ZiPhone Linux make
CC=g++
CFLAGS=-g
INC=-I$(SRCDIR)
SRCDIR=src
OBJDIR=build
LDFLAGS=-lusb
OBJS=ziphone.o
LIBOBJS=libibooter.o
all: setup ziphone bzip2
VPATH=$(SRCDIR)
.cpp.o:
$(CC) $(CFLAGS) -c $< $(INC) -o $(OBJDIR)/$@
ziphone: $(LIBOBJS) $(OBJS)
cd $(OBJDIR); $(CC) $^ $(LDFLAGS) -o $@; rm -rf *.o
setup: clean
mkdir -p $(OBJDIR); cp *dat $(OBJDIR)/; cp -r docs $(OBJDIR)/
bzip2:
mv $(OBJDIR) ziphone-3.6-linux-cli; tar -jcvf ziphone-3.6-linux-cli.tar.bz2 ziphone-3.6-linux-cli
clean:
rm -rf $(OBJDIR)
================================================
FILE: Makefile.macintel32
================================================
#ZiPhone Mac Intel i386 make
CC=g++
CFLAGS=-g -arch i386 -isysroot /Developer/SDKs/MacOSX10.4u.sdk -mmacosx-version-min=10.4
INC=-I$(SRCDIR) -I/usr/local/include
SRCDIR=src
OBJDIR=build
LDFLAGS=-lusb
OBJS=ziphone.o
LIBOBJS=libibooter.o
all: setup ziphone bzip2
VPATH=$(SRCDIR)
.cpp.o:
$(CC) $(CFLAGS) -c $< $(INC) -o $(OBJDIR)/$@
ziphone: $(LIBOBJS) $(OBJS)
cd $(OBJDIR); $(CC) $(CFLAGS) $(LDFLAGS) $^ -o $@; rm -rf *.o
setup: clean
mkdir -p $(OBJDIR); cp *dat $(OBJDIR)/; cp -r docs $(OBJDIR)/;
bzip2:
mv $(OBJDIR) ziphone-3.6-cli-mac; tar -jcvf ziphone-3.6-cli-mac-intel-32.tar.bz2 ziphone-3.6-cli-mac
clean:
rm -rf $(OBJDIR) ziphone-3.6-cli-mac ziphone-3.6-cli-mac-intel-32.tar.bz2
================================================
FILE: Makefile.macintel64
================================================
#ZiPhone Mac Intel x86_64 make
CC=g++
CFLAGS=-g -arch x86_64 -isysroot /Developer/SDKs/MacOSX10.5.sdk -mmacosx-version-min=10.4
INC=-I$(SRCDIR) -I/usr/local/include
SRCDIR=src
OBJDIR=build
LDFLAGS=-lusb
OBJS=ziphone.o
LIBOBJS=libibooter.o
all: setup ziphone bzip2
VPATH=$(SRCDIR)
.cpp.o:
$(CC) $(CFLAGS) -c $< $(INC) -o $(OBJDIR)/$@
ziphone: $(LIBOBJS) $(OBJS)
cd $(OBJDIR); $(CC) $(CFLAGS) $(LDFLAGS) $^ -o $@; rm -rf *.o
setup: clean
mkdir -p $(OBJDIR); cp *dat $(OBJDIR)/; cp -r docs $(OBJDIR)/;
bzip2:
mv $(OBJDIR) ziphone-3.6-cli-mac; tar -jcvf ziphone-3.6-cli-mac-intel-64.tar.bz2 ziphone-3.6-cli-mac
clean:
rm -rf $(OBJDIR) ziphone-3.6-cli-mac ziphone-3.6-cli-mac-intel-64.tar.bz2
================================================
FILE: Makefile.macppc
================================================
#ZiPhone Mac PPC make
CC=g++
CFLAGS=-g -arch ppc -isysroot /Developer/SDKs/MacOSX10.4u.sdk -mmacosx-version-min=10.4
INC=-I$(SRCDIR) -I/usr/local/include
SRCDIR=src
OBJDIR=build
LDFLAGS=-lusb
OBJS=ziphone.o
LIBOBJS=libibooter.o
all: setup ziphone bzip2
VPATH=$(SRCDIR)
.cpp.o:
$(CC) $(CFLAGS) -c $< $(INC) -o $(OBJDIR)/$@
ziphone: $(LIBOBJS) $(OBJS)
cd $(OBJDIR); $(CC) $(CFLAGS) $(LDFLAGS) $^ -o $@; rm -rf *.o
setup: clean
mkdir -p $(OBJDIR); cp *dat $(OBJDIR)/; cp -r docs $(OBJDIR)/
bzip2:
mv $(OBJDIR) ziphone-3.6-cli-mac; tar -jcvf ziphone-3.6-cli-mac-ppc.tar.bz2 ziphone-3.6-cli-mac
clean:
rm -rf $(OBJDIR) ziphone-3.6-cli-mac-ppc.tar.bz2
================================================
FILE: Makefile.win
================================================
#ZiPhone Windows 98 SE, Windows 2000, Windows ME, Windows XP 32 bit make for use with Dev-Cpp 4.9.9.2
#Before executing make -f Makefile.winleg run PATH=C:\Dev-Cpp\bin;C:\Dev-Cpp\lib
CC=g++
CFLAGS=-g
INC=-I$(SRCDIR) -I"C:\Program Files\LibUSB-Win32\include"
SRCDIR=src
OBJDIR=build
LDFLAGS=-L"C:\Program Files\LibUSB-Win32\lib\gcc" -lusb
OBJS=ziphone.o
LIBOBJS=libibooter.o
all: ziphone
VPATH=$(SRCDIR)
.cpp.o:
$(CC) $(CFLAGS) -c $< $(INC) -o $@
ziphone: $(LIBOBJS) $(OBJS)
$(CC) $(LDFLAGS) $^ $(LDFLAGS) -o $@; del *.o
================================================
FILE: abstractfile.c
================================================
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <stdarg.h>
#include <stdint.h>
#include "abstractfile.h"
#include "common.h"
size_t freadWrapper(AbstractFile* file, void* data, size_t len) {
return fread(data, 1, len, (FILE*) (file->data));
}
size_t fwriteWrapper(AbstractFile* file, const void* data, size_t len) {
return fwrite(data, 1, len, (FILE*) (file->data));
}
int fseekWrapper(AbstractFile* file, off_t offset) {
return fseeko((FILE*) (file->data), offset, SEEK_SET);
}
off_t ftellWrapper(AbstractFile* file) {
return ftello((FILE*) (file->data));
}
void fcloseWrapper(AbstractFile* file) {
fclose((FILE*) (file->data));
free(file);
}
off_t fileGetLength(AbstractFile* file) {
off_t length;
off_t pos;
pos = ftello((FILE*) (file->data));
fseeko((FILE*) (file->data), 0, SEEK_END);
length = ftello((FILE*) (file->data));
fseeko((FILE*) (file->data), pos, SEEK_SET);
return length;
}
AbstractFile* createAbstractFileFromFile(FILE* file) {
AbstractFile* toReturn;
if(file == NULL) {
return NULL;
}
toReturn = (AbstractFile*) malloc(sizeof(AbstractFile));
toReturn->data = file;
toReturn->read = freadWrapper;
toReturn->write = fwriteWrapper;
toReturn->seek = fseekWrapper;
toReturn->tell = ftellWrapper;
toReturn->getLength = fileGetLength;
toReturn->close = fcloseWrapper;
toReturn->type = AbstractFileTypeFile;
return toReturn;
}
size_t dummyRead(AbstractFile* file, void* data, size_t len) {
return 0;
}
size_t dummyWrite(AbstractFile* file, const void* data, size_t len) {
*((off_t*) (file->data)) += len;
return len;
}
int dummySeek(AbstractFile* file, off_t offset) {
*((off_t*) (file->data)) = offset;
return 0;
}
off_t dummyTell(AbstractFile* file) {
return *((off_t*) (file->data));
}
void dummyClose(AbstractFile* file) {
free(file);
}
AbstractFile* createAbstractFileFromDummy() {
AbstractFile* toReturn;
toReturn = (AbstractFile*) malloc(sizeof(AbstractFile));
toReturn->data = NULL;
toReturn->read = dummyRead;
toReturn->write = dummyWrite;
toReturn->seek = dummySeek;
toReturn->tell = dummyTell;
toReturn->getLength = NULL;
toReturn->close = dummyClose;
toReturn->type = AbstractFileTypeDummy;
return toReturn;
}
size_t memRead(AbstractFile* file, void* data, size_t len) {
MemWrapperInfo* info = (MemWrapperInfo*) (file->data);
if(info->bufferSize < (info->offset + len)) {
len = info->bufferSize - info->offset;
}
memcpy(data, (void*)((uint8_t*)(*(info->buffer)) + (uint32_t)info->offset), len);
info->offset += (size_t)len;
return len;
}
size_t memWrite(AbstractFile* file, const void* data, size_t len) {
MemWrapperInfo* info = (MemWrapperInfo*) (file->data);
while((info->offset + (size_t)len) > info->bufferSize) {
info->bufferSize <<= 1;
*(info->buffer) = realloc(*(info->buffer), info->bufferSize);
}
memcpy((void*)((uint8_t*)(*(info->buffer)) + (uint32_t)info->offset), data, len);
info->offset += (size_t)len;
return len;
}
int memSeek(AbstractFile* file, off_t offset) {
MemWrapperInfo* info = (MemWrapperInfo*) (file->data);
info->offset = (size_t)offset;
return 0;
}
off_t memTell(AbstractFile* file) {
MemWrapperInfo* info = (MemWrapperInfo*) (file->data);
return (off_t)info->offset;
}
off_t memGetLength(AbstractFile* file) {
MemWrapperInfo* info = (MemWrapperInfo*) (file->data);
return info->bufferSize;
}
void memClose(AbstractFile* file) {
free(file->data);
free(file);
}
AbstractFile* createAbstractFileFromMemory(void** buffer, size_t size) {
MemWrapperInfo* info;
AbstractFile* toReturn;
toReturn = (AbstractFile*) malloc(sizeof(AbstractFile));
info = (MemWrapperInfo*) malloc(sizeof(MemWrapperInfo));
info->offset = 0;
info->buffer = buffer;
info->bufferSize = size;
toReturn->data = info;
toReturn->read = memRead;
toReturn->write = memWrite;
toReturn->seek = memSeek;
toReturn->tell = memTell;
toReturn->getLength = memGetLength;
toReturn->close = memClose;
toReturn->type = AbstractFileTypeMem;
return toReturn;
}
void abstractFilePrint(AbstractFile* file, const char* format, ...) {
va_list args;
char buffer[1024];
size_t length;
buffer[0] = '\0';
va_start(args, format);
length = vsprintf(buffer, format, args);
va_end(args);
ASSERT(file->write(file, buffer, length) == length, "fwrite");
}
int absFileRead(io_func* io, off_t location, size_t size, void *buffer) {
AbstractFile* file;
file = (AbstractFile*) io->data;
file->seek(file, location);
if(file->read(file, buffer, size) == size) {
return TRUE;
} else {
return FALSE;
}
}
int absFileWrite(io_func* io, off_t location, size_t size, void *buffer) {
AbstractFile* file;
file = (AbstractFile*) io->data;
file->seek(file, location);
if(file->write(file, buffer, size) == size) {
return TRUE;
} else {
return FALSE;
}
}
void closeAbsFile(io_func* io) {
AbstractFile* file;
file = (AbstractFile*) io->data;
file->close(file);
free(io);
}
io_func* IOFuncFromAbstractFile(AbstractFile* file) {
io_func* io;
io = (io_func*) malloc(sizeof(io_func));
io->data = file;
io->read = &absFileRead;
io->write = &absFileWrite;
io->close = &closeAbsFile;
return io;
}
size_t memFileRead(AbstractFile* file, void* data, size_t len) {
MemFileWrapperInfo* info = (MemFileWrapperInfo*) (file->data);
memcpy(data, (void*)((uint8_t*)(*(info->buffer)) + (uint32_t)info->offset), len);
info->offset += (size_t)len;
return len;
}
size_t memFileWrite(AbstractFile* file, const void* data, size_t len) {
MemFileWrapperInfo* info = (MemFileWrapperInfo*) (file->data);
while((info->offset + (size_t)len) > info->actualBufferSize) {
info->actualBufferSize <<= 1;
*(info->buffer) = realloc(*(info->buffer), info->actualBufferSize);
}
if((info->offset + (size_t)len) > (*(info->bufferSize))) {
memset(((uint8_t*)(*(info->buffer))) + *(info->bufferSize), 0, (info->offset + (size_t)len) - *(info->bufferSize));
*(info->bufferSize) = info->offset + (size_t)len;
}
memcpy((void*)((uint8_t*)(*(info->buffer)) + (uint32_t)info->offset), data, len);
info->offset += (size_t)len;
return len;
}
int memFileSeek(AbstractFile* file, off_t offset) {
MemFileWrapperInfo* info = (MemFileWrapperInfo*) (file->data);
info->offset = (size_t)offset;
return 0;
}
off_t memFileTell(AbstractFile* file) {
MemFileWrapperInfo* info = (MemFileWrapperInfo*) (file->data);
return (off_t)info->offset;
}
off_t memFileGetLength(AbstractFile* file) {
MemFileWrapperInfo* info = (MemFileWrapperInfo*) (file->data);
return *(info->bufferSize);
}
void memFileClose(AbstractFile* file) {
free(file->data);
free(file);
}
AbstractFile* createAbstractFileFromMemoryFile(void** buffer, size_t* size) {
MemFileWrapperInfo* info;
AbstractFile* toReturn;
toReturn = (AbstractFile*) malloc(sizeof(AbstractFile));
info = (MemFileWrapperInfo*) malloc(sizeof(MemFileWrapperInfo));
info->offset = 0;
info->buffer = buffer;
info->bufferSize = size;
info->actualBufferSize = (1024 < (*size)) ? (*size) : 1024;
if(info->actualBufferSize != *(info->bufferSize)) {
*(info->buffer) = realloc(*(info->buffer), info->actualBufferSize);
}
toReturn->data = info;
toReturn->read = memFileRead;
toReturn->write = memFileWrite;
toReturn->seek = memFileSeek;
toReturn->tell = memFileTell;
toReturn->getLength = memFileGetLength;
toReturn->close = memFileClose;
toReturn->type = AbstractFileTypeMemFile;
return toReturn;
}
AbstractFile* createAbstractFileFromMemoryFileBuffer(void** buffer, size_t* size, size_t actualBufferSize) {
MemFileWrapperInfo* info;
AbstractFile* toReturn;
toReturn = (AbstractFile*) malloc(sizeof(AbstractFile));
info = (MemFileWrapperInfo*) malloc(sizeof(MemFileWrapperInfo));
info->offset = 0;
info->buffer = buffer;
info->bufferSize = size;
info->actualBufferSize = actualBufferSize;
toReturn->data = info;
toReturn->read = memFileRead;
toReturn->write = memFileWrite;
toReturn->seek = memFileSeek;
toReturn->tell = memFileTell;
toReturn->getLength = memFileGetLength;
toReturn->close = memFileClose;
toReturn->type = AbstractFileTypeMemFile;
return toReturn;
}
================================================
FILE: abstractfile.h
================================================
#ifndef ABSTRACTFILE_H
#define ABSTRACTFILE_H
#include "common.h"
#include <stdint.h>
typedef struct AbstractFile AbstractFile;
typedef struct AbstractFile2 AbstractFile2;
typedef size_t (*WriteFunc)(AbstractFile* file, const void* data, size_t len);
typedef size_t (*ReadFunc)(AbstractFile* file, void* data, size_t len);
typedef int (*SeekFunc)(AbstractFile* file, off_t offset);
typedef off_t (*TellFunc)(AbstractFile* file);
typedef void (*CloseFunc)(AbstractFile* file);
typedef off_t (*GetLengthFunc)(AbstractFile* file);
typedef void (*SetKeyFunc)(AbstractFile2* file, const unsigned int* key, const unsigned int* iv);
typedef enum AbstractFileType {
AbstractFileTypeFile,
AbstractFileType8900,
AbstractFileTypeImg2,
AbstractFileTypeImg3,
AbstractFileTypeLZSS,
AbstractFileTypeIBootIM,
AbstractFileTypeMem,
AbstractFileTypeMemFile,
AbstractFileTypeDummy
} AbstractFileType;
struct AbstractFile {
void* data;
WriteFunc write;
ReadFunc read;
SeekFunc seek;
TellFunc tell;
GetLengthFunc getLength;
CloseFunc close;
AbstractFileType type;
};
struct AbstractFile2 {
AbstractFile super;
SetKeyFunc setKey;
};
typedef struct {
size_t offset;
void** buffer;
size_t bufferSize;
} MemWrapperInfo;
typedef struct {
size_t offset;
void** buffer;
size_t* bufferSize;
size_t actualBufferSize;
} MemFileWrapperInfo;
#ifdef __cplusplus
extern "C" {
#endif
AbstractFile* createAbstractFileFromFile(FILE* file);
AbstractFile* createAbstractFileFromDummy();
AbstractFile* createAbstractFileFromMemory(void** buffer, size_t size);
AbstractFile* createAbstractFileFromMemoryFile(void** buffer, size_t* size);
AbstractFile* createAbstractFileFromMemoryFileBuffer(void** buffer, size_t* size, size_t actualBufferSize);
void abstractFilePrint(AbstractFile* file, const char* format, ...);
io_func* IOFuncFromAbstractFile(AbstractFile* file);
#ifdef __cplusplus
}
#endif
#endif
================================================
FILE: abstractfilewinleg.c
================================================
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <stdarg.h>
#include <stdint.h>
#include "abstractfile.h"
#include "common.h"
size_t freadWrapper(AbstractFile* file, void* data, size_t len) {
return fread(data, 1, len, (FILE*) (file->data));
}
size_t fwriteWrapper(AbstractFile* file, const void* data, size_t len) {
return fwrite(data, 1, len, (FILE*) (file->data));
}
int fseekWrapper(AbstractFile* file, off_t offset) {
return fseeko64((FILE*) (file->data), offset, SEEK_SET);
}
off_t ftellWrapper(AbstractFile* file) {
return ftello64((FILE*) (file->data));
}
void fcloseWrapper(AbstractFile* file) {
fclose((FILE*) (file->data));
free(file);
}
off_t fileGetLength(AbstractFile* file) {
off_t length;
off_t pos;
pos = ftello64((FILE*) (file->data));
fseeko64((FILE*) (file->data), 0, SEEK_END);
length = ftello64((FILE*) (file->data));
fseeko64((FILE*) (file->data), pos, SEEK_SET);
return length;
}
AbstractFile* createAbstractFileFromFile(FILE* file) {
AbstractFile* toReturn;
if(file == NULL) {
return NULL;
}
toReturn = (AbstractFile*) malloc(sizeof(AbstractFile));
toReturn->data = file;
toReturn->read = freadWrapper;
toReturn->write = fwriteWrapper;
toReturn->seek = fseekWrapper;
toReturn->tell = ftellWrapper;
toReturn->getLength = fileGetLength;
toReturn->close = fcloseWrapper;
toReturn->type = AbstractFileTypeFile;
return toReturn;
}
size_t dummyRead(AbstractFile* file, void* data, size_t len) {
return 0;
}
size_t dummyWrite(AbstractFile* file, const void* data, size_t len) {
*((off_t*) (file->data)) += len;
return len;
}
int dummySeek(AbstractFile* file, off_t offset) {
*((off_t*) (file->data)) = offset;
return 0;
}
off_t dummyTell(AbstractFile* file) {
return *((off_t*) (file->data));
}
void dummyClose(AbstractFile* file) {
free(file);
}
AbstractFile* createAbstractFileFromDummy() {
AbstractFile* toReturn;
toReturn = (AbstractFile*) malloc(sizeof(AbstractFile));
toReturn->data = NULL;
toReturn->read = dummyRead;
toReturn->write = dummyWrite;
toReturn->seek = dummySeek;
toReturn->tell = dummyTell;
toReturn->getLength = NULL;
toReturn->close = dummyClose;
toReturn->type = AbstractFileTypeDummy;
return toReturn;
}
size_t memRead(AbstractFile* file, void* data, size_t len) {
MemWrapperInfo* info = (MemWrapperInfo*) (file->data);
if(info->bufferSize < (info->offset + len)) {
len = info->bufferSize - info->offset;
}
memcpy(data, (void*)((uint8_t*)(*(info->buffer)) + (uint32_t)info->offset), len);
info->offset += (size_t)len;
return len;
}
size_t memWrite(AbstractFile* file, const void* data, size_t len) {
MemWrapperInfo* info = (MemWrapperInfo*) (file->data);
while((info->offset + (size_t)len) > info->bufferSize) {
info->bufferSize <<= 1;
*(info->buffer) = realloc(*(info->buffer), info->bufferSize);
}
memcpy((void*)((uint8_t*)(*(info->buffer)) + (uint32_t)info->offset), data, len);
info->offset += (size_t)len;
return len;
}
int memSeek(AbstractFile* file, off_t offset) {
MemWrapperInfo* info = (MemWrapperInfo*) (file->data);
info->offset = (size_t)offset;
return 0;
}
off_t memTell(AbstractFile* file) {
MemWrapperInfo* info = (MemWrapperInfo*) (file->data);
return (off_t)info->offset;
}
off_t memGetLength(AbstractFile* file) {
MemWrapperInfo* info = (MemWrapperInfo*) (file->data);
return info->bufferSize;
}
void memClose(AbstractFile* file) {
free(file->data);
free(file);
}
AbstractFile* createAbstractFileFromMemory(void** buffer, size_t size) {
MemWrapperInfo* info;
AbstractFile* toReturn;
toReturn = (AbstractFile*) malloc(sizeof(AbstractFile));
info = (MemWrapperInfo*) malloc(sizeof(MemWrapperInfo));
info->offset = 0;
info->buffer = buffer;
info->bufferSize = size;
toReturn->data = info;
toReturn->read = memRead;
toReturn->write = memWrite;
toReturn->seek = memSeek;
toReturn->tell = memTell;
toReturn->getLength = memGetLength;
toReturn->close = memClose;
toReturn->type = AbstractFileTypeMem;
return toReturn;
}
void abstractFilePrint(AbstractFile* file, const char* format, ...) {
va_list args;
char buffer[1024];
size_t length;
buffer[0] = '\0';
va_start(args, format);
length = vsprintf(buffer, format, args);
va_end(args);
ASSERT(file->write(file, buffer, length) == length, "fwrite");
}
int absFileRead(io_func* io, off_t location, size_t size, void *buffer) {
AbstractFile* file;
file = (AbstractFile*) io->data;
file->seek(file, location);
if(file->read(file, buffer, size) == size) {
return TRUE;
} else {
return FALSE;
}
}
int absFileWrite(io_func* io, off_t location, size_t size, void *buffer) {
AbstractFile* file;
file = (AbstractFile*) io->data;
file->seek(file, location);
if(file->write(file, buffer, size) == size) {
return TRUE;
} else {
return FALSE;
}
}
void closeAbsFile(io_func* io) {
AbstractFile* file;
file = (AbstractFile*) io->data;
file->close(file);
free(io);
}
io_func* IOFuncFromAbstractFile(AbstractFile* file) {
io_func* io;
io = (io_func*) malloc(sizeof(io_func));
io->data = file;
io->read = &absFileRead;
io->write = &absFileWrite;
io->close = &closeAbsFile;
return io;
}
size_t memFileRead(AbstractFile* file, void* data, size_t len) {
MemFileWrapperInfo* info = (MemFileWrapperInfo*) (file->data);
memcpy(data, (void*)((uint8_t*)(*(info->buffer)) + (uint32_t)info->offset), len);
info->offset += (size_t)len;
return len;
}
size_t memFileWrite(AbstractFile* file, const void* data, size_t len) {
MemFileWrapperInfo* info = (MemFileWrapperInfo*) (file->data);
while((info->offset + (size_t)len) > info->actualBufferSize) {
info->actualBufferSize <<= 1;
*(info->buffer) = realloc(*(info->buffer), info->actualBufferSize);
}
if((info->offset + (size_t)len) > (*(info->bufferSize))) {
memset(((uint8_t*)(*(info->buffer))) + *(info->bufferSize), 0, (info->offset + (size_t)len) - *(info->bufferSize));
*(info->bufferSize) = info->offset + (size_t)len;
}
memcpy((void*)((uint8_t*)(*(info->buffer)) + (uint32_t)info->offset), data, len);
info->offset += (size_t)len;
return len;
}
int memFileSeek(AbstractFile* file, off_t offset) {
MemFileWrapperInfo* info = (MemFileWrapperInfo*) (file->data);
info->offset = (size_t)offset;
return 0;
}
off_t memFileTell(AbstractFile* file) {
MemFileWrapperInfo* info = (MemFileWrapperInfo*) (file->data);
return (off_t)info->offset;
}
off_t memFileGetLength(AbstractFile* file) {
MemFileWrapperInfo* info = (MemFileWrapperInfo*) (file->data);
return *(info->bufferSize);
}
void memFileClose(AbstractFile* file) {
free(file->data);
free(file);
}
AbstractFile* createAbstractFileFromMemoryFile(void** buffer, size_t* size) {
MemFileWrapperInfo* info;
AbstractFile* toReturn;
toReturn = (AbstractFile*) malloc(sizeof(AbstractFile));
info = (MemFileWrapperInfo*) malloc(sizeof(MemFileWrapperInfo));
info->offset = 0;
info->buffer = buffer;
info->bufferSize = size;
info->actualBufferSize = (1024 < (*size)) ? (*size) : 1024;
if(info->actualBufferSize != *(info->bufferSize)) {
*(info->buffer) = realloc(*(info->buffer), info->actualBufferSize);
}
toReturn->data = info;
toReturn->read = memFileRead;
toReturn->write = memFileWrite;
toReturn->seek = memFileSeek;
toReturn->tell = memFileTell;
toReturn->getLength = memFileGetLength;
toReturn->close = memFileClose;
toReturn->type = AbstractFileTypeMemFile;
return toReturn;
}
AbstractFile* createAbstractFileFromMemoryFileBuffer(void** buffer, size_t* size, size_t actualBufferSize) {
MemFileWrapperInfo* info;
AbstractFile* toReturn;
toReturn = (AbstractFile*) malloc(sizeof(AbstractFile));
info = (MemFileWrapperInfo*) malloc(sizeof(MemFileWrapperInfo));
info->offset = 0;
info->buffer = buffer;
info->bufferSize = size;
info->actualBufferSize = actualBufferSize;
toReturn->data = info;
toReturn->read = memFileRead;
toReturn->write = memFileWrite;
toReturn->seek = memFileSeek;
toReturn->tell = memFileTell;
toReturn->getLength = memFileGetLength;
toReturn->close = memFileClose;
toReturn->type = AbstractFileTypeMemFile;
return toReturn;
}
================================================
FILE: common.h
================================================
#ifndef COMMON_H
#define COMMON_H
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>
#include <sys/types.h>
#define TRUE 1
#define FALSE 0
#define FLIPENDIAN(x) flipEndian((unsigned char *)(&(x)), sizeof(x))
#define FLIPENDIANLE(x) flipEndianLE((unsigned char *)(&(x)), sizeof(x))
#define IS_BIG_ENDIAN 0
#define IS_LITTLE_ENDIAN 1
#define TIME_OFFSET_FROM_UNIX 2082844800L
#define APPLE_TO_UNIX_TIME(x) ((x) - TIME_OFFSET_FROM_UNIX)
#define UNIX_TO_APPLE_TIME(x) ((x) + TIME_OFFSET_FROM_UNIX)
#define ASSERT(x, m) if(!(x)) { fflush(stdout); fprintf(stderr, "error: %s\n", m); perror("error"); fflush(stderr); exit(1); }
extern char endianness;
static inline void flipEndian(unsigned char* x, int length) {
int i;
unsigned char tmp;
if(endianness == IS_BIG_ENDIAN) {
return;
} else {
for(i = 0; i < (length / 2); i++) {
tmp = x[i];
x[i] = x[length - i - 1];
x[length - i - 1] = tmp;
}
}
}
static inline void flipEndianLE(unsigned char* x, int length) {
int i;
unsigned char tmp;
if(endianness == IS_LITTLE_ENDIAN) {
return;
} else {
for(i = 0; i < (length / 2); i++) {
tmp = x[i];
x[i] = x[length - i - 1];
x[length - i - 1] = tmp;
}
}
}
static inline void hexToBytes(const char* hex, uint8_t** buffer, size_t* bytes) {
*bytes = strlen(hex) / 2;
*buffer = (uint8_t*) malloc(*bytes);
size_t i;
for(i = 0; i < *bytes; i++) {
uint32_t byte;
sscanf(hex, "%2x", &byte);
(*buffer)[i] = byte;
hex += 2;
}
}
static inline void hexToInts(const char* hex, unsigned int** buffer, size_t* bytes) {
*bytes = strlen(hex) / 2;
*buffer = (unsigned int*) malloc((*bytes) * sizeof(int));
size_t i;
for(i = 0; i < *bytes; i++) {
sscanf(hex, "%2x", &((*buffer)[i]));
hex += 2;
}
}
struct io_func_struct;
typedef int (*readFunc)(struct io_func_struct* io, off_t location, size_t size, void *buffer);
typedef int (*writeFunc)(struct io_func_struct* io, off_t location, size_t size, void *buffer);
typedef void (*closeFunc)(struct io_func_struct* io);
typedef struct io_func_struct {
void* data;
readFunc read;
writeFunc write;
closeFunc close;
} io_func;
struct AbstractFile;
unsigned char* decodeBase64(char* toDecode, size_t* dataLength);
void writeBase64(struct AbstractFile* file, unsigned char* data, size_t dataLength, int tabLength, int width);
char* convertBase64(unsigned char* data, size_t dataLength, int tabLength, int width);
#endif
================================================
FILE: docs/license.txt
================================================
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License.
================================================
FILE: docs/plugin-howto.txt
================================================
::::::::: ::::::::::: ::::::::: ::: ::: :::::::: :::: ::: ::::::::::
:+: :+: :+: :+: :+: :+: :+: :+: :+:+: :+: :+:
+:+ +:+ +:+ +:+ +:+ +:+ +:+ +:+ :+:+:+ +:+ +:+
+#+ +#+ +#++:++#+ +#++:++#++ +#+ +:+ +#+ +:+ +#+ +#++:++#
+#+ +#+ +#+ +#+ +#+ +#+ +#+ +#+ +#+#+# +#+
#+# #+# #+# #+# #+# #+# #+# #+# #+#+# #+#
######### ########### ### ### ### ######## ### #### ##########
Here we are.
Well, the plugin system is as simple as powerful as you could imagine.
All you have to do is to put whatever you want to transfer to the iPhone in a zip file !
The zip file will be extracted to / (the iPhone root) so if you want for example add an application,
all you have to do is to create a zip file relative to / so it will contain:
/Applications/YOURAPP.APP/
/Applications/YOURAPP.APP/YOURAPP
/Applications/YOURAPP.APP/foo
/Applications/YOURAPP.APP/bar
/Applications/YOURAPP.APP/etc
Remember to zip the file on a unix system (even the iphone, a mac, linux, cygwin under windows, etc) with the command:
zip -yr9 Blucher.zip /Applications/YOURAPP.APP
Then put Blucher.zip in /var/root/Media/Blucher.zip or /var/mobile/Media/Blucher.zip in the filesystem, after you jailbreak at least once.
That file will be automatically installed during all jailbreak operations.
For the plugin system to work you have to jailbreak at least ONCE using ZiPhone 3.0+.
And what if you need to run a shell script after installation or INSTEAD of installation?!
It's very simple:
Just add to Blucher.zip /tmp/Blucher.sh containing your script.
So your zip file structure will be:
/Applications/YOURAPP.APP/
/Applications/YOURAPP.APP/YOURAPP
/Applications/YOURAPP.APP/foo
/Applications/YOURAPP.APP/bar
/Applications/YOURAPP.APP/etc
/tmp/Blucher.sh
Now it's just a matter of fantasy.
You could use the plugin system even to backup and restore part or ALL the filesystem.
You could use it even just to display and image or ring a bell or do any nasty things..
That's why if you use the plugin system a big red WARNING will appear on your iPhone during installation.
ZiPhone will not be responsible for any 3rd party PLUGINS but I enourage it's use.
If you think your app or your plugin is so good it should be OFFICIALLY put in the SUPPORTED ziphone plugins, drop
me an email at zibree@gmail.com and we can discuss it.
================================================
FILE: docs/readme.txt
================================================
ZiPhone version 3.6 (12th of September 2019)
===================================================================================
-Complete rewrite using libusb for many platforms.
-Added ziphone -sc (send command). Send your own Recovery Mode commands.
ZiPhone version 3.5a (30th of June 2019)
===================================================================================
-Updated to the latest PXL version.
-Added PXL support for 1.0-1.1.5 firmware jailbreak.
ZiPhone version 3.5 (29th of June 2019)
===================================================================================
-The iPhone is now 12 years old. This new version of ZiPhone celebrates by
becoming the first jailbreak ever for firmware 2.0 beta 2 and 2.0 beta 3 that
installs a package manager. The PXL project has been revived, and is now installed
when using the jailbreak option on firmware 2.0 beta 2-3. iBrickr on
Windows and Breezy on Mac work on the above firmwares right after using ziphone -j,
however the old PXL packages compiled for firmware 1.0-1.1.5 will not run on 2.0
beta 2-3 (although they do install still). Only install PXL packages specifically
made for 2.0 beta 2-2.0 beta 3 on 2.0 beta 2-2.0 beta 3, and only install PXL
packages specifically made for 1.0-1.1.5 on 1.0-1.1.5.
ZiPhone version 3.4f (12th of June 2019)
===================================================================================
-Fixed an issue where if you attempted to downgrade bootloader/unlock an iPod Touch
on 2.0 beta ZiPhone would freeze.
-Added a new saftey check, ZiPhone will only continue jailbreaking if it
successfully mounted disks and performed operations correctly.
-(Not yet available in the linux version) Added ziphone -m, the WiFi MAC address
changer option. This option will allow you to spoof your WiFi MAC address on
1.0-2.0 beta 3 firmware. It works just like the change IMEI option, ./ziphone -m
<MAC address>. Replace <MAC address> with a real MAC address you want to your device
to have, for example ./ziphone -m 10:10:10:10:10:10 will change your iPhone or iPod
Touch's MAC address to 10:10:10:10:10:10.
-(Not yet availble in the linux version) Added ziphone -r, the WiFi MAC address
reset option. If you change your MAC address and want to revert it back to the
original hardware MAC address, use this option.
ZiPhone version 3.4e (29th of May 2019)
===================================================================================
-Fixed an issue where SummerBoard would theme the iPhone dock on iPod Touch 1.1 and
1.1.1 firmware.
ZiPhone version 3.4d (22nd of May 2019)
===================================================================================
-Updated links to http://lexploit.com
-Updated Mac OS X GUI link to http://ziphone.zibri.org.
ZiPhone version 3.4b (18th of May 2019)
===================================================================================
-2.0 beta 3 support has been added. 2.0 beta support has also been rewritten to
work like other versions.
-1.1-1.1.5 iPod Touch activation support. No more "upgrade to iTunes 10 or greater"
messages in iTunes.
-Fixed some decade old bugs in that Mac OS X GUI.
-Rewrote some options and added more information in the Mac OS X GUI.
-Using ziphone -j just jailbreaks 1.0-1.1.5 or 2.0 beta 2-3 iPhones or iPod Touchs.
-Using ziphone -a just activates a 1.0-1.1.5 or 2.0 beta 2-3 iPhone or iPod Touch,
The 2.0 betas are activated with an original patch by me (lex) and ParrotGeek. In
the lockdownds found in the 2.0 betas there is a routine Apple used to automatically
activated an iPhone 3G or iPod Touch 2G (keep in mind that these were not released
until many months after the 2.0 betas). ZiPhone patches this routine to instead
automatically activate an iPhone 2G or iPod Touch 1 instead.
-Using ziphone -e now will enter Recovery Mode automatically, so you can immediately
restore 1.0.1-1.1.4 in iTunes to flash a baseband. If you want to restore to a lower
version just run ziphone -D after ziphone -e (if your on 1.0-1.1.4). After a baseband
erase you can't unlock until you restore in iTunes.
-Unlock detection and FTL failure checks improved.
ZiPhone version 3.4a (16th of May 2019)
===================================================================================
-Debug boot (ziphone -v) from the original ZiPhone versions is back.
-Unlock upgraded, ziphone -u will now unlock any 1.1.2 BL4.6, and any BL3.9 or 4.6
1.1.3- 1.1.4 iPhone.
-FTL failure check (never done before!). 2.0 beta 2 can now be jailbroken automatically,
just run ziphone -j like normal. It will enter Recovery Mode, wait 2 minutes for FTL
(which always fails on 2.0 beta 2 when entering Recovery Mode) and activate + add AFC2!
This change also means on 1.0-1.1.5 there will almost never be problems.
-Redesigned activation for 2.0 beta 2.
Ziphone version 3.4 (14th of May 2019)
===================================================================================
ZiPhone Windows is back.
ZiPhone Mac OS X has a new kill iTunes method that works correctly, replacing the
older one that could sometimes fail and cause ZiPhone to hang.
ZiPhone installs reboot into the proper place, Apple removed /usr/sbin/reboot in
iPhone 1.1.4 and some other versions.
The new open source Installer.app v3.13 beta is installed as part of the jailbreak for
1.0-1.1.5.
The Z icon has been fixed and works on 1.1.3+.
Rewrite of ZiPhone Linux is compatible with all distributions that have lib-usb version
1.0 or newer.
Improved ramdisk and Mac GUI.
Localization fixed for Mac GUI.
Ziphone version 3.3 (31st of March 2019)
===================================================================================
Really fixed all SpringBoard patching issues.
Added AFC2 for firmware 1.0-1.1.5 jailbreaks.
Improved efficiency of prof.sh.
ZiPhone now stashes apps, ringtones, and fonts for more root partition space.
ZiPhone only activates youtube for 1.1-1.1.5 firmwares (and not on 1.0.x since the
activation certs were never compatible). Completely useless in 2019, but whatever :)
Ziphone version 3.2c (14th of March 2019)
===================================================================================
New linux version of ZiPhone.
The Mac GUI is back.
Building from source has never been easier.
To run the ZiPhone linux binary make sure the package libusb is installed. Then cd
into the ZiPhone directory and execute ./ziphone.
Further changes in v3.2c include better compatibility with 2.0 beta 2. All features
for iPhone users will now work on 2.0 beta 2 (except unlock, that only works on 1.1.4
iPhone firmware). The method ZiPhone uses to enter DFU mode was patched by apple in
2.0 beta 2. So ./ziphone -D won't work on 2.0 beta 2. On 2.0 beta 2, you have to enter
Recovery Mode manually. Do not have ZiPhone do it for you. It will cause ZiPhone not
to work successfully. Instead, enter Recovery Mode manually. First unplug the device,
then turn it off. Connect the device again, and it will start turning on. Immediately
press and hold the home button, until the Connect To iTunes graphic appears. Then run
ZiPhone.
Lastly, ./ziphone -j has been updated. It now jailbreaks everything, not just iPhones.
./ziphone -j will jailbreak iPhone or iPod 1.0-1.1.5 and 2.0 beta 2.
Ziphone version 3.2b (28th of Febuary 2019)
===================================================================================
!!! ZiPhone now officially supports a bare bones jailbreak with hactivation for
firmware 2.0 beta 2! Back in 2008, only Zibri had accomplished a firmware 2.0 beta 3
ramdisk hack jailbreak. People said his hack was stolen code from the iPhone Dev Team
repository, and then they said it didn't work on the firmware 1.2 and 2.0 1-3 betas!
Although a version of ZiPhone using it was never released back in 2008, this new
version 3.2b in 2019 can now jailbreak and hactivate firmware 2.0 beta 2.
To jailbreak an iPhone or iPod Touch on firmware 2.0 beta 2, use "ziphone -Z I".
The command "ziphone -Z I" will now:
-Jailbreak an iPod Touch on firmware 1.1-1.1.5 and 2.0 beta 2.
-Jailbreak an iPhone on firmware 2.0 beta 2.
The jailbreak allows you to connect to AFC2 with iPHUC. It will also hactivate so you
can use the beta.
Ziphone version 3.2 (25th of Febuary 2019)
===================================================================================
Another update by lex.
Firmware 1.1-1.1.1 3rd party app support has been added.
Proper MD5 checksum.
Ziphone version 3.1 (20th of Febuary 2019)
===================================================================================
This new version is an update by lex, that is supported by the original creator of
Ziphone, Zibri. Added Bootloader version detection. ZiPhone will only flash BL3.9
if you have an iPhone with BL4.6. Updated firmware 1.1.4 secpack to firmware 2.0
secpack. ZiPhone can now erase/downgrade/unlock any iPhone that has previously been
on iPhone OS 2.0-3.1.3. Added iPod Touch firmware 1.1.2 support, also enabled 3rd
party applications on iPhone/iPod Touch firmware 1.1.2. Updated Installer.app to
include Community Sources v2.0 (whitera1n.com/apptapp/repo.xml and
simplysmp.net/installer/repo.xml). Installer will install when ran directly from
Recovery Mode.
The installation of BSD Subsystem/SSH from v3.0 is not included in this release.
Install BSD Subsystem and SSH from Installer.app after jailbreaking if you wish.
The plugin system works if you manually place "Blutcher.zip" into either
/var/root/Media/Blutcher.zip or /var/mobile/Media/Blutcher.zip on the iPhone/iPod
Touch filesystem, and then run ZiPhone jailbreak. ZiPhone v3.1 can not yet install
Blutcher.zip without it already being present on the iPhone/iPod Touch filesystem.
Ziphone version 3.0 (30th of March 2008)
===================================================================================
Added automatic installation of BSD subsystem, SSH and Installer (now working
immediately after ziphone)
Added PLUGIN system.
Please read PLUGIN_HOWTO.txt to know how to manage plugins.
Cleaned up code and ziphone main functions.
Added (surprise)
Oral sex is not yet implemented. :)
Ziphone version 2.9 (unreleased)
===================================================================================
Added WiFi FIX workaround.
People with a healthy baseband but corrupted seczone will have their wifi back.
But it's not permanent.
Ziphone version 2.8 (unreleased)
===================================================================================
Removed FIX NVRAM. Now automatic.
Ziphone version 2.7 (unreleased)
===================================================================================
Debug version (a few minor bugs were found and killed)
Cleaned up code and ziphone main functions.
Ziphone version 2.6d (14th Mar 2008) 14:16 CET
===================================================================================
Added FIX NVRAM option. (-Z F) to solve some people problems.
Ziphone version 2.6 (14th Mar 2008) 02:07 CET
===================================================================================
Added iPod Touch compatibility for firmware 1.1.4 ONLY.
(restore to 1.1.4 then run ziphone -Z I)
Ziphone version 2.5c (2nd Mar 2008) 17:56 CET
===================================================================================
Corrected a bug in 2.5b that prevented bootloader downgrade.
Ziphone version 2.5b (1st Mar 2008) 10:39 CET
===================================================================================
Corrected a bug in 2.5 that prevented baseband erasing.
Ziphone version 2.5 (29th Feb 2008) 05:08 CET
===================================================================================
Version 2.5 Supports Firmware version 1.1.4.
If you use 2.5 on previous iPhone firmware versions,
you will have the new baseband (unlocked of course) and old OS.
For 1.1.3 use version 2.4 OR 2.5 (still in testing for 1.1.3)
Ziphone version 2.4 (17th Feb 2008) 23:28 CET
===================================================================================
Starting with version 2.4, Ziphone provides a simple all-in-one interface or a
separate advanced interface for experts or for people who needs more control over the
jailbreak process. Users with AT&T or other "legitimate" iPhone carrier SIMs may wish
to use the advanced interface in order to retain their own real activation tokens.
The two all-in one modes are:
ziphone -Z Y
Jailbreak, activate, and unlock any version
ziphone -Z N
Jailbreak and activate, but don't unlock
To see the advanced commands (same as in older versions), run:
ziphone -Z A
For customers of official iPhone cell carriers, it may be preferable to run:
ziphone -j
Just jailbreak, don't touch activation tokens or unlock. You still still need
to connect the phone to iTunes to activate.
ziphone -j -u
Jailbreak and also unlock 1.1.4 firmware.
Note that after running a jailbreak on a "fresh" phone, you will need to manually install
the "BSD Subsystem" package from Installer before many other programs will work.
This packageis NOT included in Ziphone due to size restrictions of the jailbreaking
ramdisk.
===================================================================================
No 'dev-team' was directly involved with this work.
This program is based on the work of everyone who
believed in free software. (Thanks for the toolchain!)
Thanks to geohot for his latest work.
Thanks to Tissy for moral support.
Thanks to iphone-elite.org for support.
Thanks to Viper and Tifel and ortner for being so nice always.
Thanks to pendor for preliminary work on OSX
Thanks to iRev (a.k.a. REVEREND) for the OS X version
Thanks to ilaria of ilarialab (http://ilaria.netsons.org) for the great artwork
Thanks to figlet bloody font for the ascii art
(https://github.com/xero/figlet-fonts/blob/master/Bloody.flf)
Thanks to PsxGunDown to review this readme.
Namaste,
Zibri.
===================================================================================
Additionally, ZiPhone Linux would not be possible without Planetbeing's work on his
Xpwn utility, and Geohot's work on iBooter.
-Lex.
Legal notice:
ZiPhone does NOT change the iPhone internal IMEI.
It changes the baseband to THINK the imei is another one.
No changes are made inside the SECZONE.
To restore the original IMEI, just issue:
ziphone -u (to keep it unlocked)
or the full restore procedure below.
And ANY phone can be restored to a BRAND NEW state, by using this procedure:
ziphone -e
then
ziphone -D
then restore to firmware 1.0.1 or newer. If your on 2.0 beta or newer, ziphone -D
won't work. You need to enter DFU mode manually, or use Recovery Mode.
All copyright on the enclosed source code (EXCLUDING ZiPhone itself) is
hereby released. The source for the MacOS GUI wrapper is placed into the
public domain.
================================================
FILE: docs/troubleshooting.txt
================================================
Troubleshooting ZiPhone
Or:
IT BROKE WHAT DO I DO?!?!??!?!?!?!?!?!
===================================================================================
ZiPhone has worked reliably for many iPhone users, but occasionally things do go
wrong. Below are some problems that some users have encountered. Please try to
work through these troubleshooting steps before you come into the IRC channels asking
for help. Please keep in mind that there are far more ZiPhone users than there are
ZiPhone developers. The more users who can help themselves using the information
below, the more time the developers have to add new features and fix the occasional
bug.
===================================================================================
I) Other Jailbreaks
The most common source of problems is running ZiPhone after using other 1.1.3
jailbreak solutions. The best case is to run ZiPhone on a cleanly restored 1.1.3
phone. Other configurations that are known to work include starting with a
jailbreakme.com 1.1.1 phone or oktoprep 1.1.2, possibly then updated to 1.1.3
using iTunes.
It you start with a "Nate" or "Official Dev Team" jailbreak of 1.1.3, it's important
that you tell iTunes to treat the phone as a NEW phone. That is, do not restore
your existing phone's settings and configuration to the ZiPhone jailbroken phone.
Restoring settings from other jailbreaks is *known* to cause problems.
If your phone is behaving badly after two different 1.1.3 jailbreaks, your best bet
is to restore to a clean 1.1.3 install with iTunes and then run ZiPhone. Clicking
the Restore button in iTunes should get you started. When prompted about backing up
settings, choose "Do Not Backup". You WILL lose your settings on your phone, but any
contacts or other data synced to your PC will be synced back when your restore is
complete.
===================================================================================
II) Errors running ZiPhone
ZiPhone may display an error message and fail to run, or it may hang at the
"waiting for phone" steps. If this happens, you should try the following:
1) Make sure iTunes is shut down.
2) Make sure iTunesHelper and any other services or daemons releated to iTunes
are not running.
3) Try putting your phone into recovery mode manually (see below).
4) Upgrade to iTunes 7.6 and sync your phone with iTunes before trying ZiPhone.
5) Reboot your computer.
6) If possible, try another computer.
To enter recovery mode manually:
1) Quit iTunes and close any "helper" daemons.
2) Hold the power button on your phone until the "slide to power off" message appears.
3) Slide to power off and wait for the screen to go completely black.
4) Unplug your phone from the cable or dock.
5) Hold the HOME button on the phone and reconnect it to the cable or dock.
6) Continue holding HOME while the Apple logo appears.
7) Continue holding HOME until the "Connect to iTunes" graphic appears.
8) Release HOME. You're now in "Recovery" mode (not to be confused with DFU mode).
9) Try running ZiPhone again.
Previous versions of iTunes were known to crash on PPC Macs or on Mac OS X 10.4
(Tiger). As of version 2.3 all known issues are fixed, and ZiPhone should work
on Intel or PPC Macs running 10.4 or 10.5. Please make sure you're using at least
version 2.3 before reporting errors on Tiger or PPC Macs.
===================================================================================
III) Problems After Jailbreak
After successfully completing a jailbreak, you may notice some of the
following issues:
* YouTube not available
* No cell access (phone and/or SMS don't work)
Most of these issues can be fixed by running one or both of the Reset Settings
options in the phone's settings application.
1) Tap on Settings from the home screen.
2) Choose General
3) Choose Reset (all the way on the bottom)
4) First try "Reset Network Settings"
The phone will reboot. If things still aren't working, go back and try
"Reset All Settings".
* Visual Voicemail doesn't work (official carriers only)
To fix Visual Voice mail, launch the Phone application and click Voicemail. It
will probably try to call into the voicemail phone number. If it doesn't tap
the button to make it call. Let the call complete and check your voicemail.
End the call, wait a minute or two, then try visual voicemail again. You should
be prompted to enter your voicemaill password and Visual Voicemail will work after
that. Some have had luck by changing their password during the phone call or
rebooting afterwards. Of course, Visual Voicemail ONLY works with official
iPhone carriers, so if you're using an unlocked phone with another SIM, this
won't work no matter what you do.
===================================================================================
IV) Starting Over
If none of the above helped, it may be necessary to restore your phone to a
completely clean state before trying again. To do this, perform a
"DFU Restore" as follows:
A) The Easy Way:
1) Shutdown iTunes and connect the phone.
2) Run ziphone -D
3) Your phone will show the "Connect to iTunes" screen.
4) iTunes should be able to restore 1.1.3 firmware to your phone.
Note that this isn't "full" hardware DFU mode, but it should be adequate
to install a current firmware with iTunes.
If you enter this mode by mistake, ziphone -t should reboot normally.
B) Full Hardware DFU (required for downgrades):
Note that using a cable instead of the dock may make it easier to press
buttons in the following steps without losing the connection.
1) Start iTunes and plug the phone in.
2) With the phone powered on, hold both the POWER and HOME buttons for
seven seconds. The screen should turn black.
3) Wait two seconds while the screen is black and release the POWER button
while still holding the HOME button.
4) The screen will remain black, but after a few more seconds iTunes will
detect the phone in recovery mode.
5) Release the HOME button and proceed to restore firmware with iTunes.
Timing is fairly important on this. If your phone reboots or ends up in
recovery mode, just try again. You might want to look at a clock that shows
seconds while you do this. The timing needs to be exact for it to work.
If you enter this mode by mistake, hold the HOME and POWER buttons for
seven seconds until you see the Apple logo and immediately release both
buttons. The phone should reboot normally, assuming a valid firmware image
is present on the phone.
===================================================================================
V) Asking For Help (the right way)
If none of the above works, you may need to come into the ZiPhone IRC channels and
ask for help. Before you do that, there are a few things you should do:
First of all, take a deep breath and CALM DOWN. The odds of ZiPhone doing
permanent damage to your phone are relatively low. The one option that is known to
potentially damage phones is the downgrade baseband option (-b) which is NOT enabled
by default. Assuming you were just doing a standard jailbreak, activation, or unlock,
your phone is probably okay.
Before you continue, you should preserve any error messages that might have appeared
on the computer or your phone. If you ask for assistance on the IRC channels, that
information will be required in order to be of any help to you. If you burst into
the channel with something like:
OMG!!! My phon broke! what do i do??????
Expect to be ignored. No offense, but the IRC channels get a lot of traffic. There
are far more people asking for help than there are ZiPhone developers to help them.
If you come to the channels, please be respectful, be calm, and wait your turn for
someone to help you. When you ask for help, be prepared to give any error messages or
other output from when you ran ZiPhone. Describe clearly what symptoms you're seeing on
your phone and how those differ from what you expected to see. Also be ready to give the
type and versions of your computer, operating system, iTunes, phone, and ZiPhone. You
may be asked both which firmware version you were running before you started and which
version your phone came with when you bought it. It's also especially important to tell
if you have used any other 1.1.3 jailbreak solutions on the phone such as "Nate's Jailbreak"
or the "Official Dev Team Jailbreak". Whether your phone syncs with iTunes on the computer
you're jailbreaking from also makes a difference.
It may be helpful to see this essay on good bug report preparation:
http://www.chiark.greenend.org.uk/~sgtatham/bugs.html
The following is an example of a complete and helpful bug report:
I tried to run ZiPhone 2.4 on a 1.0.2 OOB (Out of Box) iPhone. It was running
firmware 1.1.3 when I started and had been soft-updated using Nate's jailbreak.
I used the ZiPhone GUI on Mac OS X 10.5.2 (Intel) with iTunes 7.6 installed.
My phone is setup to sync with iTunes on this computer. When I ran ZiPhone, it
gave the follow output:
ZiPhone v2.3 by Zibri. http://www.ziphone.org
Source code available at: http://www.iphone-elite.org
Loading zibri.dat.
i386
Searching for iPhone...
Then it just hung there with the phone showing the "connect to iTunes" graphic.
The preceding example gives plenty of information to anyone who might be helping you.
It's far easier to trouble shoot than, "It broke what do i do???".
Help for ZiPhone is available on irc.iphone-elite.org in #ziphone.
================================================
FILE: gui-gtk/zgui.c
================================================
#include <gtk/gtk.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
static void
jailbreak (GtkWidget *widget,
gpointer data)
{
g_print ("Jailbreak clicked...\n");
char jailbreak[50];
strcpy( jailbreak, "./ziphone -j" );
system(jailbreak);
}
static void
activation (GtkWidget *widget,
gpointer data)
{
g_print ("Activate clicked...\n");
char activation[50];
strcpy( activation, "./ziphone -a" );
system(activation);
}
static void
unlock (GtkWidget *widget,
gpointer data)
{
g_print ("Unlock clicked...\n");
char unlock[50];
strcpy( unlock, "./ziphone -u" );
system(unlock);
}
static void
erase (GtkWidget *widget,gpointer data)
{
g_print ("Erase Baseband clicked...\n");
char erase[50];
strcpy( erase, "./ziphone -e" );
system(erase);
}
static void
downgradebl (GtkWidget *widget,gpointer data)
{
g_print ("Downgrade Bootloader clicked...\n");
char downgradebl[50];
strcpy( downgradebl, "./ziphone -b" );
system(downgradebl);
}
static void
debugboot (GtkWidget *widget,gpointer data)
{
g_print ("Debug Boot clicked...\n");
char debugboot[50];
strcpy( debugboot, "./ziphone -v" );
system(debugboot);
}
static void
exitrecovery (GtkWidget *widget,gpointer data)
{
g_print ("Exit Recovery clicked...\n");
char exitrecovery[50];
strcpy( exitrecovery, "./ziphone -N" );
system(exitrecovery);
}
static void
enterdfu (GtkWidget *widget,gpointer data)
{
g_print ("Enter DFU Mode clicked...\n");
char enterdfu[50];
strcpy( enterdfu, "./ziphone -D" );
system(enterdfu);
}
static void
jailbreak_and_activation (GtkWidget *widget,gpointer data)
{
g_print ("Jailbreak and Activate clicked...\n");
char jailbreak_and_activation[50];
strcpy( jailbreak_and_activation, "./ziphone -j -a" );
system(jailbreak_and_activation);
}
static void
jailbreak_activation_unlock (GtkWidget *widget,gpointer data)
{
g_print ("Jailbreak, Activate, and Unlock clicked...\n");
char jailbreak_activation_unlock[50];
strcpy( jailbreak_activation_unlock, "./ziphone -j -a -u" );
system(jailbreak_activation_unlock);
}
static void
kill_ziphone (GtkWidget *widget,gpointer data)
{
g_print ("Kill ZiPhone clicked...\n");
char kill_ziphone[50];
strcpy( kill_ziphone, "killall ziphone" );
system(kill_ziphone);
}
static void
activate (GtkApplication *app, gpointer user_data)
{
GtkWidget *window;
GtkWidget *grid;
GtkWidget *image;
GtkWidget *button;
window = gtk_application_window_new (app);
gtk_window_set_title (GTK_WINDOW (window), "ZiPhone");
gtk_container_set_border_width (GTK_CONTAINER (window), 100);
grid = gtk_grid_new ();
gtk_grid_set_row_spacing (GTK_GRID (grid), 6);
gtk_grid_set_column_spacing (GTK_GRID (grid), 6);
gtk_container_add (GTK_CONTAINER (window), grid);
GdkColor color;
if (gdk_color_parse("#000000", &color))
{
gtk_widget_modify_bg(window, GTK_STATE_NORMAL, &color);
}
button = gtk_button_new_with_label ("Jailbreak");
g_signal_connect (button, "clicked", G_CALLBACK (jailbreak), NULL);
gtk_grid_attach (GTK_GRID (grid), button, 0, 0, 1, 1);
button = gtk_button_new_with_label ("Activate");
g_signal_connect (button, "clicked", G_CALLBACK (activation), NULL);
gtk_grid_attach (GTK_GRID (grid), button, 1, 0, 1, 1);
button = gtk_button_new_with_label ("Unlock");
g_signal_connect (button, "clicked", G_CALLBACK (unlock), NULL);
gtk_grid_attach (GTK_GRID (grid), button, 2, 0, 1, 1);
button = gtk_button_new_with_label ("Jailbreak and Activate");
g_signal_connect (button, "clicked", G_CALLBACK (jailbreak_and_activation), NULL);
gtk_grid_attach (GTK_GRID (grid), button, 0, 1, 2, 1);
button = gtk_button_new_with_label ("Jailbreak, Activate, and Unlock");
g_signal_connect (button, "clicked", G_CALLBACK (jailbreak_activation_unlock), NULL);
gtk_grid_attach (GTK_GRID (grid), button, 0, 2, 3, 1);
button = gtk_button_new_with_label ("Erase Baseband");
g_signal_connect (button, "clicked", G_CALLBACK (erase), NULL);
gtk_grid_attach (GTK_GRID (grid), button, 0, 3, 1, 1);
button = gtk_button_new_with_label ("Downgrade Bootloader");
g_signal_connect (button, "clicked", G_CALLBACK (downgradebl), NULL);
gtk_grid_attach (GTK_GRID (grid), button, 1, 3, 1, 1);
button = gtk_button_new_with_label ("Debug Boot");
g_signal_connect (button, "clicked", G_CALLBACK (debugboot), NULL);
gtk_grid_attach (GTK_GRID (grid), button, 0, 4, 1, 1);
button = gtk_button_new_with_label ("Exit Recovery");
g_signal_connect (button, "clicked", G_CALLBACK (exitrecovery), NULL);
gtk_grid_attach (GTK_GRID (grid), button, 1, 4, 1, 1);
button = gtk_button_new_with_label ("Enter DFU");
g_signal_connect (button, "clicked", G_CALLBACK (enterdfu), NULL);
gtk_grid_attach (GTK_GRID (grid), button, 2, 4, 1, 1);
button = gtk_button_new_with_label ("Kill ZiPhone");
g_signal_connect_swapped (button, "clicked", G_CALLBACK (kill_ziphone), window);
gtk_grid_attach (GTK_GRID (grid), button, 0, 5, 3, 1);
button = gtk_button_new_with_label ("Exit GUI");
g_signal_connect_swapped (button, "clicked", G_CALLBACK (gtk_widget_destroy), window);
gtk_grid_attach (GTK_GRID (grid), button, 0, 6, 3, 1);
gtk_widget_show_all (window);
}
int main (int argc,char **argv)
{
GtkApplication *app;
int status;
if(geteuid() != 0)
{
printf("You must run ./zgui as root or with sudo.\n");
exit(1);
}
printf("Starting GUI...\n");
app = gtk_application_new ("com.zibriandlex.ziphone", G_APPLICATION_FLAGS_NONE);
g_signal_connect (app, "activate", G_CALLBACK (activate), NULL);
status = g_application_run (G_APPLICATION (app), argc, argv);
g_object_unref (app);
return status;
}
================================================
FILE: gui-mac/English.lproj/MainMenu.nib/designable.nib
================================================
<?xml version="1.0" encoding="UTF-8"?>
<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.01">
<data>
<int key="IBDocument.SystemTarget">1040</int>
<string key="IBDocument.SystemVersion">9G66</string>
<string key="IBDocument.InterfaceBuilderVersion">629</string>
<string key="IBDocument.AppKitVersion">949.43</string>
<string key="IBDocument.HIToolboxVersion">353.00</string>
<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
<object class="NSArray" key="IBDocument.PluginDependencies">
<bool key="EncodedWithXMLCoder">YES</bool>
<string id="1333">com.apple.InterfaceBuilderKit</string>
<string id="1502">com.apple.InterfaceBuilder.CocoaPlugin</string>
</object>
<object class="NSMutableArray" key="IBDocument.RootObjects" id="1048">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSCustomObject" id="1021">
<string key="NSClassName" id="954771888">NSApplication</string>
</object>
<object class="NSCustomObject" id="1014">
<string key="NSClassName">FirstResponder</string>
</object>
<object class="NSCustomObject" id="1050">
<reference key="NSClassName" ref="954771888"/>
</object>
<object class="NSMenu" id="649796088">
<string key="NSTitle">AMainMenu</string>
<object class="NSMutableArray" key="NSMenuItems">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSMenuItem" id="694149608">
<reference key="NSMenu" ref="649796088"/>
<string key="NSTitle" id="209482904">ZiPhone</string>
<string key="NSKeyEquiv" id="972273056"/>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<object class="NSCustomResource" key="NSOnImage" id="906849552">
<string key="NSClassName" id="980738026">NSImage</string>
<string key="NSResourceName">NSMenuCheckmark</string>
</object>
<object class="NSCustomResource" key="NSMixedImage" id="203890402">
<reference key="NSClassName" ref="980738026"/>
<string key="NSResourceName">NSMenuMixedState</string>
</object>
<string key="NSAction">submenuAction:</string>
<object class="NSMenu" key="NSSubmenu" id="110575045">
<reference key="NSTitle" ref="209482904"/>
<object class="NSMutableArray" key="NSMenuItems">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSMenuItem" id="238522557">
<reference key="NSMenu" ref="110575045"/>
<string key="NSTitle">About ZiPhone</string>
<reference key="NSKeyEquiv" ref="972273056"/>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="906849552"/>
<reference key="NSMixedImage" ref="203890402"/>
</object>
<object class="NSMenuItem" id="304266470">
<reference key="NSMenu" ref="110575045"/>
<bool key="NSIsDisabled">YES</bool>
<bool key="NSIsSeparator">YES</bool>
<reference key="NSTitle" ref="972273056"/>
<reference key="NSKeyEquiv" ref="972273056"/>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="906849552"/>
<reference key="NSMixedImage" ref="203890402"/>
</object>
<object class="NSMenuItem" id="1046388886">
<reference key="NSMenu" ref="110575045"/>
<string key="NSTitle" id="235556718">Services</string>
<reference key="NSKeyEquiv" ref="972273056"/>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="906849552"/>
<reference key="NSMixedImage" ref="203890402"/>
<string key="NSAction">submenuAction:</string>
<object class="NSMenu" key="NSSubmenu" id="752062318">
<reference key="NSTitle" ref="235556718"/>
<object class="NSMutableArray" key="NSMenuItems">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
<string key="NSName">_NSServicesMenu</string>
</object>
</object>
<object class="NSMenuItem" id="646227648">
<reference key="NSMenu" ref="110575045"/>
<bool key="NSIsDisabled">YES</bool>
<bool key="NSIsSeparator">YES</bool>
<reference key="NSTitle" ref="972273056"/>
<reference key="NSKeyEquiv" ref="972273056"/>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="906849552"/>
<reference key="NSMixedImage" ref="203890402"/>
</object>
<object class="NSMenuItem" id="755159360">
<reference key="NSMenu" ref="110575045"/>
<string key="NSTitle">Hide ZiPhone</string>
<string key="NSKeyEquiv" id="172560372">h</string>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="906849552"/>
<reference key="NSMixedImage" ref="203890402"/>
</object>
<object class="NSMenuItem" id="342932134">
<reference key="NSMenu" ref="110575045"/>
<string key="NSTitle">Hide Others</string>
<reference key="NSKeyEquiv" ref="172560372"/>
<int key="NSKeyEquivModMask">1572864</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="906849552"/>
<reference key="NSMixedImage" ref="203890402"/>
</object>
<object class="NSMenuItem" id="908899353">
<reference key="NSMenu" ref="110575045"/>
<string key="NSTitle">Show All</string>
<reference key="NSKeyEquiv" ref="972273056"/>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="906849552"/>
<reference key="NSMixedImage" ref="203890402"/>
</object>
<object class="NSMenuItem" id="1056857174">
<reference key="NSMenu" ref="110575045"/>
<bool key="NSIsDisabled">YES</bool>
<bool key="NSIsSeparator">YES</bool>
<reference key="NSTitle" ref="972273056"/>
<reference key="NSKeyEquiv" ref="972273056"/>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="906849552"/>
<reference key="NSMixedImage" ref="203890402"/>
</object>
<object class="NSMenuItem" id="632727374">
<reference key="NSMenu" ref="110575045"/>
<string key="NSTitle">Quit ZiPhone</string>
<string key="NSKeyEquiv">q</string>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="906849552"/>
<reference key="NSMixedImage" ref="203890402"/>
</object>
</object>
<string key="NSName">_NSAppleMenu</string>
</object>
</object>
<object class="NSMenuItem" id="379814623">
<reference key="NSMenu" ref="649796088"/>
<string key="NSTitle" id="616201955">File</string>
<reference key="NSKeyEquiv" ref="972273056"/>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="906849552"/>
<reference key="NSMixedImage" ref="203890402"/>
<string key="NSAction">submenuAction:</string>
<object class="NSMenu" key="NSSubmenu" id="720053764">
<reference key="NSTitle" ref="616201955"/>
<object class="NSMutableArray" key="NSMenuItems">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSMenuItem" id="154651786">
<reference key="NSMenu" ref="720053764"/>
<string key="NSTitle">Test boot verbosely (-v)</string>
<string key="NSKeyEquiv">t</string>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="906849552"/>
<reference key="NSMixedImage" ref="203890402"/>
</object>
<object class="NSMenuItem" id="76847499">
<reference key="NSMenu" ref="720053764"/>
<bool key="NSIsDisabled">YES</bool>
<bool key="NSIsSeparator">YES</bool>
<reference key="NSTitle" ref="972273056"/>
<reference key="NSKeyEquiv" ref="972273056"/>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="906849552"/>
<reference key="NSMixedImage" ref="203890402"/>
</object>
<object class="NSMenuItem" id="776162233">
<reference key="NSMenu" ref="720053764"/>
<string key="NSTitle">Close</string>
<string key="NSKeyEquiv">w</string>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="906849552"/>
<reference key="NSMixedImage" ref="203890402"/>
</object>
</object>
</object>
</object>
<object class="NSMenuItem" id="952259628">
<reference key="NSMenu" ref="649796088"/>
<string key="NSTitle" id="366076670">Edit</string>
<reference key="NSKeyEquiv" ref="972273056"/>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="906849552"/>
<reference key="NSMixedImage" ref="203890402"/>
<string key="NSAction">submenuAction:</string>
<object class="NSMenu" key="NSSubmenu" id="789758025">
<reference key="NSTitle" ref="366076670"/>
<object class="NSMutableArray" key="NSMenuItems">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSMenuItem" id="296257095">
<reference key="NSMenu" ref="789758025"/>
<string key="NSTitle">Cut</string>
<string key="NSKeyEquiv">x</string>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="906849552"/>
<reference key="NSMixedImage" ref="203890402"/>
</object>
<object class="NSMenuItem" id="860595796">
<reference key="NSMenu" ref="789758025"/>
<string key="NSTitle">Copy</string>
<string key="NSKeyEquiv">c</string>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="906849552"/>
<reference key="NSMixedImage" ref="203890402"/>
</object>
<object class="NSMenuItem" id="29853731">
<reference key="NSMenu" ref="789758025"/>
<string key="NSTitle">Paste</string>
<string key="NSKeyEquiv">v</string>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="906849552"/>
<reference key="NSMixedImage" ref="203890402"/>
</object>
<object class="NSMenuItem" id="437104165">
<reference key="NSMenu" ref="789758025"/>
<string key="NSTitle">Delete</string>
<reference key="NSKeyEquiv" ref="972273056"/>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="906849552"/>
<reference key="NSMixedImage" ref="203890402"/>
</object>
<object class="NSMenuItem" id="583158037">
<reference key="NSMenu" ref="789758025"/>
<string key="NSTitle">Select All</string>
<string key="NSKeyEquiv">a</string>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="906849552"/>
<reference key="NSMixedImage" ref="203890402"/>
</object>
<object class="NSMenuItem" id="212016141">
<reference key="NSMenu" ref="789758025"/>
<bool key="NSIsDisabled">YES</bool>
<bool key="NSIsSeparator">YES</bool>
<reference key="NSTitle" ref="972273056"/>
<reference key="NSKeyEquiv" ref="972273056"/>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="906849552"/>
<reference key="NSMixedImage" ref="203890402"/>
</object>
<object class="NSMenuItem" id="892235320">
<reference key="NSMenu" ref="789758025"/>
<string key="NSTitle" id="223715415">Find</string>
<reference key="NSKeyEquiv" ref="972273056"/>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="906849552"/>
<reference key="NSMixedImage" ref="203890402"/>
<string key="NSAction">submenuAction:</string>
<object class="NSMenu" key="NSSubmenu" id="963351320">
<reference key="NSTitle" ref="223715415"/>
<object class="NSMutableArray" key="NSMenuItems">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSMenuItem" id="447796847">
<reference key="NSMenu" ref="963351320"/>
<string type="base64-UTF8" key="NSTitle">RmluZOKApg</string>
<string key="NSKeyEquiv" id="51844161">f</string>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="906849552"/>
<reference key="NSMixedImage" ref="203890402"/>
<int key="NSTag">1</int>
</object>
<object class="NSMenuItem" id="326711663">
<reference key="NSMenu" ref="963351320"/>
<string key="NSTitle">Find Next</string>
<string key="NSKeyEquiv" id="83315616">g</string>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="906849552"/>
<reference key="NSMixedImage" ref="203890402"/>
<int key="NSTag">2</int>
</object>
<object class="NSMenuItem" id="270902937">
<reference key="NSMenu" ref="963351320"/>
<string key="NSTitle">Find Previous</string>
<string key="NSKeyEquiv" id="662324915">G</string>
<int key="NSKeyEquivModMask">1179648</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="906849552"/>
<reference key="NSMixedImage" ref="203890402"/>
<int key="NSTag">3</int>
</object>
<object class="NSMenuItem" id="159080638">
<reference key="NSMenu" ref="963351320"/>
<string key="NSTitle">Use Selection for Find</string>
<string key="NSKeyEquiv">e</string>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="906849552"/>
<reference key="NSMixedImage" ref="203890402"/>
<int key="NSTag">7</int>
</object>
<object class="NSMenuItem" id="88285865">
<reference key="NSMenu" ref="963351320"/>
<string key="NSTitle">Jump to Selection</string>
<string key="NSKeyEquiv">j</string>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="906849552"/>
<reference key="NSMixedImage" ref="203890402"/>
</object>
</object>
</object>
</object>
<object class="NSMenuItem" id="972420730">
<reference key="NSMenu" ref="789758025"/>
<string key="NSTitle" id="260056431">Spelling and Grammar</string>
<reference key="NSKeyEquiv" ref="972273056"/>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="906849552"/>
<reference key="NSMixedImage" ref="203890402"/>
<string key="NSAction">submenuAction:</string>
<object class="NSMenu" key="NSSubmenu" id="769623530">
<reference key="NSTitle" ref="260056431"/>
<object class="NSMutableArray" key="NSMenuItems">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSMenuItem" id="679648819">
<reference key="NSMenu" ref="769623530"/>
<string type="base64-UTF8" key="NSTitle">U2hvdyBTcGVsbGluZ+KApg</string>
<string key="NSKeyEquiv">:</string>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="906849552"/>
<reference key="NSMixedImage" ref="203890402"/>
</object>
<object class="NSMenuItem" id="96193923">
<reference key="NSMenu" ref="769623530"/>
<string key="NSTitle">Check Spelling</string>
<string key="NSKeyEquiv">;</string>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="906849552"/>
<reference key="NSMixedImage" ref="203890402"/>
</object>
<object class="NSMenuItem" id="948374510">
<reference key="NSMenu" ref="769623530"/>
<string key="NSTitle">Check Spelling While Typing</string>
<reference key="NSKeyEquiv" ref="972273056"/>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="906849552"/>
<reference key="NSMixedImage" ref="203890402"/>
</object>
<object class="NSMenuItem" id="967646866">
<reference key="NSMenu" ref="769623530"/>
<string key="NSTitle">Check Grammar With Spelling</string>
<reference key="NSKeyEquiv" ref="972273056"/>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="906849552"/>
<reference key="NSMixedImage" ref="203890402"/>
</object>
</object>
</object>
</object>
<object class="NSMenuItem" id="507821607">
<reference key="NSMenu" ref="789758025"/>
<string key="NSTitle" id="267766761">Substitutions</string>
<reference key="NSKeyEquiv" ref="972273056"/>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="906849552"/>
<reference key="NSMixedImage" ref="203890402"/>
<string key="NSAction">submenuAction:</string>
<object class="NSMenu" key="NSSubmenu" id="698887838">
<reference key="NSTitle" ref="267766761"/>
<object class="NSMutableArray" key="NSMenuItems">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSMenuItem" id="605118523">
<reference key="NSMenu" ref="698887838"/>
<string key="NSTitle">Smart Copy/Paste</string>
<reference key="NSKeyEquiv" ref="51844161"/>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="906849552"/>
<reference key="NSMixedImage" ref="203890402"/>
<int key="NSTag">1</int>
</object>
<object class="NSMenuItem" id="197661976">
<reference key="NSMenu" ref="698887838"/>
<string key="NSTitle">Smart Quotes</string>
<reference key="NSKeyEquiv" ref="83315616"/>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="906849552"/>
<reference key="NSMixedImage" ref="203890402"/>
<int key="NSTag">2</int>
</object>
<object class="NSMenuItem" id="708854459">
<reference key="NSMenu" ref="698887838"/>
<string key="NSTitle">Smart Links</string>
<reference key="NSKeyEquiv" ref="662324915"/>
<int key="NSKeyEquivModMask">1179648</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="906849552"/>
<reference key="NSMixedImage" ref="203890402"/>
<int key="NSTag">3</int>
</object>
</object>
</object>
</object>
<object class="NSMenuItem" id="676164635">
<reference key="NSMenu" ref="789758025"/>
<string key="NSTitle" id="634691169">Speech</string>
<reference key="NSKeyEquiv" ref="972273056"/>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="906849552"/>
<reference key="NSMixedImage" ref="203890402"/>
<string key="NSAction">submenuAction:</string>
<object class="NSMenu" key="NSSubmenu" id="785027613">
<reference key="NSTitle" ref="634691169"/>
<object class="NSMutableArray" key="NSMenuItems">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSMenuItem" id="731782645">
<reference key="NSMenu" ref="785027613"/>
<string key="NSTitle">Start Speaking</string>
<reference key="NSKeyEquiv" ref="972273056"/>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="906849552"/>
<reference key="NSMixedImage" ref="203890402"/>
</object>
<object class="NSMenuItem" id="680220178">
<reference key="NSMenu" ref="785027613"/>
<string key="NSTitle">Stop Speaking</string>
<reference key="NSKeyEquiv" ref="972273056"/>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="906849552"/>
<reference key="NSMixedImage" ref="203890402"/>
</object>
</object>
</object>
</object>
</object>
</object>
</object>
<object class="NSMenuItem" id="172032224">
<reference key="NSMenu" ref="649796088"/>
<string key="NSTitle" id="951067998">Mode</string>
<reference key="NSKeyEquiv" ref="972273056"/>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="906849552"/>
<reference key="NSMixedImage" ref="203890402"/>
<string key="NSAction">submenuAction:</string>
<object class="NSMenu" key="NSSubmenu" id="280524195">
<reference key="NSTitle" ref="951067998"/>
<object class="NSMutableArray" key="NSMenuItems">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSMenuItem" id="373965940">
<reference key="NSMenu" ref="280524195"/>
<string key="NSTitle">Restart in DFU Mode (-D)</string>
<reference key="NSKeyEquiv" ref="972273056"/>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="906849552"/>
<reference key="NSMixedImage" ref="203890402"/>
</object>
<object class="NSMenuItem" id="466394120">
<reference key="NSMenu" ref="280524195"/>
<string key="NSTitle">Restart in Normal Mode (-N)</string>
<reference key="NSKeyEquiv" ref="972273056"/>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="906849552"/>
<reference key="NSMixedImage" ref="203890402"/>
</object>
</object>
</object>
</object>
<object class="NSMenuItem" id="713487014">
<reference key="NSMenu" ref="649796088"/>
<string key="NSTitle" id="76774201">Window</string>
<reference key="NSKeyEquiv" ref="972273056"/>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="906849552"/>
<reference key="NSMixedImage" ref="203890402"/>
<string key="NSAction">submenuAction:</string>
<object class="NSMenu" key="NSSubmenu" id="835318025">
<reference key="NSTitle" ref="76774201"/>
<object class="NSMutableArray" key="NSMenuItems">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSMenuItem" id="1011231497">
<reference key="NSMenu" ref="835318025"/>
<string key="NSTitle">Minimize</string>
<string key="NSKeyEquiv">m</string>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="906849552"/>
<reference key="NSMixedImage" ref="203890402"/>
</object>
<object class="NSMenuItem" id="575023229">
<reference key="NSMenu" ref="835318025"/>
<string key="NSTitle">Zoom</string>
<reference key="NSKeyEquiv" ref="972273056"/>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="906849552"/>
<reference key="NSMixedImage" ref="203890402"/>
</object>
<object class="NSMenuItem" id="299356726">
<reference key="NSMenu" ref="835318025"/>
<bool key="NSIsDisabled">YES</bool>
<bool key="NSIsSeparator">YES</bool>
<reference key="NSTitle" ref="972273056"/>
<reference key="NSKeyEquiv" ref="972273056"/>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="906849552"/>
<reference key="NSMixedImage" ref="203890402"/>
</object>
<object class="NSMenuItem" id="625202149">
<reference key="NSMenu" ref="835318025"/>
<string key="NSTitle">Bring All to Front</string>
<reference key="NSKeyEquiv" ref="972273056"/>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="906849552"/>
<reference key="NSMixedImage" ref="203890402"/>
</object>
</object>
<string key="NSName">_NSWindowsMenu</string>
</object>
</object>
<object class="NSMenuItem" id="391199113">
<reference key="NSMenu" ref="649796088"/>
<string key="NSTitle" id="823471872">Help</string>
<reference key="NSKeyEquiv" ref="972273056"/>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="906849552"/>
<reference key="NSMixedImage" ref="203890402"/>
<string key="NSAction">submenuAction:</string>
<object class="NSMenu" key="NSSubmenu" id="374024848">
<reference key="NSTitle" ref="823471872"/>
<object class="NSMutableArray" key="NSMenuItems">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSMenuItem" id="238773614">
<reference key="NSMenu" ref="374024848"/>
<string key="NSTitle">ZiPhone Help</string>
<string key="NSKeyEquiv">?</string>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="906849552"/>
<reference key="NSMixedImage" ref="203890402"/>
</object>
</object>
</object>
</object>
</object>
<string key="NSName">_NSMainMenu</string>
</object>
<object class="NSWindowTemplate" id="972006081">
<int key="NSWindowStyleMask">15</int>
<int key="NSWindowBacking">2</int>
<string key="NSWindowRect">{{190, 263}, {918, 332}}</string>
<int key="NSWTFlags">1949827072</int>
<string key="NSWindowTitle">ZiPhone - All in one jailbreak, unlock, and more!</string>
<string key="NSWindowClass" id="967617760">NSWindow</string>
<nil key="NSViewClass"/>
<string key="NSWindowContentMinSize">{918, 332}</string>
<object class="NSView" key="NSWindowView" id="439893737">
<nil key="NSNextResponder"/>
<int key="NSvFlags">256</int>
<object class="NSMutableArray" key="NSSubviews">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSButton" id="745235930">
<reference key="NSNextResponder" ref="439893737"/>
<int key="NSvFlags">289</int>
<string key="NSFrame">{{699, 16}, {201, 48}}</string>
<reference key="NSSuperview" ref="439893737"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="907695836">
<int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">134217728</int>
<string key="NSContents">Stop (kill ziphone)</string>
<object class="NSFont" key="NSSupport" id="279363170">
<string key="NSName" id="869205984">LucidaGrande</string>
<double key="NSSize">1.300000e+01</double>
<int key="NSfFlags">1044</int>
</object>
<reference key="NSControlView" ref="745235930"/>
<int key="NSButtonFlags">-2034483200</int>
<int key="NSButtonFlags2">130</int>
<object class="NSCustomResource" key="NSNormalImage">
<reference key="NSClassName" ref="980738026"/>
<string key="NSResourceName">Stop</string>
</object>
<reference key="NSAlternateContents" ref="972273056"/>
<reference key="NSKeyEquivalent" ref="972273056"/>
<int key="NSPeriodicDelay">400</int>
<int key="NSPeriodicInterval">75</int>
</object>
</object>
<object class="NSButton" id="76999959">
<reference key="NSNextResponder" ref="439893737"/>
<int key="NSvFlags">289</int>
<string key="NSFrame">{{699, 112}, {201, 29}}</string>
<reference key="NSSuperview" ref="439893737"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="786490730">
<int key="NSCellFlags">-2080374784</int>
<int key="NSCellFlags2">134217728</int>
<string type="base64-UTF8" key="NSContents">SGVscCAmIEluZm8</string>
<reference key="NSSupport" ref="279363170"/>
<reference key="NSControlView" ref="76999959"/>
<int key="NSButtonFlags">-2038153216</int>
<int key="NSButtonFlags2">130</int>
<reference key="NSAlternateContents" ref="972273056"/>
<reference key="NSKeyEquivalent" ref="972273056"/>
<int key="NSPeriodicDelay">400</int>
<int key="NSPeriodicInterval">75</int>
</object>
</object>
<object class="NSBox" id="592118597">
<reference key="NSNextResponder" ref="439893737"/>
<int key="NSvFlags">18</int>
<object class="NSMutableArray" key="NSSubviews">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSView" id="558742217">
<reference key="NSNextResponder" ref="592118597"/>
<int key="NSvFlags">256</int>
<object class="NSMutableArray" key="NSSubviews">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSScrollView" id="324650592">
<reference key="NSNextResponder" ref="558742217"/>
<int key="NSvFlags">274</int>
<object class="NSMutableArray" key="NSSubviews">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSClipView" id="366397510">
<reference key="NSNextResponder" ref="324650592"/>
<int key="NSvFlags">2304</int>
<object class="NSMutableArray" key="NSSubviews">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSTextView" id="358138472">
<reference key="NSNextResponder" ref="366397510"/>
<int key="NSvFlags">2322</int>
<string key="NSFrameSize">{404, 279}</string>
<reference key="NSSuperview" ref="366397510"/>
<object class="NSTextContainer" key="NSTextContainer" id="593616305">
<object class="NSLayoutManager" key="NSLayoutManager">
<object class="NSTextStorage" key="NSTextStorage">
<object class="NSMutableString" key="NSString">
<characters key="NS.bytes"/>
</object>
<nil key="NSDelegate"/>
</object>
<object class="NSMutableArray" key="NSTextContainers">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="593616305"/>
</object>
<int key="NSLMFlags">6</int>
<nil key="NSDelegate"/>
</object>
<reference key="NSTextView" ref="358138472"/>
<double key="NSWidth">4.040000e+02</double>
<int key="NSTCFlags">1</int>
</object>
<object class="NSTextViewSharedData" key="NSSharedData">
<int key="NSFlags">2305</int>
<object class="NSColor" key="NSBackgroundColor" id="254016279">
<int key="NSColorSpace">3</int>
<bytes key="NSWhite">MQA</bytes>
</object>
<object class="NSColor" key="NSInsertionColor" id="701329158">
<int key="NSColorSpace">3</int>
<bytes key="NSWhite">MAA</bytes>
</object>
<object class="NSDictionary" key="NSSelectedAttributes">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSMutableArray" key="dict.sortedKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
<string id="255192074">NSBackgroundColor</string>
<string id="6768308">NSColor</string>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSColor" id="631052163">
<int key="NSColorSpace">6</int>
<string key="NSCatalogName" id="623894279">System</string>
<string key="NSColorName">selectedTextBackgroundColor</string>
<object class="NSColor" key="NSColor" id="493082881">
<int key="NSColorSpace">3</int>
<bytes key="NSWhite">MC42NjY2NjY2OQA</bytes>
</object>
</object>
<object class="NSColor" id="372517419">
<int key="NSColorSpace">6</int>
<reference key="NSCatalogName" ref="623894279"/>
<string key="NSColorName">selectedTextColor</string>
<reference key="NSColor" ref="701329158"/>
</object>
</object>
</object>
<nil key="NSMarkedAttributes"/>
<object class="NSDictionary" key="NSLinkAttributes">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSMutableArray" key="dict.sortedKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="6768308"/>
<string id="941185197">NSUnderline</string>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSColor" id="236656612">
<int key="NSColorSpace">1</int>
<bytes key="NSRGB">MCAwIDEAA</bytes>
</object>
<integer value="1" id="9"/>
</object>
</object>
<nil key="NSDefaultParagraphStyle"/>
</object>
<int key="NSTVFlags">6</int>
<string key="NSMaxSize">{832, 1e+07}</string>
<string key="NSMinize">{83, 279}</string>
<nil key="NSDelegate"/>
</object>
</object>
<string key="NSFrame">{{1, 1}, {404, 279}}</string>
<reference key="NSSuperview" ref="324650592"/>
<reference key="NSNextKeyView" ref="358138472"/>
<reference key="NSDocView" ref="358138472"/>
<reference key="NSBGColor" ref="254016279"/>
<object class="NSCursor" key="NSCursor" id="524872098">
<string key="NSHotSpot">{4, -5}</string>
<int key="NSCursorType">1</int>
</object>
<int key="NScvFlags">4</int>
</object>
<object class="NSScroller" id="155918573">
<reference key="NSNextResponder" ref="324650592"/>
<int key="NSvFlags">-2147483392</int>
<string key="NSFrame">{{390, 1}, {15, 279}}</string>
<reference key="NSSuperview" ref="324650592"/>
<reference key="NSTarget" ref="324650592"/>
<string key="NSAction" id="557394606">_doScroller:</string>
<double key="NSPercent">6.078432e-01</double>
</object>
<object class="NSScroller" id="21488279">
<reference key="NSNextResponder" ref="324650592"/>
<int key="NSvFlags">-2147483392</int>
<string key="NSFrame">{{1, 84}, {83, 15}}</string>
<reference key="NSSuperview" ref="324650592"/>
<int key="NSsFlags">1</int>
<reference key="NSTarget" ref="324650592"/>
<reference key="NSAction" ref="557394606"/>
<double key="NSPercent">8.469388e-01</double>
</object>
</object>
<string key="NSFrame">{{4, 5}, {406, 281}}</string>
<reference key="NSSuperview" ref="558742217"/>
<reference key="NSNextKeyView" ref="366397510"/>
<int key="NSsFlags">562</int>
<reference key="NSVScroller" ref="155918573"/>
<reference key="NSHScroller" ref="21488279"/>
<reference key="NSContentView" ref="366397510"/>
</object>
</object>
<string key="NSFrame">{{1, 1}, {413, 288}}</string>
<reference key="NSSuperview" ref="592118597"/>
</object>
</object>
<string key="NSFrame">{{281, 16}, {415, 304}}</string>
<reference key="NSSuperview" ref="439893737"/>
<string key="NSOffsets" id="762744369">{0, 0}</string>
<object class="NSTextFieldCell" key="NSTitleCell">
<int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">0</int>
<string key="NSContents">Progress Log</string>
<object class="NSFont" key="NSSupport" id="26">
<reference key="NSName" ref="869205984"/>
<double key="NSSize">1.100000e+01</double>
<int key="NSfFlags">3100</int>
</object>
<object class="NSColor" key="NSBackgroundColor" id="523578889">
<int key="NSColorSpace">6</int>
<reference key="NSCatalogName" ref="623894279"/>
<string key="NSColorName">textBackgroundColor</string>
<reference key="NSColor" ref="254016279"/>
</object>
<object class="NSColor" key="NSTextColor">
<int key="NSColorSpace">3</int>
<bytes key="NSWhite">MCAwLjgwMDAwMDAxAA</bytes>
</object>
</object>
<reference key="NSContentView" ref="558742217"/>
<int key="NSBorderType">1</int>
<int key="NSBoxType">0</int>
<int key="NSTitlePosition">2</int>
<bool key="NSTransparent">NO</bool>
</object>
<object class="NSTabView" id="906475793">
<reference key="NSNextResponder" ref="439893737"/>
<int key="NSvFlags">28</int>
<object class="NSMutableArray" key="NSSubviews">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSView" id="422864194">
<reference key="NSNextResponder" ref="906475793"/>
<int key="NSvFlags">256</int>
<object class="NSMutableArray" key="NSSubviews">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSScrollView" id="47570758">
<reference key="NSNextResponder" ref="422864194"/>
<int key="NSvFlags">4382</int>
<object class="NSMutableArray" key="NSSubviews">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSClipView" id="1051562403">
<reference key="NSNextResponder" ref="47570758"/>
<int key="NSvFlags">2304</int>
<object class="NSMutableArray" key="NSSubviews">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSTableView" id="158880228">
<reference key="NSNextResponder" ref="1051562403"/>
<int key="NSvFlags">4352</int>
<string key="NSFrameSize">{250, 268}</string>
<reference key="NSSuperview" ref="1051562403"/>
<bool key="NSEnabled">YES</bool>
<object class="_NSCornerView" key="NSCornerView">
<nil key="NSNextResponder"/>
<int key="NSvFlags">256</int>
<string key="NSFrame">{{236, 0}, {16, 17}}</string>
</object>
<object class="NSMutableArray" key="NSTableColumns">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSTableColumn" id="338211270">
<string key="NSIdentifier">text</string>
<double key="NSWidth">1.920000e+02</double>
<double key="NSMinWidth">4.000000e+01</double>
<double key="NSMaxWidth">1.000000e+03</double>
<object class="NSTableHeaderCell" key="NSHeaderCell">
<int key="NSCellFlags">75497472</int>
<int key="NSCellFlags2">0</int>
<reference key="NSContents" ref="972273056"/>
<reference key="NSSupport" ref="26"/>
<object class="NSColor" key="NSBackgroundColor">
<int key="NSColorSpace">3</int>
<bytes key="NSWhite">MC4zMzMzMzI5OQA</bytes>
</object>
<object class="NSColor" key="NSTextColor" id="949125186">
<int key="NSColorSpace">6</int>
<reference key="NSCatalogName" ref="623894279"/>
<string key="NSColorName">headerTextColor</string>
<reference key="NSColor" ref="701329158"/>
</object>
</object>
<object class="NSTextFieldCell" key="NSDataCell" id="794671974">
<int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">4325376</int>
<string key="NSContents">Text Cell</string>
<reference key="NSSupport" ref="26"/>
<reference key="NSControlView" ref="158880228"/>
<bool key="NSDrawsBackground">YES</bool>
<int key="NSTextBezelStyle">1</int>
<object class="NSColor" key="NSBackgroundColor" id="971716199">
<int key="NSColorSpace">6</int>
<reference key="NSCatalogName" ref="623894279"/>
<string key="NSColorName">controlColor</string>
<reference key="NSColor" ref="493082881"/>
</object>
<object class="NSColor" key="NSTextColor" id="225033371">
<int key="NSColorSpace">6</int>
<reference key="NSCatalogName" ref="623894279"/>
<string key="NSColorName">controlTextColor</string>
<reference key="NSColor" ref="701329158"/>
</object>
</object>
<int key="NSResizingMask">1</int>
<bool key="NSIsResizeable">YES</bool>
<reference key="NSTableView" ref="158880228"/>
</object>
<object class="NSTableColumn" id="480181815">
<string key="NSIdentifier">button</string>
<double key="NSWidth">5.000000e+01</double>
<double key="NSMinWidth">1.000000e+01</double>
<double key="NSMaxWidth">3.402823e+38</double>
<object class="NSTableHeaderCell" key="NSHeaderCell">
<int key="NSCellFlags">75497472</int>
<int key="NSCellFlags2">0</int>
<reference key="NSContents" ref="972273056"/>
<reference key="NSSupport" ref="26"/>
<object class="NSColor" key="NSBackgroundColor">
<int key="NSColorSpace">6</int>
<reference key="NSCatalogName" ref="623894279"/>
<string key="NSColorName">headerColor</string>
<reference key="NSColor" ref="254016279"/>
</object>
<reference key="NSTextColor" ref="949125186"/>
</object>
<object class="NSImageCell" key="NSDataCell" id="665167756">
<int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">33685504</int>
<object class="NSImage" key="NSContents">
<int key="NSImageFlags">549453824</int>
<string key="NSSize">{64, 64}</string>
<object class="NSMutableArray" key="NSReps">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSArray">
<bool key="EncodedWithXMLCoder">YES</bool>
<integer value="0" id="8"/>
<object class="NSBitmapImageRep">
<object class="NSData" key="NSTIFFRepresentation">
<bytes key="NS.bytes">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
AAQAAAABAAAACAESAAMAAAABAAEAAAEVAAMAAAABAAQAAAEWAAMAAAABAgAAAAEXAAQAAAABAAAmZAEc
AAMAAAABAAEAAAE9AAMAAAABAAIAAAFSAAMAAAABAAEAAAFTAAMAAAAEAAAnLodzAAcAAA8MAAAnNgAA
AAAACAAIAAgACAABAAEAAQABAAAPDGFwcGwCAAAAbW50clJHQiBYWVogB9gAAQACAAkABgAPYWNzcEFQ
UEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPbWAAEAAAAA0y1hcHBsuMGrNgsP7ucR27yoodP0awAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOclhZWgAAASwAAAAUZ1hZWgAAAUAAAAAUYlhZWgAA
AVQAAAAUd3RwdAAAAWgAAAAUY2hhZAAAAXwAAAAsclRSQwAAAagAAAAOZ1RSQwAAAbgAAAAOYlRSQwAA
AcgAAAAOdmNndAAAAdgAAAYSbmRpbgAAB+wAAAY+ZGVzYwAADiwAAABkZHNjbQAADpAAAAAubW1vZAAA
DsAAAAAoY3BydAAADugAAAAkWFlaIAAAAAAAAF1MAAA01QAAB9tYWVogAAAAAAAAdAUAALP7AAAiflhZ
WiAAAAAAAAAlhQAAF0sAAKjMWFlaIAAAAAAAAPNSAAEAAAABFs9zZjMyAAAAAAABDEIAAAXe///zJgAA
B5IAAP2R///7ov///aMAAAPcAADAbGN1cnYAAAAAAAAAAQHNAABjdXJ2AAAAAAAAAAEBzQAAY3VydgAA
AAAAAAABAc0AAHZjZ3QAAAAAAAAAAAADAQAAAgAAAgQC9wQFBQUGCgcFCAsJCAoNCwgMCg0QDg0PDxAO
ERASEBMSFBIVFBYXFxgYFhkaGhsbGhwdHR0eHyAeISIiIiMjJCUlJCYmJycpJyopKyosLC0tLi8vLzAx
MjEzNDQ0NTQ2Njc3OTo6Ojs7PD09PT49Pz9BQkJCQ0NEQ0VFRkZISElJSklLTExMTk1PT1BQUVJSU1RU
VVVWV1dXWFhaWltbXFxdXl5eYGBhYWJiY2RkZGVlZ2doaGlpamlra2xtbW1vcHBwcXJycnNydHR1dHZ2
eHh5eHp6e3t8fH19fn5/f4CAgYGCg4SDhYSGhoeHiIiJiYqKi4uMjI2Njo6Pj5CQkZGSkpOTlJSVlZaW
l5eYmJmZmpqbm5ycnZ2enp+foKChoaKio6OkpKWlpiWmpqenqKipqaqqq6usrK2trq6vr7CwsbGysrOz
tLS1NLW1tra3t7i4ubm6uru7vLy9vb6+v7/AP8DAwcHCwsPDxMTFxcbGx8fIyMlIycnKysvLzMzNzc5N
zs7Pz9DQ0dHSUdLS09PU1NXV1lXW1tfX2NjZ2dpZ2trb29zc3d3eXd7e39/g4OHh4uLjYuPj5OTl5ebm
5+foZ+jo6enq6uvr7Ozt7e5t7u7v7/Dw8fHy8vNy8/P09PX19vb39/j4+fn6efr6+/v8/P39/v7/fv//
AAACBAL3A3AEBAUJBgQHCggHCQwKBwsJDA8NDA4ODw0QDxEPEhETERQTFRYWFxcVGBkZGhoZGxwcHB0e
Hh0fICAgISEiIyMiJSUmJicmKCcpKCoqKyssLS0tLzAwLzEyMjIzMjQ0NTU3ODg4OTk6Ozs7PDs9PT9A
QEBBQUJBQ0NEREVFR0ZIR0lKSkpLSkxMTk5PUFBRUVFSUlRVVVVWVldXWFhZWVpbXFtdXV5eX19gYWFh
Y2NkZGVlZmZnZmhoaWpqamxtbW1ub29vcG9xcXJxc3N0dHV0dnZ3d3l5enp7e3x8fX1+fn9/gICBgIKC
g4OEhIWFhoaHh4iIiYmKiouLjIyNjY6Oj4+QkJGRkpKTk5SUlZWWlpeXmJiZmZqam5ucnJ2dnp6fn6Cg
oaGioqOjpKSlpaamp6eoqKmpqqqrKqurrKytra6ur6+wsLGxsrKzs7S0tbW2tre3uDe4uLm5urq7u7y8
vb2+vr+/wMDBwcLCw8PExMXFxkXGxsfHyMjJycrKy8vMzM1Mzc3Ozs/P0NDR0dLS01LT09TU1dXW1tfX
2NjZ2dpZ2trb29zc3d3e3t/f4F/g4OHh4uLj4+Tk5eXm5udm5+fo6Onp6urr6+zs7e3u7u9u7+/w8PHx
8vLz8/T09fX29vd29/f4+Pn5+vr7+/z8/f3+/v9+//8AAAGCAmUDQAQcBPEFuwaJB1wIMQkHCdUKoQty
DEUNFA3jDrUPhBBRER4R7hK5E4cUWBUnFfMWvReHGFEZGhngGqobdRw/HQUdyh6PH1UgHSDjIaoibyMw
I/ckuSV6Jjwm/ifDKIQpRSoMKswrjSxNLQgtyS6IL0UwBDDFMYUyQzMVM+00wjWWNmw3QDgROOM5tTqH
O1k8Lj0IPdw+sj+JQF5BMEIAQtJDqER9RUlGHUbvR8RImUlrSjpLEEveTK1Nf05MTxlP6lC4UYNST1Mb
U+dUsVV5VkZXC1fRWJdZYFoqWvJbtlx4XTxeAl7FX4hgUGERYc5ii2NNZA1k02WoZpZnjWiLaXtqdWts
bHBtYG5bb0VwOHEsciJzE3QFdPh153bTd7x4pXmUeoN7b3xOfTd+JH8Mf++A1IG8gp+DfoRohUiGKocP
h/KI04m0ipaLeYxcjTuOHY79j9yQvpGhkoeTb5RPlS+WEpb4l96YvpmdmoCbZ5xRnTqeHp8Dn/Sg9KH6
ovuj9qT0pfCm76foqOCp46rdq9SszK3Err6vuLCzsa+yrLOqtKm1qbart664xrnMutO72rznvgG/FcAw
wUnCbMOVxMHF78cfyFDJiMrSzCPNds7M0CnRmtMS1JHWJtfD2WjbJ90C3ujg7uMZ5Wbn1uqP7Y/xDvVt
+x7//wAAbmRpbgAAAAAAAAY2AACXOAAAVsIAAFQSAACKMAAAJ6sAABaoAABQDQAAVDkAAiFHAAIR6wAB
RR4AAwEAAAIAAAABAAMACwAWACUANwBNAGUAgQCfAMEA5QELATUBYQGQAcEB9QIrAmQCnwLcAxwDXwOj
A+oENAR/BM0FHQVGBXAFxAYbBnQGzwctB4wH7ggfCFIIuAkgCYoJ9gpkCtULRwuBC7wMMgyrDSYNog4h
DmEOoQ8kD6kQLxC4EUMRzxIWEl0S7hOAFBUUqxVDFZAV3RZ5FxcXthhYGKoY/BmhGkga8RucG/McSRz4
HageWx8PH2ofxSB9ITch8iKwIw8jbyQwJPMltyZ+J0YnqygQKNwpqSp5K0osHCzxLVwtxy6gL3kwVTEz
MhIy8zPVNEc0uTWgNoc3cThcOUk6ODsoPBo9Dj4DPn8++z/0QO5B6kLoQ+hE6UXsRvFH90j/SglLFEwh
TTBOQE9SUGZRe1KSU6tUxVXhVv9YHlk/WmFbhVyrXdJe+2AlYVJif2TgZhJnR2h8abRq7WwnbWRuom/h
cSJyZXOpdO92NnjJehV7Y3yyfgN/VYCpgf+DVoSvhgmIwoohi4GM445Hj6yREpJ7k+SWvJgrmZubDJx/
n2qg4aJao9Wmz6hOqc6rUa5ar+CxabLytgu3mbkpurq94b93wQ7Cp8RBx3vJGcq6zFvN/9FK0vHUm9ZF
1/HZn9z/3rHgZOIZ49DnQej86rnsdu427/fxufVC9wj40Pqa/GX//wAAAAEAAwALACUANwBNAGUAgQCf
AMEA5QELATUBYQGQAcEB9QIrAmQCnwLcAxwDXwOjA+oENAR/BM0FHQVwBcQGGwZ0Bs8HLQdcB4wH7ghS
CLgJIAmKCfYKZArVCw4LRwu8DDIMqw0mDaIOIQ5hDqEPJA+pEC8QuBFDEc8SFhJdEu4TgBQVFKsVQxXd
FisWeRcXF7YYWBj8GaEZ9BpIGvEbnBxJHPgdUB2oHlsfDx/FIH0hNyHyIlEisCNvJDAk8yW3Jn4m4idG
KBAo3CmpKnkrSiwcLPEtXC3HLqAveTBVMTMyEjLzM9U0uTWgNoc3cTfmOFw5STo4Oyg8Gj0OPgM++z/0
QO5B6kLoQ+hE6UXsRvFH90j/SglLFEwhTTBOQE9SUGZRe1KSU6tUxVXhVv9YHlk/WmFbhVyrXdJe+2Al
YVJif2OvZOBmEmdHaHxptGrtbCdtZG/hcSJyZXOpdO92Nnd/eMl6FXtjfLJ+A39Vgf+DVoSvhgmHZYjC
iiGLgYzjjkePrJESknuT5Ja8mCuZm5sMnH+d9J9qolqj1aVRps+oTqnOrNSuWq/gsWmy8rR+tgu5Kbq6
vE294b93wQ7EQcXdx3vJGcq6zFvN/9FK0vHUm9ZF1/HZn9tO3P/gZOIZ49DliOdB6Pzquex27/fxufN8
9UL3CPjQ+pr8Zf//AAAAAAAGABIAIwA5AFUAdQCZAMEA7gEgAVQBjgHLAgsCUQKbAucDOQOMA+QEQASh
BQYFbwXdBkwGvwc4B7UINgi5CUAJygpdCu4LiAwlDMQNZQ4PDrUPZRAXENMRixJNEw8T0hSeFVkWDxbP
F40YURkaGeUasxuEHFUdIh37HtAfqyCMIXIiVyM5JCwlGCYKJvgn7ijrKeIq6SvpLPMuAC8JMB8xNjJP
M2o0kTWyNuE4ETlBOnA7qDzrPi0/bkC7Qf9DUkSzRglHZ0i0SdVK7Uv6TRxONE9RUGFRilKoU91VBlYx
V1tYkVnCWvhcNl15XsNgA2FGYo9j7WU7ZoZn42lEaptr/21rbsdwOHGkcw10gnX4d25443pce959Wn7h
gGWB54NmhOSGdYgDiYyLEoynjkCP1JFjku6Uf5Yfl7CZJJqOm/qdep7xoHOh66NwpP+mdqf+qY6rH6yw
rkGv07Fksva0h7YZt6q5O7rLvFu9zL9ZwOjCd8QExXfG+8hyye/LaszVzj/PqNEP0nbT3NVB1p7X59kv
2nbbvN0B3kXfeeCl4c/i+eQc5THmROdX6Gjpcepw62PsU+1A7i3vDO/r8LzxjvJW8xvz2/SV9U719vaf
90L32/h0+QX5h/oK+o36+vtl+8/8OvyV/OT9NP2D/dP+I/6J/vT/X//J//8AAGRlc2MAAAAAAAAACkNv
bG9yIExDRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABtbHVjAAAAAAAAAAEAAAAMZW5VUwAAABIAAAAcAEMAbwBs
AG8AcgAgAEwAQwBEAABtbW9kAAAAAAAABhAAAJxWAAAAAL/4e4AAAAAAAAAAAAAAAAAAAAAAdGV4dAAA
AABDb3B5cmlnaHQgQXBwbGUsIEluYy4sIDIwMDgAA</bytes>
</object>
</object>
</object>
</object>
<object class="NSColor" key="NSColor">
<int key="NSColorSpace">3</int>
<bytes key="NSWhite">MCAwAA</bytes>
</object>
</object>
<reference key="NSSupport" ref="26"/>
<int key="NSAlign">0</int>
<int key="NSScale">0</int>
<int key="NSStyle">2</int>
<bool key="NSAnimates">NO</bool>
</object>
<int key="NSResizingMask">3</int>
<bool key="NSIsResizeable">YES</bool>
<bool key="NSIsEditable">YES</bool>
<reference key="NSTableView" ref="158880228"/>
</object>
</object>
<double key="NSIntercellSpacingWidth">3.000000e+00</double>
<double key="NSIntercellSpacingHeight">2.000000e+00</double>
<reference key="NSBackgroundColor" ref="254016279"/>
<object class="NSColor" key="NSGridColor">
<int key="NSColorSpace">6</int>
<reference key="NSCatalogName" ref="623894279"/>
<string key="NSColorName">gridColor</string>
<object class="NSColor" key="NSColor">
<int key="NSColorSpace">3</int>
<bytes key="NSWhite">MC41AA</bytes>
</object>
</object>
<double key="NSRowHeight">6.400000e+01</double>
<int key="NSTvFlags">304087040</int>
<string key="NSAutosaveName">allInOneTable</string>
<int key="NSGridStyleMask">2</int>
<int key="NSColumnAutoresizingStyle">0</int>
<int key="NSDraggingSourceMaskForLocal">15</int>
<int key="NSDraggingSourceMaskForNonLocal">0</int>
<bool key="NSAllowsTypeSelect">NO</bool>
</object>
</object>
<string key="NSFrame">{{1, 1}, {250, 268}}</string>
<reference key="NSSuperview" ref="47570758"/>
<reference key="NSNextKeyView" ref="158880228"/>
<reference key="NSDocView" ref="158880228"/>
<object class="NSColor" key="NSBGColor">
<int key="NSColorSpace">6</int>
<reference key="NSCatalogName" ref="623894279"/>
<string key="NSColorName">controlBackgroundColor</string>
<reference key="NSColor" ref="493082881"/>
</object>
<int key="NScvFlags">4</int>
</object>
<object class="NSScroller" id="687402669">
<reference key="NSNextResponder" ref="47570758"/>
<int key="NSvFlags">-2147483392</int>
<string key="NSFrame">{{-100, -100}, {15, 253}}</string>
<reference key="NSSuperview" ref="47570758"/>
<reference key="NSTarget" ref="47570758"/>
<reference key="NSAction" ref="557394606"/>
<double key="NSPercent">9.940829e-01</double>
</object>
<object class="NSScroller" id="437505836">
<reference key="NSNextResponder" ref="47570758"/>
<int key="NSvFlags">-2147483392</int>
<string key="NSFrame">{{-100, -100}, {250, 15}}</string>
<reference key="NSSuperview" ref="47570758"/>
<int key="NSsFlags">1</int>
<reference key="NSTarget" ref="47570758"/>
<reference key="NSAction" ref="557394606"/>
<double key="NSPercent">9.957627e-01</double>
</object>
</object>
<string key="NSFrame">{{2, 0}, {252, 270}}</string>
<reference key="NSSuperview" ref="422864194"/>
<reference key="NSNextKeyView" ref="1051562403"/>
<int key="NSsFlags">2</int>
<reference key="NSVScroller" ref="687402669"/>
<reference key="NSHScroller" ref="437505836"/>
<reference key="NSContentView" ref="1051562403"/>
<bytes key="NSScrollAmts">QSAAAEEgAABChAAAQoQAAA</bytes>
</object>
</object>
<string key="NSFrame">{{10, 33}, {251, 270}}</string>
<reference key="NSSuperview" ref="906475793"/>
</object>
</object>
<string key="NSFrame">{{12, 10}, {271, 316}}</string>
<reference key="NSSuperview" ref="439893737"/>
<object class="NSMutableArray" key="NSTabViewItems">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSTabViewItem" id="482807574">
<string key="NSIdentifier" id="1062523209">1</string>
<reference key="NSView" ref="422864194"/>
<string key="NSLabel">Simple</string>
<reference key="NSColor" ref="971716199"/>
<reference key="NSTabView" ref="906475793"/>
</object>
<object class="NSTabViewItem" id="1064817585">
<string key="NSIdentifier" id="464671981">2</string>
<object class="NSView" key="NSView" id="361508494">
<nil key="NSNextResponder"/>
<int key="NSvFlags">256</int>
<object class="NSMutableArray" key="NSSubviews">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSButton" id="403000213">
<reference key="NSNextResponder" ref="361508494"/>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{15, 157}, {208, 18}}</string>
<reference key="NSSuperview" ref="361508494"/>
<int key="NSTag">7</int>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="650312281">
<int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">0</int>
<string key="NSContents">Change iPhone IMEI</string>
<reference key="NSSupport" ref="279363170"/>
<reference key="NSControlView" ref="403000213"/>
<int key="NSButtonFlags">1211912448</int>
<int key="NSButtonFlags2">2</int>
<object class="NSCustomResource" key="NSNormalImage" id="1013459325">
<reference key="NSClassName" ref="980738026"/>
<string key="NSResourceName">NSSwitch</string>
</object>
<object class="NSButtonImageSource" key="NSAlternateImage" id="455856972">
<string key="NSImageName">NSSwitch</string>
</object>
<reference key="NSAlternateContents" ref="972273056"/>
<reference key="NSKeyEquivalent" ref="972273056"/>
<int key="NSPeriodicDelay">200</int>
<int key="NSPeriodicInterval">25</int>
</object>
</object>
<object class="NSTextField" id="1171411">
<reference key="NSNextResponder" ref="361508494"/>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{35, 129}, {169, 22}}</string>
<reference key="NSSuperview" ref="361508494"/>
<int key="NSTag">8</int>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="684170171">
<int key="NSCellFlags">-1804599231</int>
<int key="NSCellFlags2">138413056</int>
<reference key="NSContents" ref="972273056"/>
<reference key="NSSupport" ref="279363170"/>
<string key="NSPlaceholderString">15-16 Digit IMEI #</string>
<reference key="NSControlView" ref="1171411"/>
<bool key="NSDrawsBackground">YES</bool>
<reference key="NSBackgroundColor" ref="523578889"/>
<object class="NSColor" key="NSTextColor">
<int key="NSColorSpace">6</int>
<reference key="NSCatalogName" ref="623894279"/>
<string key="NSColorName">textColor</string>
<reference key="NSColor" ref="701329158"/>
</object>
<object class="NSArray" key="NSAllowedInputLocales">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>ti_ER</string>
<string>ar_LY</string>
<string>kok_IN</string>
<string>mk_MK</string>
<string>eo</string>
<string>fr_CH</string>
<string>sw</string>
<string>so_ET</string>
<string>gv</string>
<string>ar_BH</string>
<string>hy_AM_REVISED</string>
<string>it_IT</string>
<string>bg_BG</string>
<string>ro</string>
<string>es_HN</string>
<string>en_BE</string>
<string>is</string>
<string>kw_GB</string>
<string>kl</string>
<string>ga_IE</string>
<string>nl_NL</string>
<string>uk</string>
<string>fr_CA</string>
<string>sk_SK</string>
<string>es_AR</string>
<string>en_MT</string>
<string>fr_BE</string>
<string>ca</string>
<string>cs_CZ</string>
<string>fr_FR</string>
<string>en_ZA</string>
<string>sl</string>
<string>fa</string>
<string>so</string>
<string>pt</string>
<string>et_EE</string>
<string>eu_ES</string>
<string>fi</string>
<string>de_CH</string>
<string>or</string>
<string>gu_IN</string>
<string>mt_MT</string>
<string>nb</string>
<string>ms</string>
<string>es_CR</string>
<string>as_IN</string>
<string>ar_SA</string>
<string>am</string>
<string>pl</string>
<string>hu</string>
<string>lv</string>
<string>ar_DZ</string>
<string>ur</string>
<string>pt_PT</string>
<string>eu</string>
<string>so_DJ</string>
<string>de</string>
<string>en_IN</string>
<string>hr_HR</string>
<string>ar_AE</string>
<string>gu</string>
<string>lt</string>
<string>te_IN</string>
<string>ar_KW</string>
<string>sr_Latn</string>
<string>de_AT</string>
<string>en_US</string>
<string>es_PR</string>
<string>pl_PL</string>
<string>uz_Cyrl_UZ</string>
<string>ar_EG</string>
<string>it_CH</string>
<string>nl</string>
<string>haw_US</string>
<string>is_IS</string>
<string>en_IE</string>
<string>kl_GL</string>
<string>ps</string>
<string>zh_Hans_CN</string>
<string>ar</string>
<string>ru_UA</string>
<string>th_TH</string>
<string>fr_LU</string>
<string>uz_Latn_UZ</string>
<string>az</string>
<string>bn_IN</string>
<string>es_MX</string>
<string>kk_KZ</string>
<string>en_US_POSIX</string>
<string>el_GR</string>
<string>he</string>
<string>es_UY</string>
<string>nn_NO</string>
<string>sr</string>
<string>sk</string>
<string>ur_PK</string>
<string>es_PA</string>
<string>sv_FI</string>
<string>zh</string>
<string>es_DO</string>
<string>en_CA</string>
<string>en_BW</string>
<string>de_DE</string>
<string>haw</string>
<string>pa_IN</string>
<string>sq</string>
<string>kw</string>
<string>ga</string>
<string>ml</string>
<string>mt</string>
<string>af_ZA</string>
<string>az_Latn</string>
<string>ko_KR</string>
<string>fa_AF</string>
<string>ps_AF</string>
<string>be_BY</string>
<string>bn</string>
<string>it</string>
<string>sr_Latn_CS</string>
<string>zh_Hans</string>
<string>as</string>
<string>ms_MY</string>
<string>be</string>
<string>sl_SI</string>
<string>fa_IR</string>
<string>es_EC</string>
<string>kok</string>
<string>es_PY</string>
<string>ta_IN</string>
<string>am_ET</string>
<string>es_CO</string>
<string>uz_Latn</string>
<string>el</string>
<string>zh_Hant_MO</string>
<string>kk</string>
<string>kn</string>
<string>zh_Hant</string>
<string>en</string>
<string>es_PE</string>
<string>pt_BR</string>
<string>ar_LB</string>
<string>en_NZ</string>
<string>es_ES</string>
<string>en_HK</string>
<string>es_BO</string>
<string>hu_HU</string>
<string>sr_Cyrl</string>
<string>nb_NO</string>
<string>sv</string>
<string>vi</string>
<string>ti_ET</string>
<string>bg</string>
<string>om</string>
<string>de_LU</string>
<string>en_SG</string>
<string>id_ID</string>
<string>ur_IN</string>
<string>uz</string>
<string>da</string>
<string>ru_RU</string>
<string>es_US</string>
<string>es_VE</string>
<string>ko</string>
<string>ja</string>
<string>af</string>
<string>ar_YE</string>
<string>lt_LT</string>
<string>om_KE</string>
<string>zh_Hans_SG</string>
<string>es_NI</string>
<string>he_IL</string>
<string>en_PK</string>
<string>en_PH</string>
<string>az_Cyrl_AZ</string>
<string>en_AU</string>
<string>az_Cyrl</string>
<string>ta</string>
<string>ar_MA</string>
<string>sw_KE</string>
<string>tr_TR</string>
<string>zh_Hant_HK</string>
<string>en_ZW</string>
<string>de_BE</string>
<string>mk</string>
<string>pa</string>
<string>da_DK</string>
<string>es_GT</string>
<string>es</string>
<string>ar_IQ</string>
<string>az_Latn_AZ</string>
<string>so_SO</string>
<string>lv_LV</string>
<string>mr</string>
<string>te</string>
<string>sq_AL</string>
<string>ml_IN</string>
<string>uk_UA</string>
<string>hi_IN</string>
<string>ca_ES</string>
<string>ar_TN</string>
<string id="453702521">id</string>
<string>om_ET</string>
<string>cs</string>
<string>fo_FO</string>
<string>hy_AM</string>
<string>en_GB</string>
<string>sr_Cyrl_CS</string>
<string>gl_ES</string>
<string>sw_TZ</string>
<string>ro_RO</string>
<string>cy</string>
<string>fr</string>
<string>ms_BN</string>
<string>so_KE</string>
<string>tr</string>
<string>gl</string>
<string>cy_GB</string>
<string>ar_OM</string>
<string>fo</string>
<string>es_CL</string>
<string>sv_SE</string>
<string>ar_JO</string>
<string>uz_Cyrl</string>
<string>zh_Hant_TW</string>
<string>et</string>
<string>hi</string>
<string>fi_FI</string>
<string>nn</string>
<string>th</string>
<string>ar_SY</string>
<string>ja_JP</string>
<string>gv_GB</string>
<string>hy</string>
<string>en_VI</string>
<string>kn_IN</string>
<string>ti</string>
<string>ar_QA</string>
<string>es_SV</string>
<string>hr</string>
<string>ru</string>
<string>ar_SD</string>
<string>mr_IN</string>
<string>vi_VN</string>
<string>nl_BE</string>
<string>or_IN</string>
</object>
</object>
</object>
<object class="NSButton" id="330622098">
<reference key="NSNextResponder" ref="361508494"/>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{15, 55}, {172, 18}}</string>
<reference key="NSSuperview" ref="361508494"/>
<int key="NSTag">9</int>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="479122483">
<int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">0</int>
<string type="base64-UTF8" key="NSContents">RG93bmdyYWRlIEJMICYgZXJhc2U</string>
<reference key="NSSupport" ref="279363170"/>
<reference key="NSControlView" ref="330622098"/>
<int key="NSButtonFlags">1211912448</int>
<int key="NSButtonFlags2">2</int>
<reference key="NSNormalImage" ref="1013459325"/>
<reference key="NSAlternateImage" ref="455856972"/>
<reference key="NSAlternateContents" ref="972273056"/>
<reference key="NSKeyEquivalent" ref="972273056"/>
<int key="NSPeriodicDelay">200</int>
<int key="NSPeriodicInterval">25</int>
</object>
</object>
<object class="NSButton" id="138549880">
<reference key="NSNextResponder" ref="361508494"/>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{15, 15}, {223, 38}}</string>
<reference key="NSSuperview" ref="361508494"/>
<int key="NSTag">10</int>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="91702163">
<int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">0</int>
<string type="base64-UTF8" key="NSContents">RG93bmdyYWRlIDQuNiBCTCB0byAzLjkgJgp1bmxvY2sgMS4xLjMtMS4xLjQ</string>
<reference key="NSSupport" ref="279363170"/>
<reference key="NSControlView" ref="138549880"/>
<int key="NSButtonFlags">1211912448</int>
<int key="NSButtonFlags2">2</int>
<reference key="NSNormalImage" ref="1013459325"/>
<reference key="NSAlternateImage" ref="455856972"/>
<reference key="NSAlternateContents" ref="972273056"/>
<reference key="NSKeyEquivalent" ref="972273056"/>
<int key="NSPeriodicDelay">200</int>
<int key="NSPeriodicInterval">25</int>
</object>
</object>
<object class="NSButton" id="889200803">
<reference key="NSNextResponder" ref="361508494"/>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{15, 188}, {229, 42}}</string>
<reference key="NSSuperview" ref="361508494"/>
<int key="NSTag">3</int>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="399977139">
<int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">0</int>
<string key="NSContents">Unlock 1.1.2 (4.6) or 1.1.3-1.1.4</string>
<reference key="NSSupport" ref="279363170"/>
<reference key="NSControlView" ref="889200803"/>
<int key="NSButtonFlags">1211912448</int>
<int key="NSButtonFlags2">2</int>
<reference key="NSNormalImage" ref="1013459325"/>
<reference key="NSAlternateImage" ref="455856972"/>
<reference key="NSAlternateContents" ref="972273056"/>
<reference key="NSKeyEquivalent" ref="972273056"/>
<int key="NSPeriodicDelay">200</int>
<int key="NSPeriodicInterval">25</int>
</object>
</object>
<object class="NSButton" id="409592039">
<reference key="NSNextResponder" ref="361508494"/>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{15, 234}, {172, 18}}</string>
<reference key="NSSuperview" ref="361508494"/>
<int key="NSTag">2</int>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="566605291">
<int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">0</int>
<string key="NSContents">Activate</string>
<reference key="NSSupport" ref="279363170"/>
<reference key="NSControlView" ref="409592039"/>
<int key="NSButtonFlags">1211912448</int>
<int key="NSButtonFlags2">2</int>
<reference key="NSNormalImage" ref="1013459325"/>
<reference key="NSAlternateImage" ref="455856972"/>
<reference key="NSAlternateContents" ref="972273056"/>
<reference key="NSKeyEquivalent" ref="972273056"/>
<int key="NSPeriodicDelay">200</int>
<int key="NSPeriodicInterval">25</int>
</object>
</object>
<object class="NSBox" id="67258081">
<reference key="NSNextResponder" ref="361508494"/>
<int key="NSvFlags">12</int>
<string key="NSFrame">{{9, 225}, {233, 5}}</string>
<reference key="NSSuperview" ref="361508494"/>
<reference key="NSOffsets" ref="762744369"/>
<object class="NSTextFieldCell" key="NSTitleCell">
<int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">0</int>
<string key="NSContents" id="1060157132">Box</string>
<reference key="NSSupport" ref="279363170"/>
<reference key="NSBackgroundColor" ref="523578889"/>
<object class="NSColor" key="NSTextColor">
<int key="NSColorSpace">3</int>
<bytes key="NSWhite">MCAwLjgwMDAwMDAxAA</bytes>
</object>
</object>
<int key="NSBorderType">3</int>
<int key="NSBoxType">2</int>
<int key="NSTitlePosition">0</int>
<bool key="NSTransparent">NO</bool>
</object>
<object class="NSButton" id="163017185">
<reference key="NSNextResponder" ref="361508494"/>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{15, 254}, {223, 18}}</string>
<reference key="NSSuperview" ref="361508494"/>
<int key="NSTag">1</int>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="601407940">
<int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">0</int>
<string key="NSContents">Jailbreak</string>
<reference key="NSSupport" ref="279363170"/>
<reference key="NSControlView" ref="163017185"/>
<int key="NSButtonFlags">1211912448</int>
<int key="NSButtonFlags2">2</int>
<reference key="NSNormalImage" ref="1013459325"/>
<reference key="NSAlternateImage" ref="455856972"/>
<reference key="NSAlternateContents" ref="972273056"/>
<reference key="NSKeyEquivalent" ref="972273056"/>
<int key="NSPeriodicDelay">200</int>
<int key="NSPeriodicInterval">25</int>
</object>
</object>
<object class="NSBox" id="11794714">
<reference key="NSNextResponder" ref="361508494"/>
<int key="NSvFlags">12</int>
<string key="NSFrame">{{9, 188}, {233, 5}}</string>
<reference key="NSSuperview" ref="361508494"/>
<reference key="NSOffsets" ref="762744369"/>
<object class="NSTextFieldCell" key="NSTitleCell">
<int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">0</int>
<reference key="NSContents" ref="1060157132"/>
<reference key="NSSupport" ref="279363170"/>
<reference key="NSBackgroundColor" ref="523578889"/>
<object class="NSColor" key="NSTextColor">
<int key="NSColorSpace">3</int>
<bytes key="NSWhite">MCAwLjgwMDAwMDAxAA</bytes>
</object>
</object>
<int key="NSBorderType">3</int>
<int key="NSBoxType">2</int>
<int key="NSTitlePosition">0</int>
<bool key="NSTransparent">NO</bool>
</object>
<object class="NSBox" id="734819426">
<reference key="NSNextResponder" ref="361508494"/>
<int key="NSvFlags">12</int>
<string key="NSFrame">{{9, 77}, {233, 5}}</string>
<reference key="NSSuperview" ref="361508494"/>
<reference key="NSOffsets" ref="762744369"/>
<object class="NSTextFieldCell" key="NSTitleCell">
<int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">0</int>
<reference key="NSContents" ref="1060157132"/>
<reference key="NSSupport" ref="279363170"/>
<reference key="NSBackgroundColor" ref="523578889"/>
<object class="NSColor" key="NSTextColor">
<int key="NSColorSpace">3</int>
<bytes key="NSWhite">MCAwLjgwMDAwMDAxAA</bytes>
</object>
</object>
<int key="NSBorderType">3</int>
<int key="NSBoxType">2</int>
<int key="NSTitlePosition">0</int>
<bool key="NSTransparent">NO</bool>
</object>
<object class="NSTextField" id="22076117">
<reference key="NSNextResponder" ref="361508494"/>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{20, 88}, {198, 39}}</string>
<reference key="NSSuperview" ref="361508494"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="62416774">
<int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">138412032</int>
<string key="NSContents">To be used for legitimate purposes only!</string>
<reference key="NSSupport" ref="279363170"/>
<reference key="NSControlView" ref="22076117"/>
<reference key="NSBackgroundColor" ref="971716199"/>
<reference key="NSTextColor" ref="225033371"/>
</object>
</object>
</object>
<string key="NSFrame">{{10, 33}, {251, 270}}</string>
</object>
<string key="NSLabel">Advanced</string>
<reference key="NSColor" ref="971716199"/>
<reference key="NSTabView" ref="906475793"/>
</object>
</object>
<reference key="NSSelectedTabViewItem" ref="482807574"/>
<reference key="NSFont" ref="279363170"/>
<int key="NSTvFlags">0</int>
<bool key="NSAllowTruncatedLabels">YES</bool>
<bool key="NSDrawsBackground">YES</bool>
</object>
<object class="NSButton" id="957666542">
<reference key="NSNextResponder" ref="439893737"/>
<int key="NSvFlags">281</int>
<string key="NSFrame">{{699, 149}, {201, 165}}</string>
<reference key="NSSuperview" ref="439893737"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="842759333">
<int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">134217728</int>
<reference key="NSContents" ref="972273056"/>
<object class="NSFont" key="NSSupport" id="24">
<reference key="NSName" ref="869205984"/>
<double key="NSSize">1.000000e+01</double>
<int key="NSfFlags">16</int>
</object>
<reference key="NSControlView" ref="957666542"/>
<int key="NSButtonFlags">-2042347520</int>
<int key="NSButtonFlags2">130</int>
<object class="NSCustomResource" key="NSNormalImage">
<reference key="NSClassName" ref="980738026"/>
<string key="NSResourceName">iPhone</string>
</object>
<reference key="NSAlternateContents" ref="972273056"/>
<reference key="NSKeyEquivalent" ref="972273056"/>
<int key="NSPeriodicDelay">400</int>
<int key="NSPeriodicInterval">75</int>
</object>
</object>
<object class="NSButton" id="365997249">
<reference key="NSNextResponder" ref="439893737"/>
<int key="NSvFlags">289</int>
<string key="NSFrame">{{699, 62}, {201, 48}}</string>
<reference key="NSSuperview" ref="439893737"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="639059277">
<int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">134217728</int>
<string key="NSContents">Start Process</string>
<reference key="NSSupport" ref="279363170"/>
<reference key="NSControlView" ref="365997249"/>
<int key="NSButtonFlags">-2034483200</int>
<int key="NSButtonFlags2">130</int>
<object class="NSCustomResource" key="NSNormalImage">
<reference key="NSClassName" ref="980738026"/>
<string key="NSResourceName">Start</string>
</object>
<reference key="NSAlternateContents" ref="972273056"/>
<reference key="NSKeyEquivalent" ref="972273056"/>
<int key="NSPeriodicDelay">400</int>
<int key="NSPeriodicInterval">75</int>
</object>
</object>
</object>
<string key="NSFrameSize">{918, 332}</string>
</object>
<string key="NSScreenRect">{{0, 0}, {1280, 778}}</string>
<string key="NSMinSize">{918, 354}</string>
<string key="NSFrameAutosaveName">ZiPhoneMain</string>
</object>
<object class="NSCustomObject" id="610737253">
<string key="NSClassName" id="1042982023">ZiPhoneWindowController</string>
</object>
<object class="NSWindowTemplate" id="933306648">
<int key="NSWindowStyleMask">11</int>
<int key="NSWindowBacking">2</int>
<string key="NSWindowRect">{{296, 262}, {687, 637}}</string>
<int key="NSWTFlags">1683488768</int>
<string key="NSWindowTitle">About ZiPhone</string>
<reference key="NSWindowClass" ref="967617760"/>
<nil key="NSViewClass"/>
<string key="NSWindowContentMinSize">{687, 637}</string>
<object class="NSView" key="NSWindowView" id="667996338">
<nil key="NSNextResponder"/>
<int key="NSvFlags">256</int>
<object class="NSMutableArray" key="NSSubviews">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSTextField" id="1069555338">
<reference key="NSNextResponder" ref="667996338"/>
<int key="NSvFlags">289</int>
<string key="NSFrame">{{105, 20}, {565, 17}}</string>
<reference key="NSSuperview" ref="667996338"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="566721271">
<int key="NSCellFlags">67108928</int>
<int key="NSCellFlags2">71304192</int>
<reference key="NSContents" ref="972273056"/>
<reference key="NSSupport" ref="279363170"/>
<reference key="NSControlView" ref="1069555338"/>
<reference key="NSBackgroundColor" ref="971716199"/>
<reference key="NSTextColor" ref="225033371"/>
</object>
</object>
<object class="NSTabView" id="206797087">
<reference key="NSNextResponder" ref="667996338"/>
<int key="NSvFlags">18</int>
<object class="NSMutableArray" key="NSSubviews">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSView" id="747654879">
<reference key="NSNextResponder" ref="206797087"/>
<int key="NSvFlags">256</int>
<object class="NSMutableArray" key="NSSubviews">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSScrollView" id="824850421">
<reference key="NSNextResponder" ref="747654879"/>
<int key="NSvFlags">274</int>
<object class="NSMutableArray" key="NSSubviews">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSClipView" id="828072861">
<reference key="NSNextResponder" ref="824850421"/>
<int key="NSvFlags">2304</int>
<object class="NSMutableArray" key="NSSubviews">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSTextView" id="445172453">
<reference key="NSNextResponder" ref="828072861"/>
<int key="NSvFlags">2322</int>
<object class="NSMutableSet" key="NSDragTypes">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSMutableArray" key="set.sortedObjects">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>Apple HTML pasteboard type</string>
<string>Apple PDF pasteboard type</string>
<string>Apple PICT pasteboard type</string>
<string>Apple PNG pasteboard type</string>
<string>Apple URL pasteboard type</string>
<string>CorePasteboardFlavorType 0x6D6F6F76</string>
<string>CorePasteboardFlavorType 0x75726C20</string>
<string>NSColor pasteboard type</string>
<string>NSFilenamesPboardType</string>
<string>NSStringPboardType</string>
<string>NeXT Encapsulated PostScript v1.2 pasteboard type</string>
<string>NeXT RTFD pasteboard type</string>
<string>NeXT Rich Text Format v1.0 pasteboard type</string>
<string>NeXT TIFF v4.0 pasteboard type</string>
<string>NeXT font pasteboard type</string>
<string>NeXT ruler pasteboard type</string>
<string>WebURLsWithTitlesPboardType</string>
</object>
</object>
<string key="NSFrameSize">{630, 548}</string>
<reference key="NSSuperview" ref="828072861"/>
<object class="NSTextContainer" key="NSTextContainer" id="286641284">
<object class="NSLayoutManager" key="NSLayoutManager">
<object class="NSTextStorage" key="NSTextStorage">
<object class="NSMutableString" key="NSString">
<characters key="NS.bytes"/>
</object>
<nil key="NSDelegate"/>
</object>
<object class="NSMutableArray" key="NSTextContainers">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="286641284"/>
</object>
<int key="NSLMFlags">6</int>
<nil key="NSDelegate"/>
</object>
<reference key="NSTextView" ref="445172453"/>
<double key="NSWidth">6.300000e+02</double>
<int key="NSTCFlags">1</int>
</object>
<object class="NSTextViewSharedData" key="NSSharedData">
<int key="NSFlags">11235</int>
<reference key="NSBackgroundColor" ref="254016279"/>
<reference key="NSInsertionColor" ref="701329158"/>
<object class="NSDictionary" key="NSSelectedAttributes">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSMutableArray" key="dict.sortedKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="255192074"/>
<reference ref="6768308"/>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="631052163"/>
<reference ref="372517419"/>
</object>
</object>
<nil key="NSMarkedAttributes"/>
<object class="NSDictionary" key="NSLinkAttributes">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSMutableArray" key="dict.sortedKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="6768308"/>
<reference ref="941185197"/>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="236656612"/>
<reference ref="9"/>
</object>
</object>
<nil key="NSDefaultParagraphStyle"/>
</object>
<int key="NSTVFlags">6</int>
<string key="NSMaxSize">{1277, 1e+07}</string>
<string key="NSMinize">{83, 548}</string>
<nil key="NSDelegate"/>
</object>
</object>
<string key="NSFrame">{{1, 1}, {630, 548}}</string>
<reference key="NSSuperview" ref="824850421"/>
<reference key="NSNextKeyView" ref="445172453"/>
<reference key="NSDocView" ref="445172453"/>
<reference key="NSBGColor" ref="254016279"/>
<reference key="NSCursor" ref="524872098"/>
<int key="NScvFlags">4</int>
</object>
<object class="NSScroller" id="761429819">
<reference key="NSNextResponder" ref="824850421"/>
<int key="NSvFlags">256</int>
<string key="NSFrame">{{631, 1}, {15, 548}}</string>
<reference key="NSSuperview" ref="824850421"/>
<reference key="NSTarget" ref="824850421"/>
<reference key="NSAction" ref="557394606"/>
<double key="NSPercent">5.496489e-01</double>
</object>
<object class="NSScroller" id="246659388">
<reference key="NSNextResponder" ref="824850421"/>
<int key="NSvFlags">-2147483392</int>
<string key="NSFrame">{{-100, -100}, {87, 18}}</string>
<reference key="NSSuperview" ref="824850421"/>
<int key="NSsFlags">1</int>
<reference key="NSTarget" ref="824850421"/>
<reference key="NSAction" ref="557394606"/>
<double key="NSCurValue">1.000000e+00</double>
<double key="NSPercent">9.456522e-01</double>
</object>
</object>
<string key="NSFrame">{{-3, -57}, {647, 550}}</string>
<reference key="NSSuperview" ref="747654879"/>
<reference key="NSNextKeyView" ref="828072861"/>
<int key="NSsFlags">18</int>
<reference key="NSVScroller" ref="761429819"/>
<reference key="NSHScroller" ref="246659388"/>
<reference key="NSContentView" ref="828072861"/>
</object>
</object>
<string key="NSFrame">{{10, 33}, {641, 496}}</string>
<reference key="NSSuperview" ref="206797087"/>
</object>
</object>
<string key="NSFrame">{{13, 89}, {661, 542}}</string>
<reference key="NSSuperview" ref="667996338"/>
<object class="NSMutableArray" key="NSTabViewItems">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSTabViewItem" id="1004983234">
<reference key="NSIdentifier" ref="1062523209"/>
<reference key="NSView" ref="747654879"/>
<string key="NSLabel">Readme</string>
<reference key="NSColor" ref="971716199"/>
<reference key="NSTabView" ref="206797087"/>
</object>
<object class="NSTabViewItem" id="1050246480">
<reference key="NSIdentifier" ref="464671981"/>
<object class="NSView" key="NSView" id="476720134">
<nil key="NSNextResponder"/>
<int key="NSvFlags">256</int>
<object class="NSMutableArray" key="NSSubviews">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSScrollView" id="40829408">
<reference key="NSNextResponder" ref="476720134"/>
<int key="NSvFlags">274</int>
<object class="NSMutableArray" key="NSSubviews">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSClipView" id="469307511">
<reference key="NSNextResponder" ref="40829408"/>
<int key="NSvFlags">2304</int>
<object class="NSMutableArray" key="NSSubviews">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSTextView" id="1056268673">
<reference key="NSNextResponder" ref="469307511"/>
<int key="NSvFlags">2322</int>
<string key="NSFrameSize">{630, 548}</string>
<reference key="NSSuperview" ref="469307511"/>
<object class="NSTextContainer" key="NSTextContainer" id="177121521">
<object class="NSLayoutManager" key="NSLayoutManager">
<object class="NSTextStorage" key="NSTextStorage">
<object class="NSMutableString" key="NSString">
<characters key="NS.bytes"/>
</object>
<nil key="NSDelegate"/>
</object>
<object class="NSMutableArray" key="NSTextContainers">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="177121521"/>
</object>
<int key="NSLMFlags">6</int>
<nil key="NSDelegate"/>
</object>
<reference key="NSTextView" ref="1056268673"/>
<double key="NSWidth">6.300000e+02</double>
<int key="NSTCFlags">1</int>
</object>
<object class="NSTextViewSharedData" key="NSSharedData">
<int key="NSFlags">11235</int>
<reference key="NSBackgroundColor" ref="254016279"/>
<reference key="NSInsertionColor" ref="701329158"/>
<object class="NSDictionary" key="NSSelectedAttributes">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSMutableArray" key="dict.sortedKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="255192074"/>
<reference ref="6768308"/>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="631052163"/>
<reference ref="372517419"/>
</object>
</object>
<nil key="NSMarkedAttributes"/>
<object class="NSDictionary" key="NSLinkAttributes">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSMutableArray" key="dict.sortedKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="6768308"/>
<reference ref="941185197"/>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="236656612"/>
<reference ref="9"/>
</object>
</object>
<nil key="NSDefaultParagraphStyle"/>
</object>
<int key="NSTVFlags">6</int>
<string key="NSMaxSize">{1277, 1e+07}</string>
<string key="NSMinize">{83, 548}</string>
<nil key="NSDelegate"/>
</object>
</object>
<string key="NSFrame">{{1, 1}, {630, 548}}</string>
<reference key="NSSuperview" ref="40829408"/>
<reference key="NSNextKeyView" ref="1056268673"/>
<reference key="NSDocView" ref="1056268673"/>
<reference key="NSBGColor" ref="254016279"/>
<reference key="NSCursor" ref="524872098"/>
<int key="NScvFlags">4</int>
</object>
<object class="NSScroller" id="764327913">
<reference key="NSNextResponder" ref="40829408"/>
<int key="NSvFlags">256</int>
<string key="NSFrame">{{631, 1}, {15, 548}}</string>
<reference key="NSSuperview" ref="40829408"/>
<reference key="NSTarget" ref="40829408"/>
<reference key="NSAction" ref="557394606"/>
<double key="NSPercent">5.496489e-01</double>
</object>
<object class="NSScroller" id="431939397">
<reference key="NSNextResponder" ref="40829408"/>
<int key="NSvFlags">-2147483392</int>
<string key="NSFrame">{{-100, -100}, {87, 18}}</string>
<reference key="NSSuperview" ref="40829408"/>
<int key="NSsFlags">1</int>
<reference key="NSTarget" ref="40829408"/>
<reference key="NSAction" ref="557394606"/>
<double key="NSCurValue">1.000000e+00</double>
<double key="NSPercent">9.456522e-01</double>
</object>
</object>
<string key="NSFrame">{{-3, -57}, {647, 550}}</string>
<reference key="NSSuperview" ref="476720134"/>
<reference key="NSNextKeyView" ref="469307511"/>
<int key="NSsFlags">18</int>
<reference key="NSVScroller" ref="764327913"/>
<reference key="NSHScroller" ref="431939397"/>
<reference key="NSContentView" ref="469307511"/>
</object>
</object>
<string key="NSFrame">{{10, 33}, {641, 496}}</string>
</object>
<string key="NSLabel">Troubleshooting</string>
<reference key="NSColor" ref="971716199"/>
<reference key="NSTabView" ref="206797087"/>
</object>
</object>
<reference key="NSSelectedTabViewItem" ref="1004983234"/>
<reference key="NSFont" ref="279363170"/>
<int key="NSTvFlags">0</int>
<bool key="NSAllowTruncatedLabels">YES</bool>
<bool key="NSDrawsBackground">YES</bool>
</object>
<object class="NSTextField" id="615226901">
<reference key="NSNextResponder" ref="667996338"/>
<int key="NSvFlags">290</int>
<string key="NSFrame">{{105, 40}, {565, 46}}</string>
<reference key="NSSuperview" ref="667996338"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="2394713">
<int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">272629760</int>
<string key="NSContents">ZiPhone development takes a significant amount of time. Please donate to support continued improvements.</string>
<reference key="NSSupport" ref="279363170"/>
<reference key="NSControlView" ref="615226901"/>
<reference key="NSBackgroundColor" ref="971716199"/>
<reference key="NSTextColor" ref="225033371"/>
</object>
</object>
<object class="NSButton" id="1000276368">
<reference key="NSNextResponder" ref="667996338"/>
<int key="NSvFlags">292</int>
<string key="NSFrame">{{18, 36}, {84, 57}}</string>
<reference key="NSSuperview" ref="667996338"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="291305336">
<int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">134217728</int>
<reference key="NSContents" ref="972273056"/>
<reference key="NSSupport" ref="24"/>
<reference key="NSControlView" ref="1000276368"/>
<int key="NSButtonFlags">-2033958912</int>
<int key="NSButtonFlags2">130</int>
<object class="NSCustomResource" key="NSNormalImage">
<reference key="NSClassName" ref="980738026"/>
<string key="NSResourceName">paypal</string>
</object>
<reference key="NSAlternateContents" ref="972273056"/>
<reference key="NSKeyEquivalent" ref="972273056"/>
<int key="NSPeriodicDelay">400</int>
<int key="NSPeriodicInterval">75</int>
</object>
</object>
<object class="NSTextField" id="971358339">
<reference key="NSNextResponder" ref="667996338"/>
<int key="NSvFlags">292</int>
<string key="NSFrame">{{17, 20}, {86, 17}}</string>
<reference key="NSSuperview" ref="667996338"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="391095085">
<int key="NSCellFlags">67108928</int>
<int key="NSCellFlags2">272630784</int>
<reference key="NSContents" ref="972273056"/>
<reference key="NSSupport" ref="279363170"/>
<reference key="NSControlView" ref="971358339"/>
<reference key="NSBackgroundColor" ref="971716199"/>
<reference key="NSTextColor" ref="225033371"/>
</object>
</object>
</object>
<string key="NSFrameSize">{687, 637}</string>
</object>
<string key="NSScreenRect">{{0, 0}, {1280, 778}}</string>
<string key="NSMinSize">{687, 659}</string>
<string key="NSFrameAutosaveName">ZiPhoneAbout</string>
</object>
</object>
<object class="IBObjectContainer" key="IBDocument.Objects">
<object class="NSMutableArray" key="connectionRecords">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">performMiniaturize:</string>
<reference key="source" ref="1014"/>
<reference key="destination" ref="1011231497"/>
</object>
<int key="connectionID">37</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">arrangeInFront:</string>
<reference key="source" ref="1014"/>
<reference key="destination" ref="625202149"/>
</object>
<int key="connectionID">39</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">toggleContinuousSpellChecking:</string>
<reference key="source" ref="1014"/>
<reference key="destination" ref="948374510"/>
</object>
<int key="connectionID">222</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">copy:</string>
<reference key="source" ref="1014"/>
<reference key="destination" ref="860595796"/>
</object>
<int key="connectionID">224</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">checkSpelling:</string>
<reference key="source" ref="1014"/>
<reference key="destination" ref="96193923"/>
</object>
<int key="connectionID">225</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">paste:</string>
<reference key="source" ref="1014"/>
<reference key="destination" ref="29853731"/>
</object>
<int key="connectionID">226</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">stopSpeaking:</string>
<reference key="source" ref="1014"/>
<reference key="destination" ref="680220178"/>
</object>
<int key="connectionID">227</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">cut:</string>
<reference key="source" ref="1014"/>
<reference key="destination" ref="296257095"/>
</object>
<int key="connectionID">228</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">showGuessPanel:</string>
<reference key="source" ref="1014"/>
<reference key="destination" ref="679648819"/>
</object>
<int key="connectionID">230</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">selectAll:</string>
<reference key="source" ref="1014"/>
<reference key="destination" ref="583158037"/>
</object>
<int key="connectionID">232</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">startSpeaking:</string>
<reference key="source" ref="1014"/>
<reference key="destination" ref="731782645"/>
</object>
<int key="connectionID">233</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">delete:</string>
<reference key="source" ref="1014"/>
<reference key="destination" ref="437104165"/>
</object>
<int key="connectionID">235</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">performZoom:</string>
<reference key="source" ref="1014"/>
<reference key="destination" ref="575023229"/>
</object>
<int key="connectionID">240</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">performFindPanelAction:</string>
<reference key="source" ref="1014"/>
<reference key="destination" ref="447796847"/>
</object>
<int key="connectionID">241</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">centerSelectionInVisibleArea:</string>
<reference key="source" ref="1014"/>
<reference key="destination" ref="88285865"/>
</object>
<int key="connectionID">245</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">toggleGrammarChecking:</string>
<reference key="source" ref="1014"/>
<reference key="destination" ref="967646866"/>
</object>
<int key="connectionID">347</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">toggleSmartInsertDelete:</string>
<reference key="source" ref="1014"/>
<reference key="destination" ref="605118523"/>
</object>
<int key="connectionID">355</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">toggleAutomaticQuoteSubstitution:</string>
<reference key="source" ref="1014"/>
<reference key="destination" ref="1
gitextract_uzn2e98b/ ├── Makefile.freebsd ├── Makefile.haiku ├── Makefile.linux ├── Makefile.macintel32 ├── Makefile.macintel64 ├── Makefile.macppc ├── Makefile.win ├── abstractfile.c ├── abstractfile.h ├── abstractfilewinleg.c ├── common.h ├── docs/ │ ├── license.txt │ ├── plugin-howto.txt │ ├── readme.txt │ └── troubleshooting.txt ├── gui-gtk/ │ └── zgui.c ├── gui-mac/ │ ├── English.lproj/ │ │ ├── InfoPlist.strings │ │ ├── Localizable.strings │ │ ├── MainMenu.nib/ │ │ │ ├── designable.nib │ │ │ └── keyedobjects.nib │ │ ├── MainMenu.strings │ │ └── donate.html │ ├── French.lproj/ │ │ ├── InfoPlist.strings │ │ ├── Localizable.strings │ │ ├── MainMenu.nib/ │ │ │ ├── designable.nib │ │ │ └── keyedobjects.nib │ │ ├── MainMenu.strings │ │ └── donate.html │ ├── Info.plist │ ├── Italian.lproj/ │ │ ├── MainMenu.nib/ │ │ │ ├── designable.nib │ │ │ └── keyedobjects.nib │ │ └── MainMenu.strings │ ├── Key.tif │ ├── Locked.tif │ ├── Spanish.lproj/ │ │ ├── Localizable.strings │ │ ├── MainMenu.nib/ │ │ │ ├── designable.nib │ │ │ └── keyedobjects.nib │ │ └── MainMenu.strings │ ├── Start.tif │ ├── Stop.tif │ ├── Unlocked.tif │ ├── ZiPhoneOSX.xcodeproj/ │ │ ├── lex.mode1v3 │ │ ├── lex.pbxuser │ │ └── project.pbxproj │ ├── ZiPhoneOSX_Prefix.pch │ ├── ZiPhoneWindowController.h │ ├── ZiPhoneWindowController.m │ ├── getversion.sh │ ├── i18n-supported.list │ ├── i18n.sh │ ├── iPhone.icns │ ├── icon/ │ │ ├── Z-Phone.psd │ │ └── Z-PhonePortrait.psd │ ├── main.m │ └── readme.txt ├── install-freebsd.txt ├── install-haiku.txt ├── install-linux.txt ├── install-mac.txt ├── install-windows.txt ├── libibooter.cpp ├── libibooter.h ├── linuxgui.sh ├── macgui.sh ├── macrelease.sh └── ziphone.cpp
SYMBOL INDEX (144 symbols across 9 files)
FILE: abstractfile.c
function freadWrapper (line 10) | size_t freadWrapper(AbstractFile* file, void* data, size_t len) {
function fwriteWrapper (line 14) | size_t fwriteWrapper(AbstractFile* file, const void* data, size_t len) {
function fseekWrapper (line 18) | int fseekWrapper(AbstractFile* file, off_t offset) {
function off_t (line 22) | off_t ftellWrapper(AbstractFile* file) {
function fcloseWrapper (line 26) | void fcloseWrapper(AbstractFile* file) {
function off_t (line 31) | off_t fileGetLength(AbstractFile* file) {
function AbstractFile (line 45) | AbstractFile* createAbstractFileFromFile(FILE* file) {
function dummyRead (line 64) | size_t dummyRead(AbstractFile* file, void* data, size_t len) {
function dummyWrite (line 68) | size_t dummyWrite(AbstractFile* file, const void* data, size_t len) {
function dummySeek (line 73) | int dummySeek(AbstractFile* file, off_t offset) {
function off_t (line 78) | off_t dummyTell(AbstractFile* file) {
function dummyClose (line 82) | void dummyClose(AbstractFile* file) {
function AbstractFile (line 86) | AbstractFile* createAbstractFileFromDummy() {
function memRead (line 100) | size_t memRead(AbstractFile* file, void* data, size_t len) {
function memWrite (line 110) | size_t memWrite(AbstractFile* file, const void* data, size_t len) {
function memSeek (line 123) | int memSeek(AbstractFile* file, off_t offset) {
function off_t (line 129) | off_t memTell(AbstractFile* file) {
function off_t (line 134) | off_t memGetLength(AbstractFile* file) {
function memClose (line 139) | void memClose(AbstractFile* file) {
function AbstractFile (line 144) | AbstractFile* createAbstractFileFromMemory(void** buffer, size_t size) {
function abstractFilePrint (line 165) | void abstractFilePrint(AbstractFile* file, const char* format, ...) {
function absFileRead (line 177) | int absFileRead(io_func* io, off_t location, size_t size, void *buffer) {
function absFileWrite (line 188) | int absFileWrite(io_func* io, off_t location, size_t size, void *buffer) {
function closeAbsFile (line 199) | void closeAbsFile(io_func* io) {
function io_func (line 207) | io_func* IOFuncFromAbstractFile(AbstractFile* file) {
function memFileRead (line 219) | size_t memFileRead(AbstractFile* file, void* data, size_t len) {
function memFileWrite (line 226) | size_t memFileWrite(AbstractFile* file, const void* data, size_t len) {
function memFileSeek (line 244) | int memFileSeek(AbstractFile* file, off_t offset) {
function off_t (line 250) | off_t memFileTell(AbstractFile* file) {
function off_t (line 255) | off_t memFileGetLength(AbstractFile* file) {
function memFileClose (line 260) | void memFileClose(AbstractFile* file) {
function AbstractFile (line 265) | AbstractFile* createAbstractFileFromMemoryFile(void** buffer, size_t* si...
function AbstractFile (line 290) | AbstractFile* createAbstractFileFromMemoryFileBuffer(void** buffer, size...
FILE: abstractfile.h
type AbstractFile (line 7) | typedef struct AbstractFile AbstractFile;
type AbstractFile2 (line 8) | typedef struct AbstractFile2 AbstractFile2;
type off_t (line 13) | typedef off_t (*TellFunc)(AbstractFile* file);
type off_t (line 15) | typedef off_t (*GetLengthFunc)(AbstractFile* file);
type AbstractFileType (line 18) | typedef enum AbstractFileType {
type AbstractFile (line 30) | struct AbstractFile {
type AbstractFile2 (line 41) | struct AbstractFile2 {
type MemWrapperInfo (line 47) | typedef struct {
type MemFileWrapperInfo (line 53) | typedef struct {
FILE: abstractfilewinleg.c
function freadWrapper (line 10) | size_t freadWrapper(AbstractFile* file, void* data, size_t len) {
function fwriteWrapper (line 14) | size_t fwriteWrapper(AbstractFile* file, const void* data, size_t len) {
function fseekWrapper (line 18) | int fseekWrapper(AbstractFile* file, off_t offset) {
function off_t (line 22) | off_t ftellWrapper(AbstractFile* file) {
function fcloseWrapper (line 26) | void fcloseWrapper(AbstractFile* file) {
function off_t (line 31) | off_t fileGetLength(AbstractFile* file) {
function AbstractFile (line 45) | AbstractFile* createAbstractFileFromFile(FILE* file) {
function dummyRead (line 64) | size_t dummyRead(AbstractFile* file, void* data, size_t len) {
function dummyWrite (line 68) | size_t dummyWrite(AbstractFile* file, const void* data, size_t len) {
function dummySeek (line 73) | int dummySeek(AbstractFile* file, off_t offset) {
function off_t (line 78) | off_t dummyTell(AbstractFile* file) {
function dummyClose (line 82) | void dummyClose(AbstractFile* file) {
function AbstractFile (line 86) | AbstractFile* createAbstractFileFromDummy() {
function memRead (line 100) | size_t memRead(AbstractFile* file, void* data, size_t len) {
function memWrite (line 110) | size_t memWrite(AbstractFile* file, const void* data, size_t len) {
function memSeek (line 123) | int memSeek(AbstractFile* file, off_t offset) {
function off_t (line 129) | off_t memTell(AbstractFile* file) {
function off_t (line 134) | off_t memGetLength(AbstractFile* file) {
function memClose (line 139) | void memClose(AbstractFile* file) {
function AbstractFile (line 144) | AbstractFile* createAbstractFileFromMemory(void** buffer, size_t size) {
function abstractFilePrint (line 165) | void abstractFilePrint(AbstractFile* file, const char* format, ...) {
function absFileRead (line 177) | int absFileRead(io_func* io, off_t location, size_t size, void *buffer) {
function absFileWrite (line 188) | int absFileWrite(io_func* io, off_t location, size_t size, void *buffer) {
function closeAbsFile (line 199) | void closeAbsFile(io_func* io) {
function io_func (line 207) | io_func* IOFuncFromAbstractFile(AbstractFile* file) {
function memFileRead (line 219) | size_t memFileRead(AbstractFile* file, void* data, size_t len) {
function memFileWrite (line 226) | size_t memFileWrite(AbstractFile* file, const void* data, size_t len) {
function memFileSeek (line 244) | int memFileSeek(AbstractFile* file, off_t offset) {
function off_t (line 250) | off_t memFileTell(AbstractFile* file) {
function off_t (line 255) | off_t memFileGetLength(AbstractFile* file) {
function memFileClose (line 260) | void memFileClose(AbstractFile* file) {
function AbstractFile (line 265) | AbstractFile* createAbstractFileFromMemoryFile(void** buffer, size_t* si...
function AbstractFile (line 290) | AbstractFile* createAbstractFileFromMemoryFileBuffer(void** buffer, size...
FILE: common.h
function flipEndian (line 27) | static inline void flipEndian(unsigned char* x, int length) {
function flipEndianLE (line 42) | static inline void flipEndianLE(unsigned char* x, int length) {
function hexToBytes (line 57) | static inline void hexToBytes(const char* hex, uint8_t** buffer, size_t*...
function hexToInts (line 69) | static inline void hexToInts(const char* hex, unsigned int** buffer, siz...
type io_func_struct (line 79) | struct io_func_struct
type io_func_struct (line 81) | struct io_func_struct
type io_func_struct (line 82) | struct io_func_struct
type io_func_struct (line 83) | struct io_func_struct
type io_func (line 85) | typedef struct io_func_struct {
type AbstractFile (line 92) | struct AbstractFile
type AbstractFile (line 95) | struct AbstractFile
FILE: gui-gtk/zgui.c
function jailbreak (line 6) | static void
function activation (line 17) | static void
function unlock (line 28) | static void
function erase (line 39) | static void
function downgradebl (line 48) | static void
function debugboot (line 57) | static void
function exitrecovery (line 66) | static void
function enterdfu (line 75) | static void
function jailbreak_and_activation (line 84) | static void
function jailbreak_activation_unlock (line 94) | static void
function kill_ziphone (line 104) | static void
function activate (line 114) | static void
function main (line 190) | int main (int argc,char **argv)
FILE: gui-mac/ZiPhoneWindowController.h
function interface (line 7) | interface ZiPhoneWindowController : NSWindowController {
FILE: libibooter.cpp
type ibooter (line 16) | namespace ibooter
type usb_device (line 38) | struct usb_device
type usb_bus (line 40) | struct usb_bus
type usb_device (line 42) | struct usb_device
function ERR_CODE (line 54) | ERR_CODE CIBootConn::Connect()
function ERR_CODE (line 87) | ERR_CODE CIBootConn::Disconnect()
function ERR_CODE (line 98) | ERR_CODE CIBootConn::GetResponse(const char *&ppBuffer)
function ERR_CODE (line 145) | ERR_CODE CIBootConn::SendFile(AbstractFile* sf, unsigned long lLoadAddr)
function ERR_CODE (line 178) | ERR_CODE CIBootConn::GetFile(const char *szFile, unsigned long lLoadAd...
function ERR_CODE (line 211) | ERR_CODE CIBootConn::WriteFile(char *pBuffer, int &nLength)
function ERR_CODE (line 221) | ERR_CODE CIBootConn::ReadFile(char *pBuffer, int &nLength)
function ERR_CODE (line 231) | ERR_CODE CIBootConn::ReadControl(SMessage *pCtrl)
function ERR_CODE (line 239) | ERR_CODE CIBootConn::WriteControl(SMessage *pCtrl)
function ERR_CODE (line 247) | ERR_CODE CIBootConn::SendControl(SMessage *pSend, SMessage *pRcv)
function ERR_CODE (line 261) | ERR_CODE CIBootConn::RequestInitial(SMessage *pSend, SMessage *pRcv)
function ERR_CODE (line 271) | ERR_CODE CIBootConn::RequestSendCommand(SMessage *pSend, SMessage *pRc...
function ERR_CODE (line 281) | ERR_CODE CIBootConn::RequestSendFile(SMessage *pSend, SMessage *pRcv, ...
function ERR_CODE (line 291) | ERR_CODE CIBootConn::RequestReadFile(SMessage *pSend, SMessage *pRcv, ...
function ERR_CODE (line 301) | ERR_CODE CIBootConn::RequestDumpBuffer(SMessage *pSend, SMessage *pRcv)
function ERR_CODE (line 311) | ERR_CODE CIBootConn::SendCommand(const char *pCmd)
function ERR_CODE (line 329) | ERR_CODE CIBootConn::WriteSerial(char *pBuffer, int &nLength)
function ERR_CODE (line 339) | ERR_CODE CIBootConn::ReadSerial(char *pBuffer, int &nLength)
FILE: libibooter.h
function namespace (line 8) | namespace ibooter
FILE: ziphone.cpp
function testbyteorder (line 31) | void testbyteorder() {
function banner (line 37) | void banner() {
function basic_usage (line 55) | void basic_usage() {
function advanced_usage (line 66) | void advanced_usage() {
function connected (line 84) | void connected() {
function disconnected (line 106) | void disconnected() {
function original_args (line 111) | void original_args() {
function reset_wifi_mac_address (line 116) | void reset_wifi_mac_address() {
function save (line 121) | void save() {
function exit_recovery (line 125) | void exit_recovery() {
function verbose_args (line 134) | void verbose_args() {
function ramdisk_hack (line 142) | void ramdisk_hack() {
function enter_dfu (line 160) | void enter_dfu() {
function jailbreak (line 169) | void jailbreak() {
function activate (line 173) | void activate() {
function downgrade_baseband_bootloader (line 177) | void downgrade_baseband_bootloader() {
function unlock (line 181) | void unlock() {
function erase_baseband (line 185) | void erase_baseband() {
function change_wifi_mac_address (line 189) | void change_wifi_mac_address() {
function change_imei (line 194) | void change_imei() {
function main (line 199) | int main(int argc, char *argv[])
Condensed preview — 66 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,540K chars).
[
{
"path": "Makefile.freebsd",
"chars": 578,
"preview": "#ZiPhone FreeBSD make \r\n\r\nCC=g++8\r\n\r\nCFLAGS=-g\r\nINC=-I$(SRCDIR)\r\n\r\nSRCDIR=src\r\nOBJDIR=build\r\n\r\nLDFLAGS=-lusb\r\n\r\nOBJS=zip"
},
{
"path": "Makefile.haiku",
"chars": 674,
"preview": "#ZiPhone Haiku Make\n\nCC=/bin/x86/g++\n\nCFLAGS=-g \nINC=-I$(SRCDIR) -I/system/non-packaged/include\n\nSRCDIR=src\nOBJDIR=build"
},
{
"path": "Makefile.linux",
"chars": 562,
"preview": "#ZiPhone Linux make \r\n\r\nCC=g++\r\n\r\nCFLAGS=-g\r\nINC=-I$(SRCDIR)\r\n\r\nSRCDIR=src\r\nOBJDIR=build\r\n\r\nLDFLAGS=-lusb\r\n\r\nOBJS=ziphon"
},
{
"path": "Makefile.macintel32",
"chars": 744,
"preview": "#ZiPhone Mac Intel i386 make \r\n\r\nCC=g++\r\n\r\nCFLAGS=-g -arch i386 -isysroot /Developer/SDKs/MacOSX10.4u.sdk -mmacosx-versi"
},
{
"path": "Makefile.macintel64",
"chars": 744,
"preview": "#ZiPhone Mac Intel x86_64 make \r\n\r\nCC=g++\r\n\r\nCFLAGS=-g -arch x86_64 -isysroot /Developer/SDKs/MacOSX10.5.sdk -mmacosx-ve"
},
{
"path": "Makefile.macppc",
"chars": 702,
"preview": "#ZiPhone Mac PPC make \r\n\r\nCC=g++\r\n\r\nCFLAGS=-g -arch ppc -isysroot /Developer/SDKs/MacOSX10.4u.sdk -mmacosx-version-min=1"
},
{
"path": "Makefile.win",
"chars": 562,
"preview": "#ZiPhone Windows 98 SE, Windows 2000, Windows ME, Windows XP 32 bit make for use with Dev-Cpp 4.9.9.2\r\n#Before executing"
},
{
"path": "abstractfile.c",
"chars": 8157,
"preview": "#include <stdlib.h>\n#include <stdio.h>\n#include <string.h>\n#include <stdarg.h>\n#include <stdint.h>\n\n#include \"abstractfi"
},
{
"path": "abstractfile.h",
"chars": 1905,
"preview": "#ifndef ABSTRACTFILE_H\n#define ABSTRACTFILE_H\n\n#include \"common.h\"\n#include <stdint.h>\n\ntypedef struct AbstractFile Abst"
},
{
"path": "abstractfilewinleg.c",
"chars": 8169,
"preview": "#include <stdlib.h>\n#include <stdio.h>\n#include <string.h>\n#include <stdarg.h>\n#include <stdint.h>\n\n#include \"abstractfi"
},
{
"path": "common.h",
"chars": 2488,
"preview": "#ifndef COMMON_H\n#define COMMON_H\n\n#include <stdio.h>\n#include <stdlib.h>\n#include <stdint.h>\n#include <string.h>\n#inclu"
},
{
"path": "docs/license.txt",
"chars": 18090,
"preview": " GNU GENERAL PUBLIC LICENSE\n Version 2, June 1991\n\n Copyright (C) 1989, 1991 Fre"
},
{
"path": "docs/plugin-howto.txt",
"chars": 2577,
"preview": " ::::::::: ::::::::::: ::::::::: ::: ::: :::::::: :::: ::: :::::::::: \r\n :+: :+: :+: "
},
{
"path": "docs/readme.txt",
"chars": 14978,
"preview": "ZiPhone version 3.6 (12th of September 2019)\n==========================================================================="
},
{
"path": "docs/troubleshooting.txt",
"chars": 9749,
"preview": "Troubleshooting ZiPhone\n Or:\nIT BROKE WHAT DO I DO?!?!??!?!?!?!?!?!\n\n=================================================="
},
{
"path": "gui-gtk/zgui.c",
"chars": 5790,
"preview": "#include <gtk/gtk.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n\nstatic void\njailbreak (GtkWidget *widge"
},
{
"path": "gui-mac/English.lproj/MainMenu.nib/designable.nib",
"chars": 272745,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<archive type=\"com.apple.InterfaceBuilder3.Cocoa.XIB\" version=\"7.01\">\n\t<data>\n\t\t<"
},
{
"path": "gui-mac/English.lproj/MainMenu.strings",
"chars": 8410,
"preview": "/**\n * GUI Localization for MainMenu.nib.\n *\n * Many of the strings in this file are stock OS X menu items. Please loc"
},
{
"path": "gui-mac/English.lproj/donate.html",
"chars": 3066,
"preview": "<html>\n<head>\n<title>Donate to ZiPhone Development</title>\n</head>\n<body>\n<p>If you'd like to donate to support continue"
},
{
"path": "gui-mac/French.lproj/MainMenu.nib/designable.nib",
"chars": 276309,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<archive type=\"com.apple.InterfaceBuilder3.Cocoa.XIB\" version=\"7.01\">\n\t<data>\n\t\t<"
},
{
"path": "gui-mac/French.lproj/donate.html",
"chars": 3066,
"preview": "<html>\n<head>\n<title>Donner pour le développement de ZiPhone</title>\n</head>\n<body>\n<p>Si vous désirez faire un geste, c"
},
{
"path": "gui-mac/Info.plist",
"chars": 858,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "gui-mac/Italian.lproj/MainMenu.nib/designable.nib",
"chars": 273612,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<archive type=\"com.apple.InterfaceBuilder3.Cocoa.XIB\" version=\"7.01\">\n\t<data>\n\t\t<"
},
{
"path": "gui-mac/Spanish.lproj/MainMenu.nib/designable.nib",
"chars": 275145,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<archive type=\"com.apple.InterfaceBuilder3.Cocoa.XIB\" version=\"7.01\">\n\t<data>\n\t\t<"
},
{
"path": "gui-mac/ZiPhoneOSX.xcodeproj/lex.mode1v3",
"chars": 38804,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "gui-mac/ZiPhoneOSX.xcodeproj/lex.pbxuser",
"chars": 2211,
"preview": "// !$*UTF8*$!\n{\n\t29B97313FDCFA39411CA2CEA /* Project object */ = {\n\t\tactiveArchitecture = i386;\n\t\tactiveBuildConfigurati"
},
{
"path": "gui-mac/ZiPhoneOSX.xcodeproj/project.pbxproj",
"chars": 18525,
"preview": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 44;\n\tobjects = {\n\n/* Begin PBXBuildFile section *"
},
{
"path": "gui-mac/ZiPhoneOSX_Prefix.pch",
"chars": 151,
"preview": "//\n// Prefix header for all source files of the 'ZiPhoneOSX' target in the 'ZiPhoneOSX' project\n//\n\n#ifdef __OBJC__\n "
},
{
"path": "gui-mac/ZiPhoneWindowController.h",
"chars": 3159,
"preview": "//\n// ZiPhoneWindowController.h\n// ZiPhoneOSX\n\n#import <Cocoa/Cocoa.h>\n\n@interface ZiPhoneWindowController : NSWindowC"
},
{
"path": "gui-mac/ZiPhoneWindowController.m",
"chars": 24061,
"preview": "//\n// ZiPhoneWindowController.m\n// ZiPhoneOSX\n//\n\n#import \"ZiPhoneWindowController.h\"\n\n#define is_digit(c) ((unsigned)"
},
{
"path": "gui-mac/getversion.sh",
"chars": 123,
"preview": "#!/bin/bash\n\nsed -n '/<key>CFBundleVersion<\\/key>/{n;p;}' < Info.plist | awk -F '>' '{print $2}' | awk -F '<' '{print $1"
},
{
"path": "gui-mac/i18n-supported.list",
"chars": 141,
"preview": "# The last line of this file must contain a space separated list of languages supported by the i18n routines.\nEnglish It"
},
{
"path": "gui-mac/i18n.sh",
"chars": 1849,
"preview": "#!/bin/bash\n#\n# Helper script for i18n.\n#\n\nI18N_BASE=Base.lproj\nLANG_LIST=i18n-supported.list\n\nif [ \"$1\" == \"extract\" ] "
},
{
"path": "gui-mac/main.m",
"chars": 154,
"preview": "//\n// main.m\n// ZiPhoneOSX\n//\n\n#import <Cocoa/Cocoa.h>\n\nint main(int argc, char *argv[])\n{\n return NSApplicationMai"
},
{
"path": "gui-mac/readme.txt",
"chars": 12260,
"preview": "ZiPhone version 3.4c (21st of May 2019)\n================================================================================"
},
{
"path": "install-freebsd.txt",
"chars": 371,
"preview": "Build ZiPhone CLI on FreeBSD\n\nMake sure pkg is installed. Then execute the command \"pkg install gmake gcc\".\n\nThen cd int"
},
{
"path": "install-haiku.txt",
"chars": 239,
"preview": "Build ZiPhone CLI on Haiku \n\n-Tested on Haiku R1/beta 1 32 bit\n\nYou need to install libusb_compat_x86 and libusb_x86 fro"
},
{
"path": "install-linux.txt",
"chars": 328,
"preview": "Build ZiPhone CLI on FreeBSD\n\nExecute the command:\n\napt-get install build-essential libusb-dev bzip2\n\nThen cd into the d"
},
{
"path": "install-mac.txt",
"chars": 2950,
"preview": "Build ZiPhone Mac\n\n--Requirements--\n-Mac OS X 10.4 or newer (10.5 is required for the Build Everything method and for bu"
},
{
"path": "install-windows.txt",
"chars": 741,
"preview": "Build ZiPhone CLI on Windows\n\nMake sure libusb-win32 filter-bin version 0.1.2.2 is installed when targeting Windows 98 S"
},
{
"path": "libibooter.cpp",
"chars": 7121,
"preview": "/*\n\n\t<insert message here/>\n\n*/\n#include \"libibooter.h\"\n#include <cstring>\n#include <cstdio>\n#include \"abstractfile.h\"\n#"
},
{
"path": "libibooter.h",
"chars": 3715,
"preview": "#ifndef LIBIBOOTER_H\n#define LIBIBOOTER_H\n\n#include <usb.h>\n#include <string>\n#include \"abstractfile.h\"\n\nnamespace iboot"
},
{
"path": "linuxgui.sh",
"chars": 674,
"preview": "#!/bin/sh\n\necho \"Building Linux GUI...\"\ncd gtk-gui\ngcc zgui.c -o zgui $(pkg-config --cflags --libs gtk+-3.0)\necho \"Build"
},
{
"path": "macgui.sh",
"chars": 916,
"preview": "#!/bin/sh\n\nif [ -d \"ziphone-3.6-cli-mac\" ]; then\n echo \"Found directory of ZiPhone Mac CLI\"\nelse \n echo \"You need "
},
{
"path": "macrelease.sh",
"chars": 5382,
"preview": "#!/bin/bash\n\nif [ -d \"libusb-mac\" ]; then\n echo \"Found directory of libusb-mac\"\nelse \n echo \"You need to be in the"
},
{
"path": "ziphone.cpp",
"chars": 10064,
"preview": "#include \"libibooter.h\"\n#include <unistd.h>\n#include <iostream>\n#include <vector>\n#include <string>\n\n#ifdef WIN32\n#inclu"
}
]
// ... and 20 more files (download for full content)
About this extraction
This page contains the full source code of the Zibri/ZiPhone GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 66 files (1.3 MB), approximately 522.7k tokens, and a symbol index with 144 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.