home *** CD-ROM | disk | FTP | other *** search
- comment $
-
- Simple Log Program Example
- ìπ Ñú« ¡áσαÑ¡, ß ¼«¿¼ á¡ú½¿⌐߬¿¼...
- Åα¿¼Ñα »α«ßΓ«⌐ »α«úαá¼¼δ óÑñÑ¡¿∩ »α«Γ«¬«½á.
- éÑαß¿∩ 1.0beta.
- ÇóΓ«α ñá¡¡«ú« »α¿¼Ñαá: Alexey Kulentsov, 2:5020/449.14
-
- ä½∩ ¬«¡Σ¿úπα¿α«óá¡¿∩ ΓαÑíπÑΓß∩ «Γñѽ∞¡á∩ ¿¡ßΓá½½∩µ¿«¡¡á∩ »α«úαá¼¼á.
-
- $
-
- ;DEBUG equ 1
-
- StackSize = 512
-
- .model tiny
- ;
- ; é¡¿¼á¡¿Ñ! àß½¿ σ«Γ¿ΓÑ »π߬áΓ∞ φΓπ »α«úαá¼¼π ¡á "Å«¿ß¬Ñ" ¿½¿ XT,
- ; πíÑα¿ΓÑ .286 ¿ »ÑαÑñѽá⌐ΓÑ óßÑ ¡á 8086 áßßѼíÑα. èα«¼Ñ Γ«ú«, ¿ß»«½∞ºπÑΓß∩
- ; Σπ¡¬µ¿∩ DOS 6Ch, ¬«Γ«αá∩ »«∩ó¿½áß∞, ¡áτ¿¡á∩ c MS-DOS 4.0.
- ;
- .286
-
- .code
- org 100h
-
-
- ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- ; ¥Γ« »α«µÑñπαá, ¿¡ßΓá½½¿απεΘá∩ αѺ¿ñÑ¡Γ¡πε τáßΓ∞
- ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
- Work proc far
- ;
- ; ìáñ»¿ßÑ⌐ ¡¿¬á¬¿σ ¡Ñ óδó«ñ¿¼, τΓ«íδ ¡Ñ ¡Ñαó¿α«óáΓ∞ »áµ¿Ñ¡Γ«ó
- ;
- ;mov dx,offset sHeader
- ;mov ah,9
- ;int 21h
- ;
- ; Åα«óÑα∩Ѽ ßÑí∩ ó »á¼∩Γ¿.
- ; ExecParamRec ¡Ñ ñ«½ªÑ¡ ¿ß»«½∞º«óáΓ∞ß∩, »«φΓ«¼π ¡Ñ ßΓáó¿¼
- ;
- mov ax,4B00h
- mov dx,offset FakeName+2
- int 21h
- jc SetStack
- jmp QuitInstall
- ;
- ; æΓáó¿¼ ßΓѬ ¡á Γ«τ¬π DataEnd+StackSize
- ;
- SetStack:
- mov bx,StackSize+offset BlockBegin
- add bx,NewBlockSize
- mov sp,bx
- ;
- ; ÄíαѺáѼ ßó«⌐ í½«¬ »á¼∩Γ¿ »« ßá¼δ⌐ ßΓѬ
- ;
- add bx,15
- shr bx,4
- mov ah,4Ah
- int 21h
- ;
- ; çừ¼¿¡áѼ UMB link state
- ;
- mov ax,5802h
- int 21h
- push ax
- ;
- ; æΓáó¿¼ link=on
- ;
- mov al,3
- mov bx,1
- int 21h
- ;
- ; çừ¼¿¡áѼ ßΓαáΓÑú¿ε αáß»αÑñѽѡ¿∩ »á¼∩Γ¿
- ;
- mov ax,5800h
- int 21h
- push ax
- ;
- ; îÑ¡∩Ѽ ßΓαáΓÑú¿ε ¡á ¡πª¡πε ¡á¼, ñóá αáºá,
- ; »«Γ«¼π τΓ« ½Ñ¡∞ »α«óÑα∩Γ∞ óÑαß¿ε, ¼á½« ½¿ τΓ«..
- ;
- mov ax,5801h
- mov bx,2
- push ax
- int 21h
- pop ax
- mov bl,82h
- int 21h
- ;
- ; ÅδΓáѼß∩ óδñѽ¿Γ∞ »á¼∩Γ∞..
- ;
- mov ah,48h
- mov bx,NewBlockSize
- add bx,15
- shr bx,4
- int 21h
- ;
- ; ìÑ »«½πτ¿½«ß∞- ó«ßßΓá¡áó½¿óáѼ ßΓpáΓÑú¿ε ¿ ¼«½τá óδσ«ñ¿¼.
- ;
- jc RestoreStrat
-
- BlockExist:
- push ax
- push ax
- ;
- ; üÑαѼ ßΓáαδ⌐ óÑ¬Γ«α 21
- ;
- mov ax,3521h
- int 21h
- mov word ptr OldInt_21,bx
- mov word ptr OldInt_21+2,es
- ;
- ; è«»¿απѼ αѺ¿ñÑ¡Γ ¡á Ñú« αáí«τÑÑ ¼ÑßΓ«
- ;
- pop es
- xor di,di
- mov si,offset BlockBegin
- cld
- mov cx,NewBlockSize
- rep movsb
- ;
- ; æΓáó¿¼ Ñú« ó½áñѽ∞µÑ¼ DOS
- ;
- mov ax,es
- dec ax
- mov ds,ax
- mov word ptr ds:[1],8
- ;
- ; æΓáó¿¼ ¡á ¡Ñú« óÑ¬Γ«α
- ;
- pop ds
- mov ax,2521h
- mov dx,offset NewInt_21-offset BlockBegin
- int 21h
- ;
- ; é«ßßΓá¡áó½¿óáѼ ßΓáαπε ßΓpáΓÑú¿ε
- ;
- RestoreStrat:
- push cs
- pop ds
- pop bx
- mov ax,5801h
- int 21h
- ;
- ; é«ßßΓá¡áó½¿óáѼ link ¬á¬ í佫
- ;
- mov ax,5803h
- pop bx
- int 21h
- ;
- ; Å¿ΦѼ ß««íΘÑ¡¿Ñ « ßó«Ñ¼ ßΓáαΓÑ
- ;
- mov ax,4B00h
- mov dx,offset sStartMessage
- int 21h
- ;
- ; ôßÑ ú«Γ«ó«, ÿÑΣ!
- ; (éδσ«ñ¿¼ ó DOS)
- ;
- QuitInstall:
- mov ax,4C00h
- int 21h
- Work endp
-
- ;
- ; ¥Γ« ñá¡¡δÑ ñ½∩ óδΦÑπ¬áºá¡¡«⌐ »α«µÑñπαδ,
- ; ¬«Γ«αδÑ ¡¿¬«ú«, ¬α«¼Ñ ¡ÑÑ, ¡Ñ ¿¡ΓÑαÑßπεΓ.
- ;
- ;sHeader db 'Åα¿¼Ñα ºáΘ¿Γ¡«⌐ »α«úαá¼¼δ. (ß) 1997 ǽѬßÑ⌐ èπ½Ñ¡µ«ó.',13,10,'$'
- sStartMessage db '<------------ Started at this time -------------',0
-
- ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- ; ¥Γ« ¡áτ¿¡áÑΓß∩ αѺ¿ñÑ¡Γ¡á∩ τáßΓ∞, ¬«Γ«απε ¼δ
- ; ¬«»¿απѼ ó óδñѽѡ¡δ⌐ í½«¬
- ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
- even
- BlockBegin label unknown
-
- ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- ; ¥Γ« ¡áΦ «íαáí«Γτ¿¬ Int 21h
- ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
- NewInt_21 proc
- ;
- ; ¥Γ« «ñ¡á ¿º Σπ¡¬µ¿⌐ ºá»π߬á?
- ;
- cmp ah,4Bh
- jne Pass_21 ; àß½¿ ¡ÑΓ- »p«»π߬áѼ
- ;
- ; ê¡ΓÑαΣÑ⌐ß: "ƒ πªÑ ºáúαπªÑ¡".
- ;
- pusha
- mov di,dx
- FakeName:
- cmp word ptr ds:[di],'>:'
- jne Work_21
- ; ¥Γ« ¼δ Γ¿»á π¼πñα¿½¿ß∞ ºá»πßΓ¿Γ∞ »α«úαá¼¼π ß ':>'.
- popa
- clc
- retf 2
-
- Work_21:
- push ds es
- ;
- ; æ¡áτá½á »α«óÑα¬á ¡á ¡Ñ «Γ«íαáªáѼδÑ ó ½«úÑ ¿¼Ñ¡á
- ;
- call CheckName
- jnz QuitWork
- ;
- ; Å¿ΦѼ ó »α«Γ«¬«½
- ;
- call WriteToLog
- QuitWork:
- pop es ds
- popa
- Pass_21:
- db 0EAh ; Jmp far
- OldInt_21 dd ?
- NewInt_21 endp
-
- ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- ; Åp«µÑñπpá CheckName - »α«µÑñπαá, »α«óÑα∩εΘá∩, ¡áσ«ñ¿Γß∩ ½¿ ¿¼∩ óδºδóáѼ«⌐
- ; »α«úαá¼¼δ ó ß»¿ß½Ñ ºáαѺÑαó¿α«óá¡¡δσ ¿¼Ñ¡.
- ; éσ«ñ¡δÑ »áαá¼ÑΓαδ: DS:DI - π¬áºáΓѽ∞ ¡á ¿¼∩ »α«úαá¼¼δ
- ; éδσ«ñ¡δÑ »áαá¼ÑΓαδ: ßΓáó¿Γß∩ ZF, Ñß½¿ ¿¼∩ ¡Ñ ¡áΦ½¿, ¿¡áτÑ ßíαáßδóáÑΓß∩.
- ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
- CheckName proc
- push di ds es
- push ds
- pop es
- ;
- ; êΘѼ ¬«¡Ñµ ¿¼Ñ¡¿ »« ºáóÑαΦáεΘѼπ ¡π½ε. æΓáó¿¼ ¡á ¡Ñú« es:di.
- ;
- cld
- xor ax,ax
- mov cx,not 0
- repne scasb
- dec di
- ;
- ; æΓáó¿¼ ds:si ¡á ¡áτὫ ¡áΦÑ⌐ Γáí½¿µδ ¿¼Ñ¡.
- ;
- push cs
- pop ds
- mov si,offset NamesTable-offset BlockBegin
- ;
- ; ìáτὫ µ¿¬½á »« ¿¼Ñ¡á¼.
- ; üÑαѼ ñ½¿¡π «τÑαÑñ¡«ú« ¿¼Ñ¡¿, Ñß½¿ 0, Γ« óδσ«ñ¿¼ ¿º µ¿¬½á.
- ;
- NextName:
- lodsb
- mov cx,ax
- jcxz QuitNameLoop ; ê¼Ñ¡á ¬«¡τ¿½¿ß∞- AX=0
- ;
- ; ÄΓßΓπ»áѼ «Γ ¬«¡µá »α«óÑα∩Ѽ«⌐ ßΓ᫬¿ ¡á ¡πª¡«Ñ αáßßΓ«∩¡¿Ñ ¿ ßαáó¡¿óáѼ
- ; ÑÑ σó«ßΓ ß ¿¼Ñ¡Ñ¼. àß½¿ πß»ÑΦ¡«- óδσ«ñ¿¼ ¿º µ¿¬½á.
- ;
- sub di,ax
- repe cmpsb
- jcxz QuitNameLoop ; ìáΦ½¿ ¿¼∩- AX!=0
- ;
- ; é ß½πτáÑ ¡Ñπß»ÑΦ¡«ú« ßαáó¡Ñ¡¿∩ ñó¿úáѼ π¬áºáΓѽ¿ ñ« ¬«¡µá, ú«Γ«ó∩ ΓѼ ßá¼δ¼
- ; ßαáó¡Ñ¡¿Ñ ß« ß½ÑñπεΘ¿¼ ¿¼Ñ¡Ñ¼.
- ;
- add si,cx
- add di,cx
- ;
- ; 諡ѵ µ¿¬½á ßαáó¡Ñ¡¿∩
- ;
- jmp NextName
-
- ;
- ; 諡ѵ »α«µÑñπαδ.
- ;
- QuitNameLoop:
- test ax,ax
- pop es ds di
- ret
- CheckName endp
-
- ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- ; Åp«µÑñπpá WriteToLog «Γ¬αδóáÑΓ Σá⌐½ »α«Γ«¬«½á ¿ »¿ΦÑΓ Γπñá ¿¼∩ ºá»π߬áѼ«⌐
- ; »α«úαá¼¼δ ¿ óαѼ∩.
- ; éσ«ñ¡δÑ »áαá¼ÑΓαδ: DS:DI - π¬áºáΓѽ∞ ¡á ¿¼∩ »α«úαá¼¼δ
- ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
- WriteToLog proc
- mov bp,ds
- push cs
- pop ds
- ;
- ; öπ¡¬µ¿∩ «Γ¬αδΓ∞/ß«ºñáΓ∞
- ;
- mov ah,6Ch
- ; íπΣÑਧ«óá¡¡δ⌐, íѺ Int 24h, τ¿ΓáΓ∞/»¿ßáΓ∞, ñ«ßΓπ»Ñ¡ óßѼ.
- mov bx,0010000011000010b
- mov cx,00100010b ; áασ¿ó¡δ⌐ ¿ ߬αδΓδ⌐
- mov dx,11h ; ß«ºñáΓ∞ ¿½¿ «Γ¬αδΓ∞, Ñß½¿ ¿¼ÑÑΓß∩
- mov si,cs:[offset LogNameOfs-offset BlockBegin]
- int 21h
- jc QuitLog
- mov bx,ax
- ;
- ; ÅÑαÑñó¿¡π½¿ π¬áºáΓѽ∞ ¡á ¬«¡Ñµ Σá⌐½á
- ;
- mov ax,4202h
- xor cx,cx
- mov dx,cx
- int 21h
- ;
- ; CΣ«α¼¿α«ó὿ ßΓ᫬π ß ñáΓ«⌐ ¿ óαѼѡѼ
- ;
- push di
- call TypeData
- ;
- ; çỿß὿ ÑÑ ó Σá⌐½
- ;
- mov di,offset DaTime-offset BlockBegin
- call WriteString
- pop di
- ;
- ; çỿß὿ Γπñá ¿¼∩
- ;
- mov ds,bp
- call WriteString
- push cs
- pop ds
- mov di,offset sEOL-offset BlockBegin
- call WriteString
- ;
- ; çá¬α뫨 Σá⌐½ ºá ß«í«ε
- ;
- mov ah,3Eh
- int 21h
- QuitLog:
- ret
- sEOL db 13,10,0
- WriteToLog endp
-
- ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- ; Åp«µÑñπpá TypeData Σ«α¼¿απÑΓ ßΓ᫬π ß ΓѬπΘ¿¼¿ ñáΓ«⌐ ¿ óαѼѡѼ
- ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
-
- TypeData proc
- push cs
- pop es
- mov di,offset DaTime-offset BlockBegin
- mov ah,2Ah
- int 21h
- mov al,dl
- call TypeAL
- mov al,dh
- call TypeAL
- mov ah,2Ch
- int 21h
- mov al,ch
- call TypeAL
- mov al,cl
- call TypeAL
- mov al,dh
- call TypeAL
- ret
- DaTime db 'xx/xx xx:xx:xx File Run: ',0
- TypeData endp
-
- ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- ; Åp«µÑñπpá TypeAL Σ«α¼¿απÑΓ ñÑß∩Γ¿τ¡«Ñ ¡á»¿ßá¡¿Ñ τ¿ß½á ó AL (ñ« 99).
- ; éσ«ñ¡δÑ »áαá¼ÑΓαδ: ES:DI - ô¬áºáΓѽ∞ ¡á ßΓ᫬π
- ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
-
- TypeAL proc
- xor ah,ah
- aam
- xchg ah,al
- add ax,3030h
- stosw
- inc di
- ret
- TypeAL endp
-
- ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- ; Åp«µÑñπpá WriteString »¿ΦÑΓ ó Σá⌐½ C-ßΓ᫬π.
- ; éσ«ñ¡δÑ »áαá¼ÑΓαδ:
- ; BX - file handle
- ; DS:DI - pointer to zero-terminated string
- ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
- WriteString proc
- push ds
- pop es
- mov ax,4000h
- mov cx,not 0
- mov dx,di
- repne scasb
- neg cx
- sub cx,2
- int 21h
- ret
- WriteString endp
-
- ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- ; Ç φΓ« ñá¡¡δÑ, ¬«Γ«αδÑ íπñπΓ ºá»«½¡Ñ¡δ ¿¡ßΓá½½∩µ¿«¡¡«⌐ »α«úαá¼¼«⌐.
- ; ƒ ßΓαѼ¿½ß∩ ¼¿¡¿¼¿º¿α«óáΓ∞ ¿σ ¬«½¿τÑßΓó«,
- ; σ«Γ∩ φΓ« πß½«ª¡∩ÑΓ ¡ÑαѺ¿ñÑ¡Γ¡πε τáßΓ∞ »α«úαá¼¼δ.
- ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
- LogNameOfs dw offset LogName-offset BlockBegin
- NewBlockSize dw offset EndLabel-offset BlockBegin
-
- ; Æáí½¿µá ¿¼Ñ¡ - íπñÑΓ ºá»«½¡Ñ¡á ¿¡ßΓá½½∩Γ«α«¼
- NamesTable label unknown
- ifdef DEBUG
- db 11,'COMMAND.COM'
- db 6,'VC.COM'
- db 8,'hiew.exe'
- db 11,'arcview.exe'
- db 0
- endif
- LogName label byte
- ifdef DEBUG
- db 'c:\log.tmp',0
- endif
- ; --- ìá φΓ«¼ αѺ¿ñÑ¡Γ¡á∩ τáßΓ∞ ºáóÑαΦáÑΓß∩.
- EndLabel label unknown
- ;
- ; Å«ß½Ñ Γáí½¿µ ÑΘÑ ¿ñÑΓ ßΓѬ, óδñѽ∩Ѽδ⌐ ¡ÑαѺ¿ñÑ¡Γ¡«⌐ τáßΓ∞ε.
- ;
-
- end Work
-