diff --git a/kernel/trunk/boot/shutdown.inc b/kernel/trunk/boot/shutdown.inc index 87b39c79e..3e3679caf 100644 --- a/kernel/trunk/boot/shutdown.inc +++ b/kernel/trunk/boot/shutdown.inc @@ -71,13 +71,11 @@ temp_3456: nbw: in al,0x60 - call pause_key cmp al,6 jae nbw mov bl,al nbw2: in al,0x60 - call pause_key cmp al,bl je nbw2 cmp al,240 ;ax,240 @@ -93,13 +91,7 @@ nbw31: nbw32: - dec ax ; 1 = write floppy - js nbw - jnz no_floppy_write - call floppy_write - jmp temp_3456 ;nbw -no_floppy_write: - + dec ax dec ax ; 2 = power off jnz no_apm_off call APM_PowerOff @@ -113,74 +105,10 @@ no_apm_off: mov word[0x0072],0x1234 jmp 0xF000:0xFFF0 -pause_key: - mov cx,100 -pause_key_1: - loop pause_key_1 - ret rdelay: ret -floppy_write: ; write diskette image to physical floppy - - cmp [flm],byte 1 - je fwwritedone - mov [flm],byte 1 - - xor ax, ax ; reset drive - xor dx, dx - int 0x13 - - mov cx,0x0001 ; startcyl,startsector - xor dx, dx ; starthead,drive - mov ax, 80*2 ; read no of sect - -fwwrites: - push ax - - ; move 1mb+ -> 0:a000 - - pusha - mov si, fwmovedesc - mov cx,256*18 - mov ah,0x87 - push ds - pop es - int 0x15 - add dword [fwmovedesc+0x12], 512*18 - popa - - xor si,si - mov es,si -fwnewwrite: - mov bx,0xa000 ; es:bx -> data area - mov ax,0x0300+18 ; read, no of sectors to read - int 0x13 - - test ah, ah - jz fwgoodwrite - - inc si - cmp si,10 - jnz fwnewwrite - -; can't access diskette - return - pop ax - ret - -fwgoodwrite: - inc dh - cmp dh,2 - jnz fwbb2 - mov dh,0 - inc ch -fwbb2: - pop ax - dec ax - jnz fwwrites - ret - APM_PowerOff: mov ax, 5304h xor bx, bx @@ -220,7 +148,6 @@ APM_PowerOff: mov cx,3 int 0x15 ;!!!!!!!!!!!!!!!!!!!!!!!! -fwwritedone: ret restart_kernel: diff --git a/kernel/trunk/detect/ps2mouse.inc b/kernel/trunk/detect/ps2mouse.inc deleted file mode 100644 index e6d90537f..000000000 --- a/kernel/trunk/detect/ps2mouse.inc +++ /dev/null @@ -1,141 +0,0 @@ -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; ;; -;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;; -;; Distributed under terms of the GNU General Public License ;; -;; ;; -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - -$Revision$ - - -MouseSearch_PS2: - jmp MouseSearch_PS2_begin - -mouse_error equ MouseSearch_PS2_begin.error - - kb_cmd_c: - call kb_cmd - jmp check_kbd - - kb_write_c: - call kb_write - jmp check_kbd - - kb_read_c: - call kb_read - ;jmp check_kbd - - check_kbd: - cmp ah, 1 - je mouse_error - ret - -uglobal - mouse_cmd_byte db 0 - mouse_nr_tries db 0 - mouse_nr_resends db 0 - - mouse_error_esp dd 0 -endg - - - mouse_cmd: - mov [mouse_cmd_byte], al - mov [mouse_nr_resends], 5 - .resend: - mov bl, 0xd4 - call kb_cmd_c - mov al, [mouse_cmd_byte] - call kb_write_c - - call mouse_read - - cmp al, 0xFA ; ack - jne .noack - ret - .noack: - cmp al, 0xFE ; resend - jne .noresend - dec [mouse_nr_resends] - jnz .resend - .noresend: - jmp mouse_error - - - mouse_read: - mov [mouse_nr_tries], 100 - .repeat: - call kb_read - cmp ah, 1 - jne .fin - mov esi, 10 - call delay_ms - dec [mouse_nr_tries] - jnz .repeat - jmp mouse_error - .fin: - ret - - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -MouseSearch_PS2_begin: - pushad - - mov [mouse_error_esp], esp - - mov bl, 0xAD ; disable keyboard interface - call kb_cmd_c - - mov bl, 0xA8 ; enable mouse interface - call kb_cmd_c - - mov al, 0xFF ; reset - call mouse_cmd - - ; now the mouse is in Reset Mode - ; get the Basic Assurance Test completion code - call mouse_read - cmp al, 0xAA - jne .error ; dead mouse - - ; get device ID - call mouse_read - cmp al, 0x00 - jne .error ; unknown device - - ; reset completed successfully - - ; enable mouse interrupt - IRQ12 - mov bl, 0x20 ; read command byte - call kb_cmd_c - call kb_read_c - or al, 10b - push eax - mov bl, 0x60 ; write command byte - call kb_cmd_c - pop eax - call kb_write_c - - mov al, 0xF4 ; enable data reporting - call mouse_cmd - - mov [ps2_mouse_detected], 1 - mov bl, 0xAE ; enable keyboard interface - call kb_cmd - - mov esi, boot_setmouse_type - call boot_log - - jmp .finish - - -.error: - mov esp, [mouse_error_esp] ; clear stack frame - mov [ps2_mouse_detected], 0 - mov bl, 0xA7 ; disable mouse interface - call kb_cmd - mov bl, 0xAE ; enable keyboard interface - call kb_cmd - -.finish: - popad diff --git a/kernel/trunk/docs/sysfuncr.txt b/kernel/trunk/docs/sysfuncr.txt index 99089e4f2..77fd9b76a 100644 --- a/kernel/trunk/docs/sysfuncr.txt +++ b/kernel/trunk/docs/sysfuncr.txt @@ -631,20 +631,6 @@ * 맮 ⮩ 㭪樨 ਫ ⨢ 頥 ⢥ " ". -====================================================================== -======== 㭪 18, 㭪 1 - ࠡ ⥬. ======== -====================================================================== -ࠬ: - * eax = 18 - 㭪樨 - * ebx = 1 - 㭪樨 -頥 祭: - * ᥣ 頥 eax = 0 ਧ ᯥ -砭: - * ᫥ 蠣  室 ⥬, 饥 - ॠ樨 짮⥫. - * ⠪ 㭪 9, 襭 ࠡ ⥬ ࠬ஬, - ⮡ ஢ 롮 室. - ====================================================================== ==== 㭪 18, 㭪 2 - /⮪ ᫮. ==== ====================================================================== @@ -748,15 +734,12 @@ * 㭪 頥 祭 ====================================================================== -= 㭪 18, 㭪 9 - 襭 ࠡ ⥬ ࠬ஬. = +======= 㭪 18, 㭪 9 - 襭 ࠡ ⥬ ======== ====================================================================== ࠬ: * eax = 18 - 㭪樨 * ebx = 9 - 㭪樨 * ecx = ࠬ: - * 1 = ᫥ 蠣 襭 ࠡ ࠭ ࠬ - ᪥, ᫥ 祣 뢥 室 - 짮⥫ 쭥訥 ⢨ * 2 = 몫 * 3 = १㧨 * 4 = १ 䠩 kernel.mnt ࠬ᪥ @@ -768,12 +751,6 @@ 맮, ᫥ . * ᯮ짮 㭪 1, ⮡ ᫥ 蠣 襭 ࠡ 짮⥫ ᠬ 蠫, 㦭. - * ४ ᯮ짮 祭 ecx=1 (⮡ ࠧࠦ - 짮⥫ 譨 ᠬ); ࠭ ࠬ ᪥ - 㭪樥 16 ( ᪠ 筥, - ᪥ ), ࠡ 室 㦥 - 㯮⮩ 㭪樥 1. - ====================================================================== ======== 㭪 18, 㭪 10 - ᢥ ਫ. ======= ====================================================================== diff --git a/kernel/trunk/docs/sysfuncs.txt b/kernel/trunk/docs/sysfuncs.txt index 1bf3c2cb5..eb3c09dfe 100644 --- a/kernel/trunk/docs/sysfuncs.txt +++ b/kernel/trunk/docs/sysfuncs.txt @@ -623,20 +623,6 @@ Remarks: * The call of this function by an application with inactive window will return answer "buffer is empty". -====================================================================== -============ Function 18, subfunction 1 - system shutdown. =========== -====================================================================== -Parameters: - * eax = 18 - function number - * ebx = 1 - subfunction number -Returned value: - * function always return eax = 0 as tag of success -Remarks: - * On the last step menu of exit from the system appears and waits - response of the user. - * See also subfunction 9, system shutdown with - the parameter to force the choice in the exit menu. - ====================================================================== = Function 18, subfunction 2 - terminate process/thread by the slot. = ====================================================================== @@ -744,15 +730,12 @@ Returned value: * function does not return value ====================================================================== -== Function 18, subfunction 9 - system shutdown with the parameter. == +============ Function 18, subfunction 9 - system shutdown. =========== ====================================================================== Parameters: * eax = 18 - function number * ebx = 9 - subfunction number * ecx = parameter: - * 1 = on the last step of shutdown save ramdisk on a floppy and - then show the exit menu and request further operations - from the user * 2 = turn off computer * 3 = reboot computer * 4 = restart the kernel from the file 'kernel.mnt' on ramdisk @@ -765,12 +748,6 @@ Remarks: changed in future versions of the kernel. * It is possible to use subfunction 1, that on the last step the user makes choice himself. - * It is not recommended to use value ecx=1 (to not irritate the user - with excessive questions); to save ramdisk on a floppy use - function 16 (which admits specification, on which floppy to - write), and to shutdown with the exit menu use already mentioned - subfunction 1. - ====================================================================== ===== Function 18, subfunction 10 - minimize application window. ===== ====================================================================== diff --git a/kernel/trunk/hid/m_ps2.inc b/kernel/trunk/hid/m_ps2.inc deleted file mode 100644 index 5210b7a62..000000000 --- a/kernel/trunk/hid/m_ps2.inc +++ /dev/null @@ -1,176 +0,0 @@ -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; ;; -;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;; -;; Distributed under terms of the GNU General Public License ;; -;; ;; -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - -$Revision$ - - -; -MouseByteNumber_2 DB 0 -; , -FirstByte_2 DB 0 -SecondByte_2 DB 0 -ThirdByte_2 DB 0 -timer_ticks_ps2 dd 0 - -;************************************** -;* PS/2 * -;************************************** -check_mouse_data_ps2: - cmp [ps2_mouse_detected],0 - je @@EndMouseInterrupt_2 - call Wait8042BufferEmpty ; - in AL,0x60 ; - -; - cmp [MouseByteNumber_2],0 - je @@SaveFirstByte - cmp [MouseByteNumber_2],1 - je @@SaveSecondByte - cmp [MouseByteNumber_2],2 - je @@SaveThirdByte - jmp @@Error_2 -; -@@SaveFirstByte: - test AL,1000b ; ? - jz @@Error_2 ; - mov [FirstByte_2],AL - inc [MouseByteNumber_2] - jmp @@EndMouseInterrupt_2 -; -@@SaveSecondByte: - mov [SecondByte_2],AL - inc [MouseByteNumber_2] - jmp @@EndMouseInterrupt_2 -; -@@SaveThirdByte: - mov [ThirdByte_2],AL - mov [MouseByteNumber_2],0 -; ( ) -; - mov al,[FirstByte_2] ;[0xfb01] - and eax,3 - mov [BTN_DOWN],al - mov [mouse_active],1 -; X- - ; AX X - mov AH,0 ; AH - mov AL,[FirstByte_2] - test AL,10000b - jz @@M0 - mov AH,0FFh - ; AL -@@M0: - mov AL,[SecondByte_2] - call mouse_acceleration_ps2 - ; - ; X - add AX,[MOUSE_X] ;[XCoordinate] - jns @@M1 - xor eax, eax - jmp @@M2 -@@M1: - cmp AX,[ScreenWidth] ;ScreenLength - jl @@M2 - mov AX,[ScreenWidth] ;ScreenLength-1 -@@M2: - mov [MOUSE_X],AX ;[XCoordinate] - -; Y- - ; AX Y - mov AH,0 ; AH - mov AL,[FirstByte_2] - test AL,100000b - jz @@M3 - mov AH,0FFh - ; AL -@@M3: - mov AL,[ThirdByte_2] - call mouse_acceleration_ps2 - ; - ; Y (Y- PS/2 - ; ) - neg AX - add AX,[MOUSE_Y] ;[YCoordinate] - jns @@M4 - xor eax, eax - jmp @@M5 -@@M4: - cmp AX,[ScreenHeight] ;ScreenHeigth - jl @@M5 - mov AX,[ScreenHeight] ;ScreenHeigth-1 -@@M5: - mov [MOUSE_Y],AX ;[YCoordinate] - -; - mov eax,[timer_ticks] - mov [timer_ticks_ps2],eax - jmp @@EndMouseInterrupt_2 - -; -@@Error_2: - mov [MouseByteNumber_2],0 -; -@@EndMouseInterrupt_2: - call ready_for_next_irq_1 - ret - -mouse_acceleration_ps2: - push eax - mov eax,[timer_ticks] - sub eax,[timer_ticks_ps2] - cmp eax,[mouse_delay] - pop eax - ja @f - imul ax,[mouse_speed_factor] -@@: - ret -;*********************************************** -;* I8042 * -;* : * -;* ZF - , * -;* ZF - -. * -;*********************************************** -Wait8042BufferEmpty: -; push CX -; mov CX,0FFFFh ; -;@@kb: -; in AL,64h ; -; test AL,10b ; i8042 ? -; loopnz @@kb ; , -; pop CX - push ecx - xor ecx,ecx - @@: - in al,64h - test al,00000010b - loopnz @b - pop ecx - ; - ; ZF - - ret ; - -;*************************************** -;* * -;*************************************** -WaitMouseData: -; push CX -; mov CX,0FFFFh ; -;@@mouse: -; in AL,64h ; -; test AL,100000b ; ? -; loopz @@mouse ; , -; pop CX - push ecx - mov ECX,0FFFFh - @@: - in al,64h - test al,100000b - loopz @b - pop ecx - ; - ; ZF - - ret - diff --git a/kernel/trunk/kernel.asm b/kernel/trunk/kernel.asm index 8d1accabf..f024cc23c 100644 --- a/kernel/trunk/kernel.asm +++ b/kernel/trunk/kernel.asm @@ -2026,7 +2026,7 @@ sys_end: iglobal align 4 sys_system_table: - dd sysfn_shutdown ; 1 = system shutdown + dd 0 ; 1 = system shutdown dd sysfn_terminate ; 2 = terminate thread dd sysfn_activate ; 3 = activate window dd sysfn_getidletime ; 4 = get idle time @@ -2034,7 +2034,7 @@ sys_system_table: dd sysfn_saveramdisk ; 6 = save ramdisk dd sysfn_getactive ; 7 = get active window dd sysfn_sound_flag ; 8 = get/set sound_flag - dd sysfn_shutdown_param ; 9 = shutdown with parameter + dd sysfn_shutdown ; 9 = shutdown with parameter dd sysfn_minimize ; 10 = minimize window dd sysfn_getdiskinfo ; 11 = get disk subsystem info dd sysfn_lastkey ; 12 = get last pressed key @@ -2060,14 +2060,19 @@ sys_system: @@: ret -sysfn_shutdown: ; 18.1 = BOOT - mov [BOOT_VAR+0x9030],byte 0 - for_shutdown_parameter: + +sysfn_shutdown: ; 18.9 = system shutdown + cmp ecx,1 + jl exit_for_anyone + cmp ecx,4 + jg exit_for_anyone + mov [BOOT_VAR+0x9030],cl mov eax,[TASK_COUNT] mov [SYS_SHUTDOWN],al mov [shutdown_processes],eax and dword [esp+32], 0 + exit_for_anyone: ret uglobal shutdown_processes: dd 0x0 @@ -2179,17 +2184,8 @@ sysfn_sound_flag: ; 18.8 = get/set sound_flag nosoundflag: ret -sysfn_shutdown_param: ; 18.9 = system shutdown with param - cmp ecx,1 - jl exit_for_anyone - cmp ecx,4 - jg exit_for_anyone - mov [BOOT_VAR+0x9030],cl - jmp for_shutdown_parameter - sysfn_minimize: ; 18.10 = minimize window mov [window_minimize],1 - exit_for_anyone: ret sysfn_getdiskinfo: ; 18.11 = get disk info table diff --git a/programs/system/cpu/trunk/cpu.asm b/programs/system/cpu/trunk/cpu.asm index b9517e341..098d38a70 100644 --- a/programs/system/cpu/trunk/cpu.asm +++ b/programs/system/cpu/trunk/cpu.asm @@ -120,8 +120,8 @@ still_end: jmp still_end reboot: - mov eax,18 - mov ebx,1 + mov eax,70 + mov ebx,sys_reboot int 0x40 ;close program if we going to reboot @@ -582,6 +582,14 @@ file_start: dd 7 start_application: db '/sys/LAUNCHER',0 times 60 db 32 +sys_reboot: + dd 7 + dd 0 + dd 0 + dd 0 + dd 0 + db '/sys/end',0 + if lang eq de text: db ' NAME/BEENDEN PID CPU-LAST % ' diff --git a/programs/system/end/trunk/back.raw b/programs/system/end/trunk/back.raw new file mode 100644 index 000000000..906f55b27 --- /dev/null +++ b/programs/system/end/trunk/back.raw @@ -0,0 +1 @@ +h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,ǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlǬlͲsͲsͲsͲsͲsͲsͲsͲsͲsͲsͲsͲsͲsͲsͲsͲsͲsͲsͲsͲsͲsͲsͲsͲsͲsͲsͲsͲsͲsͲsͲsͲsͲsͲsͲsͲsͲsͲsͲsͲsͲsͲsͲsͲsͲsͲsͲsͲsͲsͲsͲsͲsͲsͲsͲsͲsͲsͲsͲsͲsͲsͲsͲsͲsͲsͲsͲsȨ`Bh,h,Ǭl<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<ğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğM{7h,h,Ǭl<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<ğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğM{7h,h,Ǭl<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<ğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğM{7h,h,Ǭl<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<ğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğM{7h,h,Ǭl<<<<<<<<<<<<<<<<<<<<<<<<<<<:97555557:<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<ğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğM{7h,h,Ǭl<<<<<<<<<<<<<<<<<<<<<<<<:9;DGWaikmgUB9<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<=?@Rhz~oQ=<<<<===<<<<<<<<>@JdruqcA<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<ğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğM{7h,h,Ǭl<<<<<<<<<<<<<<<<:999;::9@QerŧŠл3=<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<=?Ff­[>=?IY\[[S><<<=?JoŰ˶î^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<ğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğM{7h,h,Ǭl<<<<<<<<<<<<<<<8GUX[[QDRj{Ҿæc//=PoñǴ5=<<<<<<<<<<<<<<<<::<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<===<<>BbôȨƥͼEAZŸʾʾʾƹ\<<>AQŭӼ¦hBX­S<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<ğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğM{7h,h,Ǭl<<<<<<<<<<<<<<?BTv\JGȱzƹY<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<ğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğM{7h,h,Ǭl<<<<<<<<<<<<<<:EwƮxͷʿɳȳH6;=<<<<<<<<<<<<::=UdxX8<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<::NjӼ}8<<<<<<<<:9:8:C8;:=?;<<<<<<<<<<<<<<<=@īDz˾ξ˹ɹìx[akпվzA<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<ğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğM{7h,h,Ǭl<<<<<<<<<<<<<<<9523Inٽ^<>;668=>=<<<<<<<<<<<<<<<:Jq3/59:8;<<<<;:RdfgxbSQlv@:<<<<<<<<<<<::8=Bθп̸˷īpZMǯyƯyĪnİĶȼƲѻʵPSȱ|Rɲ\@><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<ğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğM{7h,h,Ǭl<<<<<<<<<<<<<<<<==<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<ğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğM{7h,h,Ǭl<<<<<<<<<<<<<<<<<:Jp®Į}8<8;DEA9:;<<<<<<<<<<<<<<;RŴԺe;=;BƴȻn9<<=GȺĪ3A^ȳƱĭM6<<<<<<<<<<<:[ǶĸWDŬqһßMB@>=<<<>?@@??B¨jƹNA@@A@??==?Eѻӽd=<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<ğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğM{7h,h,Ǭl<<<<<<<<<<<<<<<<<8Só0;<^lr~o]:;<<<<<<<<<<<<=5п2=<;OѷW;<<9iӸI>?:7458><<<<<<<<<<=7«BBIлǻLA><<<<<<<<<<<>==<<<<=BĪnű{=<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<ğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğM{7h,h,Ǭl<<<<<<<<<<<<<<<<:=mķ˽3Iiìʸm8<<<<<<<<<<<<<8f˺3<<=4ֳ:=:<=>=<<<<<<<<<<<<>3±ͻhABt¦B><<<<<<<<<<<<<=EŮx­|=<<<<<<<<<<<<<<<<<<<<<<<<>0;@BƳA=<<<<<<<<<<<<<<<<<<<<<=@Xķt=<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<ğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğM{7h,h,Ǭl<<<<<<<<<<<<<<<:8eȳN|¹K:=:4brR9<<<<<<<<<<<<7>=<<9wx8<<=7z8=<<<<<<<<<<<<<<<<<>4˼L9?Bu@<<<<<<<<<<<<<<==?CŧпB<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<ğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğM{7h,h,Ǭl<<<<<<<<<<<<<<:8Koͻ̹Eɸ?8;<==;:;;:::<<<<<<<<8ö˾5::9;<<<<::::::<<<<:<5B;8;?CǿtA=<<<<<<<<<<<<<<@[N><<=?H`lnkQBén̽g<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<ğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğM{7h,h,Ǭl<<<<<<<<<<<<<9;OjŰ}ȺİN8=<<<<<<;9BM:6::<<<<<8]Ƿпʻn9;8AJNJ:=<<=;ϾɺR6JYZG9<98>E9:JE9;;9;FLQ@<<<<<<<<<<<<<<<@êqA=<>?NƸƲɶɶķODϹdzB<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<ğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğM{7h,h,Ǭl<<<<<<<<<<:8;Cau̺пȶ¶ɺQ8;<<<<<<;<]y|ys8;<<<;<˹Ϳ3DPf>;<:9TͼôErŹƺ4F_jzYaP6LVun8<>Bͷ?<<<<<<<<<<<<<=AŮ{Ͽx?=>Bm˸ͼŭvwCͻ˺P<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<ğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğM{7h,h,Ǭl<<<<<<<<<9BaxϾνȶ7:;<<<<<<:=eij̺̽Ϳr=:<<:TɽϽοȼ9±ϿѿͻįO<<9IϾȳ;ϾϿͼëPɿǷͽŸʿοϾ^Ĺ˺Ͼμƽ4==A;˿@<<<<<<<<<<<<>CIJпuH¡˺Cµ`<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<ğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğM{7h,h,Ǭl<<<<<<<<<:f²ʷìyƴͻͼͼοĮ2:=<<<<<<9@kȶįbǸ˹ɹ6;=8ƴ̹Ϳy9³ųQɷͻ̺űP<;:˻ͻͽ˾tξ˺̼¯>_gıʺͻνȴ˿ʼŻʻxtξ̺˺4=@į«ĬvɭͼqCϽʾc<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<ğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğM{7h,h,Ǭl<<<<<<<<ʶʹʾ>964Uɹ̹˽7<=C˾ʷ̻̾3cͿȶL:<3|̼˸ͿxE|22̼ʹ˽R8<<>BʾP=<<<<<<<<<<<>BɼI??WνпǭʾʹŦǸKD̵ȼ[<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<ğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğM{7h,h,Ǭl<<<<<<<<<;x̻ǷòxǺʹȵʹȶɹŹ78;<<<<<6ȴȴ˿C9Z8kõZ;;XȽȴʻ7>>8tǵȴŴ0;;7aʼɴ˻76ʹȶ3>=8ôʷɵij6;968=;ȴʻx7<<<@Rͺͼo?>?ǴͼɸʷɶȴϾŰ_BeĶQ<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<ğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğM{7h,h,Ǭl<<<<<<<<<8`ƺȺƵ˾Ǵʹ˾ƵȴȴȶźQ9;<<<<8~ɷıʼB<:7BǿG=8lƲʼD;<;?Ųȸ7=;FƵǶʻ9==>9]ʹƲɻO:;<<<=AĮ{ͼ@><<<<<<<=?BuƱϿŶD==?οaNƭϿdzǵSBEƪüF<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<ğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğM{7h,h,Ǭl<<<<<<<<<:741ƲŲŶHñƲdzƴȿZ<;<<<:OƻŲǹY9;:ts6;5˿IJɾ6=;6mŲŵ>IM6hɹưȷd99qǶŰɾ:;;GȴƱǹC;<<<;<ƳƳ¯8QB:<<===>?Bfǹ˹ͼɻL><=?;ƹlBBBBBA@Bưȵe><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<ğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğM{7h,h,Ǭl<<<<<<<<<<<:MrŴo6<ðŰîŲk6=<<;6xƴö@8mĸ2KGUîų7=;L¸įIJQ2uǴîǹG8?ĸƳų´6>8ƴ°ƴ{7<<<<7rIJİƴXm[:<<<=@Ʋͼ­ķdKEMZmĴdz˹­H><<FϿϿɶǺǺɽƲ˹˹ųB?><<<<>Gȸ­ǺĶ{ƶͼ˹E=<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<ğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğM{7h,h,Ǭl<<<<<<<<<<:Bq6=:98sŬí6:<<;:hĺ±Ⱦe68|ɿôȾn5;<<:XǾȿJ9ʿ˿ɽ´Żĺ5;=7ĸ6=<<<<6ʿ89<<<<<?U˹ȵdzƲɷͼͼͼɷʼsC=<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<ğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğM{7h,h,Ǭl<<<<<<<<<<8N}˿ǼT:<<<;Gɽɾ<;<<;8BVKMA8<:63>88<<<<;8WnwD9<ǿB:?M\J7;<<8bfajE9<<<<<:?Bjǵʸ˺˺˹̿ŲhF?=<<<<<<<<<=?Aeɸȴ˹˹˹îN@?=<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<ğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğM{7h,h,Ǭl<<<<<<<<<:9bǼ5<<<<:9WɽȾǽƻP8=<<<<;<<<=<<=>>==<<<<<;:868:<9517:><=;<;<<<:::8:<<<<<<<<<:66:;<<<<<<<<<<<>?@LhfNA??><<<<<<<<<<<<<>?@DV]ZH?>=<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<ğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğM{7h,h,Ǭl<<<<<<<<<8Syƹǻe:<<<<<:8SƹɼȻE8;<<<<<<:8777:;<<<<<<<<<<<<<<<===<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<=>>?>=<<<<<<<<<<<<<<<<<<=>>>>=<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<ğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğM{7h,h,Ǭl<<<<<<<<:dppmSG8<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<ğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğM{7h,h,Ǭl<<<<<<:96[źt7<<<<<<<<<<;7Fĸķ{8:;<<:W7<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<ğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğM{7h,h,Ǭl<<<<<:D]g8<<<<<<<<<<<<=;=mĹW9:=;;rU96<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<ğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğM{7h,h,Ǭl<<<<<:S~::<<<<<<<<<<<<<<:8DsµD6963B\zd7<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<ğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğM{7h,h,Ǭl<<<<<:9Ul]6;<<<<<<<<<<<<<<<<:;8JklZ[~M:<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<ğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğM{7h,h,Ǭl<<<<<<:989;<<<<<<<<<<<<<<<<<<<:;7JU58<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<ğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğM{7h,h,Ǭl<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<::9;AJNL?89;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<ğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğM{7h,h,Ǭl<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<==>>>==<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<Ĩfй““““““““““““““““““““““““““““““““““““““““““““““““““йĨf<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<ğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğM{7h,h,Ǭl<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<ζ~““““““““““““““““““““““““““““““““““““““““““““““““““““““ζ~<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<ğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğM{7h,h,Ǭl<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<Ĩf““““““““““““““““““““““““““““““““““““““““““““““““““““““““Ĩf<<<<<<<<<<<<<<<<<<<<<<<<<<<<<ğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğM{7h,h,Ǭl<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<ũg““““““““““““““““““““““““““““““““““““““““““““““““““““““““““ũg<<<<<<<<<<<<<<<<<<<<<<<<<<<<ğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğM{7h,h,Ǭl<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<㪿ϿͽɺǶôϾμ͹̶˴ʲɮȬǪƧşÜp~{obۼ“““““““““““““““““““н,As?Q““““““““““““““““““}eYkܜٙۚܛܛܜܜݝݝݞݝܝܞܞܟܠݡݢޢޣޣޣޤݤݤݤޤɓF}HɜɜɜɜɜɜɜɜɜɜɜɜɜɜɜɜɜɜğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğM{7h,h,Ǭl<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<“““““““““““““““““““?{icۼ“““““““““““““““““““н-Aiy}};P““““““““““““““““““~eQe}ڐ|א|؏|ِ}ّ~ّ~ڒڒ~ّڒޝ⪜㬘⨏ࠇݙەܗܘۙۙۚܚܛۛۛۜzȋG~HɜɜɜɜɜɜɜɜɜɜɜɜɜɜɜɜɜɜğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğM{7h,h,Ǭl<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<“““““““““““““““““““@|agݼ“““““““““““““““““““н/C^oqrstp}xrn|n|rxp}srqs:N““““““““““““““““““~eNar׈pԆqՆqՇrևr׈s׈pևs؊ȑz؎y؍{ُ|ِ|ِ}ّ~ّؒؓؓpƂGIɜɜɜɜɜɜɜɜɜɜɜɜɜɜɜɜɜɜğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğM{7h,h,Ǭl<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<“““““““““““““““““““@|Ziݼ“““““““““““““““““““н0CWffugvhviwbqhxl{brbrl{hxbrhvgvftfu8M““““““““““““““““““eH[e}d}e}e|f}e|e|lԁs؈oօqׇqևsՈsֈtՉuՊu։i|HJɜɜɜɜɜɜɜɜɜɜɜɜɜɜɜɜɜɜğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğM{7h,h,Ǭl<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<“““““““““““““““““““A}Tjݼ“““““““““““““““““““н2FM_[k\l]m_nUf_ocsWhWhcs_pUf^m\lZkYj9L““““““““““““““““““fBWYrXrYsWplԄoԄdz綯kӀe|hhiӀjҀj҂kӁ`tIJɜɜɜɜɜɜɜɜɜɜɜɜɜɜɜɜɜɜğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğM{7h,h,Ǭl<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<“““““““““““““““““““CN}x||{yyxxxxxtlݼ“““““““““““““““““““н5GHZObQcUeWgN`Yj]nRcRc]nYiM_UeRdPbN`9M““““““““““““““““““g>SOjPjPkKfzٍVnYr]ue|ޚܘ\u\v]v^w_w`x`xVmJKɜɜɜɜɜɜɜɜɜɜɜɜɜɜɜɜɜɜğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğM{7h,h,Ǭl<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<“““““““““““““““““““DH~}~}{|{wmbfijlmskfjher#pݼ“““““““““““““““““““н8LATGYHZL^NbK\UfYjM_M_YjTeH[L^I[HZDV:N““““““““““““““““““gU>SG]۲Sh@YB[C[C[AZ;Udx٬F^D[E]E\F\E]BWMNɜɜɜɜɜɜɜɜɜɜɜɜɜɜɜɜɜɜğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğM{7h,h,Ǭl<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<“““““““““““““““““““L4}QQPPPOK^2~?;85:~ྷ“““““““““““““““““““ѾIZOaUf[k`qfukzn}sqlzgvbr]mVgQbK]““““““““““““““““““k6H:M;Oྸ“““““““““““““““““““ѾL^RdXi_netkzpuxtsl{gvaqZjTeO`““““““““““““““““““k6H7J7K:N:N7Lsϔ͠0HT?U?U?V=Tm~UhT=T@S;PNPɜɜɜɜɜɜɜɜɜɜɜɜɜɜɜɜɜɜğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğM{7h,h,Ǭl<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<“““““““““““““““““““Q-{<;=@@A=\u7><82~C⿸“““““““““““““““““““ѾN^Uf\lbqiwo}t{}||{xpkyds]mVhPb““““““““““““““““““l9K9M:NU>U=T=T˚s:N;:xohaJFHD?8I࿸“““““““““““““““““““ѾM`Uf\lcrjxp~u}~}xqlzet^nWhQb““““““““““““““““““n:L;PT@V@WUj۵BZ>WAY@X?X>Vʖ̣6L9N:N9M8K7IQTɜɜɜɜɜɜɜɜɜɜɜɜɜɜɜɜɜɜğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğM{7h,h,Ǭl<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<“““““““““““““““““““X,w0|48>@EGEPDFLNOPQSQLHB=K“““““““““““““““““““ѾM`Uf\lcrjyqv|}yrl{eu^nWhQb““““““““““““““““““nT@VAXBY@X޷ԚA\AZC\B[@WqȄ=T;P:O9M8K7IQUɜɜɜɜɜɜɜɜɜɜɜɜɜɜɜɜɜɜğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğM{7h,h,Ǭl<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<“““““““““““““““““““Z2}8:?FHNRUOUU_cbcb^]WTNFBM“““““““““““““““““““ѾN^Uf[lbqixp~u}}xqkzdt]mVgPa““““““““““““““““““o=Q>S@VBYC[D]B\XoԕSlB^=ZA\ӘYk>S=S;P:M9KSVɜɜɜɜɜɜɜɜɜɜɜɜɜɜɜɜɜɜğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğM{7h,h,Ǭl<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<“““““““““““““““““““^6;?DLNUW[]Zb`ihhjheb]XPICP“““““““““““““““““““ѾK^SdYj`pgvn|sz}~{vo~ixbr[lUfO`““““““““““““““““““o=P?T@WD]E]F_G`C^g|ѯ湱ۨG`5P8Q=U@V?U=R;O:MUXɜɜɜɜɜɜɜɜɜɜɜɜɜɜɜɜɜɜğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğM{7h,h,Ǭl<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<“““““““““““““““““““_8?CIOT[_affdkjgnmmnlge^ZSJDO“““““““““““““““““““ѾN_QbWh^metkyqvz}~{wsm{gv`pYiSdL_““““““““““““““““““o=P?TAXD[F^G`HbIcD^byߩ\tE_G`E^C[BZAW?T=Q;NUYɜɜɜɜɜɜɜɜɜɜɜɜɜɜɜɜɜɜğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğM{7h,h,Ǭl<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<“““““““““““““““““““a=BGMSZ^bfkmnljjnqrpqplifa[RJDO“““““““““““““““““““ҿgqPaVg\ldtjyp}uy|zvskzfu^pXhRcWe““““““““““““““““““o=Q?TBWD\F^GaIcJdJeGdXry֎QiIbHbHaG`E^D\CY@U>SFJPV]bgilnpqrrrttqrqnif_YSHCP“““““““““““““““““““^hGYI[J[K]M^M^N_O`P`OaOaPaPaPaPaPaOaOaP`P`N_N_N^L]J\J[HZTcŵ“““““““““““““““““““o=P?TAWD[F^G`IcKeLgKfIdLh^wo؅vڍiׁQkFcJgKeJdHbH`F^E]C[AW?S=PV\ɜɜɜɜɜɜɜɜɜɜɜɜɜɜɜɜɜɜğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğM{7h,h,Ǭl<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<“““““““““““““““““““c>GKQW]bhjmqqrttrrrqppnhe^YRHCM““““““““““““““““““““μƶ“““““““““““““““““““oRAVD[F]G`IcJdKfLgLhKgJfIeHeJgJgLfLgKfJeIcHaF^E\C[AW?S>QV\ɜɜɜɜɜɜɜɜɜɜɜɜɜɜɜɜɜɜğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğM{7h,h,Ǭl<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<“““““““““““““““““““d@FLRX_bhjmorqsqqqrqnnlfc\SJA?K““““““““““““““““““““““““““““““““““““““““““rQW\ɜɜɜɜɜɜɜɜɜɜɜɜɜɜɜɜɜɜğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğM{7h,h,Ǭl<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<“““““““““““““““““““d>FKQW^agimopoqoonnjgc`YVOIA8?aȼ“““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““KU8J:NQW\ɜɜɜɜɜɜɜɜɜɜɜɜɜɜɜɜɜɜğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğM{7h,h,Ǭl<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<“““““““““““““““““““c?EJPW[aegkkkigebbb_\ZVOA4*y ro(u䫮“““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““ppbNQ8G5H8L;P?UCYD]G_GaHaHbIcJeKeJeJdIcHaG`E]E\DZAV?S>QW\ɜɜɜɜɜɜɜɜɜɜɜɜɜɜɜɜɜɜğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğM{7h,h,Ǭl<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<“““““““““““““““““““c>CHNSVYZ[^`_]]YXL?2~$uke)sD]x“““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““пƻznk`NQ;I5H7K:O>TAYB[E^F`H_H`F_F^E]DZBX@U>R=PV[ɜɜɜɜɜɜɜɜɜɜɜɜɜɜɜɜɜɜğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğMğM{7h,h,Ǭl<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<“““““““““““““““““““a:=AEIMOPRJ@6*zqgl5wQją¹̾“““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““пƼylh^PS?J4G6I8K;O>S@UAX?U@T?T>Qlang.inc -@fasm end.asm end -@erase lang.inc -@pause \ No newline at end of file diff --git a/programs/system/end/trunk/build_et.bat b/programs/system/end/trunk/build_et.bat deleted file mode 100644 index aaae9b444..000000000 --- a/programs/system/end/trunk/build_et.bat +++ /dev/null @@ -1,5 +0,0 @@ -@erase lang.inc -@echo lang fix et >lang.inc -@fasm end.asm end -@erase lang.inc -@pause \ No newline at end of file diff --git a/programs/system/end/trunk/build_ge.bat b/programs/system/end/trunk/build_ge.bat deleted file mode 100644 index 6f4cce233..000000000 --- a/programs/system/end/trunk/build_ge.bat +++ /dev/null @@ -1,5 +0,0 @@ -@erase lang.inc -@echo lang fix ge >lang.inc -@fasm end.asm end -@erase lang.inc -@pause \ No newline at end of file diff --git a/programs/system/end/trunk/build_ru.bat b/programs/system/end/trunk/build_ru.bat deleted file mode 100644 index 0054df9a7..000000000 --- a/programs/system/end/trunk/build_ru.bat +++ /dev/null @@ -1,5 +0,0 @@ -@erase lang.inc -@echo lang fix ru >lang.inc -@fasm end.asm end -@erase lang.inc -@pause \ No newline at end of file diff --git a/programs/system/end/trunk/end.asm b/programs/system/end/trunk/end.asm index 5cc5a1c5c..35b253104 100644 --- a/programs/system/end/trunk/end.asm +++ b/programs/system/end/trunk/end.asm @@ -4,95 +4,56 @@ ; note that 'mov al,xx' is shorter than 'mov eax,xx' ; and if we know that high 24 bits of eax are zero, we can use 1st form ; the same about ebx,ecx,edx +; +; 15.02.2007 merge old END with new one (fron Veliant & Leency) by Heavyiron -include "lang.inc" include "..\..\..\macros.inc" meos_app_start code -do_draw: - - mov eax,48 - mov ebx,3 - mov ecx,sc - mov edx,sizeof.system_colors - mcall +draw: mov al,12 ; eax=12 - tell os about redraw start - mov bl,1 + mov ebx,1 mcall mov al,14 ; eax=14 - get screen max x & max y mcall - movzx ecx,ax - - shr eax,17 - shl eax,16 - lea ebx,[eax-110*10000h+220] - - shr ecx,1 - shl ecx,16 - sub ecx,50*10000h - 120 + movzx ecx, ax + shr eax, 16 + shr ecx, 1 + shr eax, 1 + sub eax, 157 + sub ecx, 100 + mov ebx, eax + shl ebx, 16 + add ebx, 253 + shl ecx, 16 + add ecx, 154 xor eax,eax ; define and draw window - mov edx,[sc.work] - mov esi,edx - mov edi,edx + mov edx,0x41ffffff mcall - mov edx,0x444444 - mov al,13 - mcall ,18 shl 16+90,29 shl 16+27 - push ebx - mcall ,121 shl 16+90 - xchg ebx,[esp] - mcall ,,63 shl 16+27 - pop ebx - mcall - mcall ,179 shl 16+30,99 shl 16+15 - - xor edx,edx - mov al,8 - inc edx - mcall ,15 shl 16+87,26 shl 16+24,,0xbb0055 - inc edx - mcall ,118 shl 16+87,,,0xaaaa ;cccc - inc edx - mcall ,15 shl 16+87,60 shl 16+24,,0x9900 - inc edx - mcall ,118 shl 16+87,,,0xaaaaaa ;cccccc - inc edx - mcall ,175 shl 16+30,95 shl 16+15,,[sc.work_button] - - mov al,4 ; 0x00000004 = write text - mov ebx,75*65536+10 - mov ecx,[sc.work_text] ; 8b window nro - RR GG BB color - or ecx,0x90000000 - mov edx,label1 ; pointer to text beginning + mov al, 7 + mov ebx, background + mov ecx, 254 shl 16 + 155 + xor edx, edx mcall - mov ebx,15*65536+101 - mov edx,label4 - mcall - - mov ecx,0x90eeeeee ; 8b window nro - RR GG BB color - mov ebx,25*65536+30 - mov edx,label2 ; pointer to text beginning - mcall - - mov ebx,20*65536+64 - mov edx,label3 - mcall - - mov ebx,45*65536+41 - mov edx,label5 - mcall - - mov ebx,40*65536+75 - mov edx,label6 - mcall + + mov al,8 + mcall ,58 shl 16 + 32,59 shl 16 + 34, 1 shl 30 + 1 + inc edx + mcall ,110 shl 16 + 32,54 shl 16 + 32 + inc edx + mcall ,161 shl 16 + 32,59 shl 16 + 34 + inc edx + mcall ,193 shl 16 + 43,125 shl 16 + 16, + inc edx + mcall ,144 shl 16 + 43 mov al,12 ;end of redraw mov ebx,2 @@ -104,7 +65,7 @@ still: mcall dec eax - jz do_draw + jz draw dec eax jnz button key: @@ -126,10 +87,10 @@ still: mcall xchg al,ah dec eax - jz power_off - dec eax jz restart_kernel dec eax + jz power_off + dec eax jz restart dec eax jnz run_rdsave @@ -162,53 +123,7 @@ run_rdsave: jmp still data - -if lang eq ru - label1: - db ' 롮:',0 - label2: - db '몫 ',0 - label3: - db '१ ⬥',0 - label4: - db '࠭ ன',0 - -else if lang eq en - label1: - db ' SELECT:',0 - label2: - db 'POWER OFF KERNEL',0 - label3: - db ' RESTART CANCEL',0 - label4: - db 'Save settings',0 - -else if lang eq et - label1: - db ' VALI:',0 - label2: - db 'LLITA VLJA KERNEL',0 - label3: - db ' RESTART THISTA',0 - label4: - db 'Save settings',0 - -else - label1: - db 'WAEHLEN:',0 - label2: - db ' BEENDEN KERNEL',0 - label3: - db ' NEUSTART ABBRECHEN',0 - label4: - db 'Save settings',0 - -end if - label5: - db '(End) (Home)',0 - label6: - db '(Enter) (Esc)',0 - +background file 'back.raw' rdsave: dd 7 dd 0 @@ -217,6 +132,5 @@ rdsave: dd 0 db '/sys/rdsave',0 udata - sc system_colors meos_app_end