Metropoli BBS
VIEWER: logoff20.pps MODE: TEXT (CP437)
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;:                         Logoff Matrix v2.o                                 ::
;:                             By SecT 96                                     ::
;:                         Last Update 6.03.96                                ::
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;: Compiler Directives
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;$USEFUNCS
 
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;: Declare Procedures
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Declare Procedure Dispselect(INTEGER Selnr)
Declare Procedure Disperase(INTEGER Selnr)
Declare Procedure EraseCursor()
Declare Procedure Entermsg()
Declare Procedure SysOpmsg()
Declare Procedure Dispadd(String path)
Declare Procedure DispDBF()
Declare Procedure DISP()
Declare Procedure Check()
Declare Procedure CenterTxt(String text, Byte y)
Declare Procedure Init()
 
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;: Declare Global Variables
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
String Backlight
String k
String text(20)
String X(5)
String Y(5)
String Color(7)
String Lenght
String Flagged
String tmp
String Conf
String To
String Path
String str(8)
String D_or_F
String param
Int    selnr
 
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;: Main Program
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
BEGIN
 param = GeTToken()
  If (Upper(param) = Upper(Readline(ppepath()+ppename()+".cfg",27))) goto ends
 
 Init()
 
  Let selnr = 1
 
   Startdisp FNS
 
    Check()
 
:Redisp
 
 Cls
  Disp()
   Dispselect(Selnr)
 
 While (1) Do
 
   k = inkey()
    IF (k <> "") Then
 
    SELECT Case  k
 
           Case "DOWN"
             DispErase(Selnr)
               Selnr = Selnr + 1
             If (Selnr = 5) Selnr = 1
               DispSelect(Selnr)
 
          Case "UP"
            DispErase(Selnr)
              Selnr = Selnr - 1
            If (Selnr = 0) Selnr = 4
              DispSelect(Selnr)
 
          Case Chr(13)
 
            If (Selnr = 1) Then
             Entermsg()
              Goto Redisp
 
       Else If (selnr = 2) Then
               SysOpMSG()
              Goto Redisp
 
       Else If (Selnr = 3) Then
            If (D_or_F = "2") Then
               DispDBF()
            Else
               DispAdd(path)      ' Display A Random ADD
            Endif
             Goto Ends
 
       Else If (Selnr = 4) Then
              Break
               Goto Redisp
 
 
            Endif
 
          Case Chr(27)
            Break
   End Select
 
    EndIf
 
 EndWhile
 
Goto Ends1
 
:Ends
KBdSTUFF chr(13)+"G Y" + Chr(13)
if (exist(ppepath()+"runoff.txt")) dispstr "%"+ ppepath()+"runoff.txt"
:ends1
 
END
 
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Procedure Init()
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
If (!Exist(PPEpath()+PPEname()+".pcb")) Then
   Println Color(7)+PPEname()+".pcb Dont exist! Abort@X07"
   End
Endif
If (!Exist(PPEpath()+PPEname()+".cfg")) Then
   Println Color(7)+PPEname()+".cfg Dont exist! Abort@X07"
   End
Endif
 
Let Tmp      = ppepath()+ppename()+".cfg"
 
 Let X(1)     = Readline(tmp,1)
 Let Y(1)     = Readline(tmp,2)
 Let lenght   = Readline(tmp,3)
 Let Color(1) = Readline(tmp,4)
 Let X(2)     = Readline(tmp,5)
 let Y(2)     = Readline(tmp,6)
 Let Y(3)     = Readline(tmp,7)
 Let Y(4)     = Readline(tmp,8)
 Let Conf     = Readline(tmp,9)
 Let To       = Readline(tmp,10)
 Let path     = Readline(tmp,11)
 Let str(1)   = Readline(tmp,12)
 Let str(2)   = Readline(tmp,13)
 Let str(3)   = Readline(tmp,14)
 Let str(4)   = Readline(tmp,15)
 Let str(5)   = Readline(tmp,16)
 Let str(6)   = Readline(tmp,17)
 Let str(7)   = Readline(tmp,18)
 Let str(8)   = Readline(tmp,19)
 Let Color(2) = Readline(tmp,20)
 Let Color(3) = Readline(tmp,21)
 Let Color(4) = Readline(tmp,22)
 Let Color(5) = Readline(tmp,23)
 Let Color(6) = Readline(tmp,24)
 Let Color(7) = Readline(tmp,25)
 Let D_or_F   = Readline(tmp,26)
Endproc
 
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Procedure entermsg()
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
String Tmp
Integer i
 
Text(1) = ""
TexT(2) = ""
 
CLS
 Println  "               "+Color(2)+"PR-Logoff Matrix v2.o  "+Color(3)+"By SecT / Psychic Release "
 Println  "              "+Color(4)+"[ "+Color(3)+"max 2 lines @X07/ "+Color(3)+"Max 70 char p/l @X07/ "+Color(3)+"Enter To Save "+Color(4)+"]"
 PrintLn  ""+Color(4)+"··-"+Color(3)+"-─"+Color(2)+"────────"+Color(3)+"──"+Color(2)+"───────"+Color(3)+"──--"+Color(4)+"-·· ·  ·"+Color(3)+"--"+Color(2)+"-────────"+Color(3)+"─"+Color(4)+"─"+Color(3)+"──"+Color(2)+"────-"+Color(3)+"-"+Color(4)+"· ··-"+Color(3)+"─"+Color(2)+"──────────────"+Color(3)+"─--"+Color(4)+"·@X07"
 
For i = 1 to 2
 Print "@POS:77@"+Color(3)+"]@X07"
  BackUp 77
 INPUTSTR Color(4)+"<"+Color(2)+string(i)+Color(4)+">"+Color(3)+"@POS:5@[@X07_",TEXT(i),1,70,MASK_ASCII()+"Æ¥Åæ¢å",LFAFTER
Next i
Newlines 2
If ((!text(1) = "") || (!Text(2) = "")) Then
  If (!text(1) = "") Then
     PrintLn  ""+Color(4)+"··-"+Color(3)+"-─"+Color(2)+"────────"+Color(3)+"──"+Color(2)+"───────"+Color(3)+"──--"+Color(4)+"-·· ·  ·"+Color(3)+"--"+Color(2)+"-────────"+Color(3)+"─"+Color(4)+"─"+Color(3)+"──"+Color(2)+"────-"+Color(3)+"-"+Color(4)+"· ··-"+Color(3)+"─"+Color(2)+"──────────────"+Color(3)+"─--"+Color(4)+"·@X07"
     Freshline
     Centertxt (Color(4)+"< "+Color(6)+Text(1) + Color(4)+" >@X07",GetY())
  Endif
  If (!TexT(2) = "") Then
     Newlines 1
     Centertxt (Color(4)+"< "+Color(6)+Text(2) + Color(4)+" >@X07",GetY())
  Endif
     Freshline
     PrintLn  ""+Color(4)+"··-"+Color(3)+"-─"+Color(2)+"────────"+Color(3)+"──"+Color(2)+"───────"+Color(3)+"──--"+Color(4)+"-·· ·  ·"+Color(3)+"--"+Color(2)+"-────────"+Color(3)+"─"+Color(4)+"─"+Color(3)+"──"+Color(2)+"────-"+Color(3)+"-"+Color(4)+"· ··-"+Color(3)+"─"+Color(2)+"──────────────"+Color(3)+"─--"+Color(4)+"·@X07"
     Freshline
     Newline
     Tmp = ""
     INPUTstr Str(1)+"_",TMP,1,1,"YyNn",Defs
        IF ((upper(TMP) = "Y") || (Upper(TMP) ="")) Then
           If  (Upper(TMP) = "") Print Color(2)+"Y@X07"
               Freshline
               TMP = ""
               INPUTstr Str(2)+"@X07_",TMP,1,1,"YyNn",Defs
           IF ((upper(TMP) = "Y") || (Upper(TMP) = "")) Then
              Tmp = "AnoNymous"
           Else
              let TMP = U_Name()
           Endif
             Fcreate 1, PPEpath()+"Last.MSG",2,0
             Fputln 1, TMP
             Fputln 1, TEXT(1)
             Fputln 1, Text(2)
             Fclose 1
           Else
             Println Color(7)+"Onliner Aborted"
             Delay 10
        Endif
 Endif
Endproc
 
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Procedure SysOpmsg()
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Integer i,n
 
I = 0
 
CLS
 Println  "                "+Color(2)+"PR-Logoff Matrix v2.o  "+Color(3)+"By SecT / Psychic Release "
 Println  "        "+Color(4)+"[ "+Color(3)+"Max 20 lines @X07/ "+Color(3)+"Max 70 char p/l @X07/ "+Color(4)+"("+Color(2)+"/S"+Color(4)+") "+Color(3)+"to save "+Color(4)+"("+Color(2)+"/A"+Color(4)+") "+Color(3)+"to abort "+Color(4)+"]"
 PrintLn  ""+Color(4)+"··-"+Color(3)+"-─"+Color(2)+"────────"+Color(3)+"──"+Color(2)+"───────"+Color(3)+"──--"+Color(4)+"-·· ·  ·"+Color(3)+"--"+Color(2)+"-────────"+Color(3)+"─"+Color(4)+"─"+Color(3)+"──"+Color(2)+"────-"+Color(3)+"-"+Color(4)+"· ··-"+Color(3)+"─"+Color(2)+"──────────────"+Color(3)+"─--"+Color(4)+"·@X07"
 
For i = 1 to 20
 Print "@POS:77@"+Color(3)+"]@X07"
  BackUp 77
  INPUTSTR Color(4)+"<"+Color(2)+string(i)+Color(4)+">"+Color(3)+"@POS:5@[@X07_",TEXT(i),1,70,MASK_ASCII()+"Æ¥Åæ¢å",LFAFTER
 
 IF (upper(TEXT(i)) = "/S") Then
     Let Text(i) = ""
     Fcreate 1, PPEpath()+"LOMSG.$$$",2,0
     For n = 1 to i
       Fputln 1, TEXT(n)
     Next n
     FPutLn 1, "<>^Comment left in Logoff Matrix v2.o / Psychic Release^<>"
     Fclose 1
     Message Conf,To,U_Name(),"SyS comment","R",0,0,0,PPEpath()+"LOMSG.$$$"
     Delete PpePath()+"LOMSG.$$$"
     Break
Endif
IF (upper(TEXT(i)) = "/A") THEN
        AnsiPos 9,i+4
        Print Color(7)+"Comment ABORTED!"
        Delay 10
        Break
Endif
Next i
If (i = 21) Then
  Tmp = ""
  INPUTSTR "Save This Msg.:_",TMP,1,70,MASK_ASCII()+"YyNn",LFAFTER
   IF (upper(TEXT(i)) = "Y") Then
         Let Text(i) = ""
         Fcreate 1, PPEpath()+"LOMSG.$$$",2,0
          For n = 1 to i
          Fputln 1, TEXT(n)
          Next n
         FPutLn 1, "<>^Comment left in Logoff Matrix v2.o / Psychic Release^<>"
          Fclose 1
          Message Conf,To,U_Name(),"SyS comment","R",0,0,0,PPEpath()+"LOMSG.$$$"
         Delete PpePath()+"LOMSG.$$$"
   Else
        AnsiPos 9,i+4
        Print Color(7)+"Comment Aborted!"
        Delay 10
   Endif
 Endif
EndProc
 
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Procedure DispAdd(String path)
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
 String Fname(255)
 Byte n
 
  Fname(n) = Findfirst(Path+"*.*")
   While (Fname(n) != "") Do
    Inc n
  Fname(n) = Findnext()
   Endwhile
 
 n = n-1
 Cls
 Dispfile Path+Fname(Random(n)),defs
 
Endproc
 
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Procedure DispDbf()
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
 
String Bname
String Bsys
String Bnum
String Bafil
String Bnup
String Bmisc
String AX(5)
String AY(5)
String DBFpath
String DBFColor(5)
Integer i
 
If (!Exist(ppepath()+"logdbf20.CFG")) Then
    Println Color(7)+"Logdbf20.cfg Don't exist. Tell SysOp!"
Else
   Let Tmp = ppepath()+"LogDBF20.cfg"
   Let DBFpath      = Readline(tmp,1)
 
    If (!Exist(Dbfpath)) Then
       Println Color(7)+"DBF file Don't exist. Tell SysOp!"
    Else
       Tokenize Readline(tmp,2)
       Let AX(1)        = Gettoken()
       Let AY(1)        = Gettoken()
       Tokenize Readline(tmp,3)
       Let AX(2)        = Gettoken()
       Let AY(2)        = Gettoken()
       Tokenize Readline(tmp,4)
       Let AX(3)        = Gettoken()
       Let AY(3)        = Gettoken()
       Tokenize Readline(tmp,5)
       Let AX(4)        = Gettoken()
       Let AY(4)        = Gettoken()
       Let AY(5)        = Readline(tmp,6)
       Let DBFcolor(1)  = Readline(tmp,7)
       Let DBFcolor(2)  = Readline(tmp,8)
       Let DBFcolor(3)  = Readline(tmp,9)
       Let DBFcolor(4)  = Readline(tmp,10)
       Let DBFcolor(5)  = Readline(tmp,11)
 
       Dopen 1, DBFpath,1
       i = Random(dreccount(1))
         If (i = 0) let i = 1
          Dgo 1,i
           Dget 1,"BBSname",Bname
           Dget 1,"BBSsysop", Bsys
           Dget 1,"BBSnum", Bnum
           Dget 1,"BBSaffil",Bafil
           Dget 1,"BBSnup",Bnup
           Dget 1,"BBSmisc",Bmisc
       Dclose 1
 
       Dispfile Ppepath()+"Logdbf20.pcb",defs
 
       Ansipos AX(1),AY(1)
        Print Dbfcolor(1)+Mixed(Bname)
 
       Ansipos AX(2),AY(2)
        Print Dbfcolor(2)+Bsys
 
       Ansipos AX(3),AY(3)
        Print Dbfcolor(3)+Bnum
 
       Ansipos AX(4),AY(4)
        print Dbfcolor(4)+Bnup
 
       Ansipos 1,AY(5)
        Centertxt(Dbfcolor(5)+Bmisc,AY(5))
        Centertxt(Dbfcolor(5)+Bafil,AY(5)+1)
       Newlines 2
 
    Endif
 
Endif
 
Endproc
 
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Procedure CenterTxt( String text,Byte y)
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
 Byte X
 String Tmp
 
  Text = Trim(text," ")
  Tmp  = Text
  Tmp  = Stripatx(TMP)
 
  X = (80-Len(TMP))/2
 
   Ansipos X,y
   Print text
 
Endproc
 
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Procedure disp()
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
String Dtext(3)
 
 DispFile PPEPath()+PPEname()+".PCB", Defs
 Fopen 1, PPEpath()+"last.msg",2,0
 Fget 1, Dtext(1)
 Fget 1, Dtext(2)
 Fget 1, Dtext(3)
 Fclose 1
 
Ansipos X(2),Y(2)
 Println Color(5)+Dtext(1)
 Centertxt(color(6)+dtext(2),Y(3))
 If (DTexT(3) != "") Then
    Centertxt(color(6)+dtext(3),Y(4))
 Endif
 
endproc
 
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Procedure check()
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
 
String Key
 
Wrunet PCBnode(),"Q",Un_Name(),Un_City(),"Using: LOGOFF20.PPE"," "
 
    If (PCBnode() = 0) Then
         Flagged = Getenv("PCBDRIVE")+Getenv("PCBDIR")+"\FLIST."
    Else
         Flagged = Getenv("PCBDRIVE")+Getenv("PCBDIR")+"\FLIST."+String(PCBnode())
    Endif
     Freshline
      Print Str(3)
      Delay 5
     If (!Exist(Flagged)) Then
         Print Str(5)
     Else
         Print Str(6)
         Freshline
         Print Str(4)
 
:Loop
 Let Key = Upper(InKey())
 
 Select Case Key
 
        Case "L"
          Print Str(7)
           Delay 3
           Goto End
 
        Case "D"
          Print Str(8)
          Download tmp
 
        Case CHR(13)
          Print Str(7)
           Delay 3
            Goto End
 
        Case else
         Goto Loop
 
 end select
Endif
 
:end
 
Endproc
 
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
PROCEDURE DISPSELECT(INTEGER Selnr)
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Ansipos X(1),Y(1)+selnr-1
 BackLight = ScrText(X(1), Y(1) + Selnr-1, lenght, True)
 Print cOLOR(1),ScrText(X(1), Y(1) + Selnr-1, lenght, False)   ;@X07
 EraseCursor()
Endproc
 
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Procedure DisPErase(Integer Selnr)
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
AnsiPos X(1),Y(1)+Selnr-1
 Print "@X0F",BackLight                                               '@X07
 EraseCursor()
Endproc
 
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Procedure EraseCursor()
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
AnsiPos 1,22
 Color 0
 Print " "
 Backup 1
EndProc
;::::::::::::::::::::::::::::::::[End Of File]::::::::::::::::::::::::::::::::::
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

[ RETURN TO DIRECTORY ]