VTBSASM; ; ************************ ; ** VIDEOTEXT-SOFTWARE ** ; ************************ ; ; ** BILDSCHIRMROUTINEN ** ; ; STAND: 11.11.89 ; ERSTELLT AUF KC85/3-EDAS1.4 ; ; GUNNAR REINHOLD ; MOSKAUER STR. 3 ; RIBNITZ-DAMGATEN ; 2590 ; ;--------------------------------------- ; ORG EMEND ; ANFBD PUSH AF XOR A LD (MZZH),A ;HOEHE NORMAL LD (GRAPH),A ;ALPHA LD (FREIG),A ;TEXTFREIGABE LD (HOLD),A ;NICHT HALTEN LD A,38H ;WEISS/SCHW. LD (COLOR),A POP AF RET ; ; KOPFZEILE AUF DISPLAY BRINGEN ANZKO LD HL,0 LD (CURSP),HL LD HL,ANZPU LD B,40 CALL ANFBD ANZKO1 PUSH BC CALL OUTCHR POP BC DJNZ ANZKO1 RET ; ANZ40 CALL ANFBD LD B,40 ;*40 ZEICHEN ANZ1 PUSH BC CALL OUTCHR POP BC DJNZ ANZ1 RET ; ANZC40 CALL ANFBD LD B,40 ANZC1 PUSH BC CALL COL40 CALL OUTCHR POP BC DJNZ ANZC1 LD A,0 LD (FLINE),A RET ; ; ZEILE 1-23 AUF DISPLAY BRINGEN ANZTA LD L,0 LD H,1 LD (CURSP),HL LD HL,ANZPU+40 LD C,23 ; 23 ZEILEN LD A,0 LD (FLINE),A ANZTA1 LD A,(FLINE) CP 1 JR Z,ANZTA2 CALL ANZ40 ;*40 ZEICHEN DEC C JR NZ,ANZTA1 RET ANZTA2 CALL ANZC40 DEC C JR NZ,ANZTA1 RET ; ; STEUERZEICHENVERARBEITUNG: ; PE: (A)=0...1FH WRSTC PUSH AF PUSH BC PUSH HL PUSH HL LD HL,WRSEND EX (SP),HL ;RETURNADR.UP LD HL,TABSTZ LD C,A LD B,0 ADD HL,BC ADD HL,BC LD C,(HL) ;STARTADR.LOW INC HL LD H,(HL) ;STARTADR.HIGH LD L,C JP (HL) ;AUSFUEHRUNG WRSEND POP HL POP BC POP AF CP 18H RET Z ; NACH JEDEM STEUERZ. WIRD DIE ; TEXTFREIGABE (18H) GESPERRT XOR A LD (FREIG),A RET ; ; TABELLE DER VT-STEUERCODES TABSTZ DEFW NULL ;CODE 0 DEFW AROT DEFW AGRUEN DEFW AGELB DEFW ABLAU DEFW AMAG DEFW ACYAN DEFW AWEISS DEFW NULL DEFW NULL DEFW NULL ;CODE 0AH DEFW NULL DEFW NORZH DEFW DOPZH DEFW NULL DEFW NULL DEFW NULL ;CODE 10H DEFW GROT DEFW GGRUEN DEFW GGELB DEFW GBLAU DEFW GMAG DEFW GCYAN DEFW GWEISS DEFW VERDA DEFW NULL DEFW NULL ;CODE 1AH DEFW NULL DEFW SCHWH DEFW SETHIN DEFW ZHOLD DEFW RHOLD ; ; VERDECKTE ANZEIGE SETZEN ; (RESET IN WRSTC) VERDA LD A,1 LD (FREIG),A RET ; ; HINTERGRUNDFARBE SETZEN SETHIN LD A,(LFARB) LD B,A LD A,(COLOR) AND 0F8H OR B LD (COLOR),A RET ; ; HINTERGRUNDFARBE SCHWARZ SCHWH LD A,(COLOR) AND 0F8H LD (COLOR),A RET ; ; ZEICHENHALTEN ZHOLD LD A,1 LD (HOLD),A RET ; ; ZEICHENFREIGABE RHOLD XOR A LD (HOLD),A RET ; ; SETZEN DOPPELTE ZEICHENHOEHE DOPZH LD A,1 LD (MZZH),A LD (FLINE),A RET ; ; SETZEN NORMALE ZEICHENHOEHE NORZH XOR A LD (MZZH),A RET ; NULL NOP RET ; AROT LD B,2 JR AFARB AGRUEN LD B,4 JR AFARB AGELB LD B,6 JR AFARB ABLAU LD B,1 JR AFARB AMAG LD B,3 JR AFARB ACYAN LD B,5 JR AFARB AWEISS LD B,7 JR AFARB GROT LD B,2 JR GFARB GGRUEN LD B,4 JR GFARB GGELB LD B,6 JR GFARB GBLAU LD B,1 JR GFARB GMAG LD B,3 JR GFARB GCYAN LD B,5 JR GFARB GWEISS LD B,7 JR GFARB ; ; FARBBEFEHLE FUER ALPHAZEICHEN AFARB XOR A LD (GRAPH),A JR FARBE ; ; FARBBEFEHLE FUER GRAPHIKSYMBOLE GFARB LD A,1 LD (GRAPH),A JR FARBE ; FARBE LD A,B LD (LFARB),A ;MERKEN LD A,(COLOR) AND 0C7H SLA B SLA B SLA B OR B LD (COLOR),A RET ; PADRE PUSH DE CALL CAOS DEFB 34H POP DE RET ; ; ERRECHNEN DER ZEILENNR. ZUR ; AKTUELLEN CURSORPOS ZEINR LD HL,(CURSP) LD DE,(WINON) ADD HL,DE LD E,L LD A,H SLA A SLA A SLA A LD D,A ;DE=ZEILENNR. RET ; ZHDUP CALL ZEINR LD C,8 ;ZAEHLER QUELLE LD B,15 ;ZAEHLER ZIEL ZHVD1 CALL DUPCO DEC C ;ZEILE-1 LD A,D ADD A,C LD H,A ;V-POS. QUELLE LD L,E ;H-POS. CALL PADRE LD A,(HL) ;QUELLE LESEN EX AF,AF' LD A,D ADD A,B LD H,A ;V-POS. ZIEL LD L,E ;H-POS. CALL PADRE EX AF,AF' LD (HL),A ;SCHREIBEN EX AF,AF' LD A,D DEC B ADD A,B ;D+B LD H,A ;V-POS. ZIEL-1 LD L,E ;H-POS. CALL PADRE EX AF,AF' LD (HL),A ;SCHREIBEN DEC B LD A,C CP 0 JR NZ,ZHVD1 RET ; DUPCO LD H,D LD L,E PUSH DE PUSH HL CALL CAOS DEFB 34H POP HL LD A,H ADD B LD H,A LD A,(DE) ;FARBE CALL CAOS DEFB 34H LD (DE),A ;F. SCHREIBEN POP DE RET ; ; KENNZEICHNEN DES ZEICHENS ; EINE ZEILE TIEFER KENNH PUSH HL PUSH DE LD DE,40 ADD HL,DE LD (HL),80H POP DE POP HL RET ; ZHVD PUSH HL LD A,8 ;CURSOR LINKS CALL CAOS DEFB 0 CALL KENNH CALL ZHDUP LD A,9 ;CURSOR RECHTS CALL CAOS DEFB 0 POP HL RET ; ; ERMITTELN DER FARBE DES ; ZEICHENS EINE ZEILE HOEHER COL40 LD A,(FLINE) CP 1 RET NZ PUSH BC PUSH HL CALL ZEINR LD B,8 LD H,D LD L,E LD A,H SUB B LD H,A ;ZEILE-8 PUSH HL CALL CAOS DEFB 34H POP HL LD A,(DE) ;FARBE Z-8 ; AND 07H LD (COLOR),A POP HL POP BC RET ; WRCHR PUSH AF PUSH BC PUSH DE PUSH HL LD HL,FREIG ;TEXTFREIGABE? BIT 0,(HL) JR Z,WRCHR1 LD HL,FRTAS ;FREIGABETASTE? BIT 0,(HL) JR NZ,WRCHR1 ;IST FREIGEG. LD A,20H ;VERDECKTE ANZ. WRCHR1 CALL CAOS DEFB 0 POP HL LD A,(MZZH) CP 1 CALL Z,ZHVD ;DOPPELTE HOEHE POP DE POP BC POP AF RET ; ; AUSGABE VON NICHT IM HC- ; ZEICHENGEN. VORHANDENEN ZEICHEN ; ZGGRAE DEFW 0066H DEFW 663CH DEFW 7E66H DEFW 0066H ZGGRAD DEFW 3C00H DEFW 6666H DEFW 003CH DEFW 0 ZGPAR DEFW 6038H DEFW 663CH DEFW 063CH DEFW 003CH ; PARAGR PUSH HL LD HL,ZGPAR JR OUTSON GRADZ PUSH HL LD HL,ZGGRAD JR OUTSON GROAE PUSH HL LD HL,ZGGRAE JR OUTSON ; ; GROSSES OE,UE = KLEINES OE,UE GROEUE SET 5,A CALL WRCHR INC HL RET ; ; SONDERZEICHEN ZUM GRAFIKPUFFER ; UND ALS SOLCHE AUSGEBEN OUTSON PUSH BC LD DE,GPUFF LD BC,8 LDIR POP BC LD DE,GPUFF-108H LD HL,(CCTL1) LD (CCTL1),DE LD D,H LD E,L LD A,61H POP HL CALL WRCHR LD (CCTL1),DE INC HL RET ; STEP LD A,9 ;CURSOR RECHTS CALL WRCHR INC HL RET ; OUTCHR LD A,(HL) CP 80H JR Z,STEP CP 20H ; 0-1FH ? JR C,STCODE OHOLD LD (LBYTE),A ; MERKER CP 40H ; 20H-3FH ? JR C,OUTCH1 CP 60H ; 40H-5FH ? JR NC,OUTCH1 ; A= 40H-5FH CP 40H ;PARAGRAPH JR Z,PARAGR CP 5BH ;GROSSES AE JR Z,GROAE CP 5CH ;GROSSES OE JR Z,GROEUE CP 5DH ;GROSSES UE JR Z,GROEUE CALL WRCHR ;ALLE ANDEREN INC HL RET ; A= 20H-3FH UND 60H-7FH OUTCH1 PUSH HL LD HL,GRAPH BIT 0,(HL) POP HL JR NZ,OUTGR ;GRAPHIKZ. CP 60H ;GRAD-ZEICHEN JR Z,GRADZ CALL WRCHR INC HL RET ; ; AUSG. DER GRAPHIKSYMBOLE OUTGR PUSH HL CALL GZBER ;GR.BERECHNEN LD DE,GPUFF-108H LD HL,(CCTL1) LD (CCTL1),DE ;ZG UMSCH. LD D,H LD E,L LD A,61H POP HL CALL WRCHR ;GRAPHIC AUSG. LD (CCTL1),DE ;ZG ZURUECK INC HL RET ; ; STEUERCODES REALISIEREN STCODE CP 8 JR C,STCD2 ;0...7 CP 10H JR C,STCD1 ;8...F CP 18H JR C,STCD2 ;10...17 ; ; ERST AUSFUEHREN, DANN SPACE ; BEI 8...F, 18...1F STCD1 PUSH HL CALL WRSTC ;FUNKT.REALIS. LD HL,HOLD BIT 0,(HL) ;HALTEN ? POP HL JR NZ,STCDH1 PUSH AF LD A,20H ;SPACE LD (LBYTE),A ;MERKEN CALL WRCHR POP AF INC HL RET ; HALTEN DES LETZTEN DARSTELL- ; ZEICHENS STATT LEERZEICHEN STCDH1 PUSH AF LD A,(LBYTE) CALL OHOLD POP AF RET ; ; ERST SPACE, DANN AUSFUEHREN ; BEI 0...7, 10...17 STCD2 PUSH HL LD HL,HOLD BIT 0,(HL) POP HL JR NZ,STCDH2 PUSH AF LD A,20H ;SPACE LD (LBYTE),A ;MERKEN CALL WRCHR POP AF CALL WRSTC ;AUSFUEHREN INC HL RET STCDH2 PUSH AF LD A,(LBYTE) CALL OHOLD POP AF CALL WRSTC RET ; ; GRAPHIKZEICHEN BERECHNEN ; A=ZEICHEN GZBER CALL GPCLR LD B,A LD A,0F0H ;LINKE HAELFTE BIT 0,B CALL NZ,OBEN BIT 2,B CALL NZ,MITTE BIT 4,B CALL NZ,UNTEN LD A,0FH ;RECHTE HAELFTE BIT 1,B CALL NZ,OBEN BIT 3,B CALL NZ,MITTE BIT 6,B CALL NZ,UNTEN RET ; OBEN LD HL,GPUFF OR (HL) JR GPLD UNTEN LD HL,GPUFF+6 OR (HL) JR GPLD MITTE LD HL,GPUFF+2 OR (HL) LD (HL),A INC HL LD (HL),A INC HL GPLD LD (HL),A INC HL LD (HL),A RET ; GPCLR LD HL,GPUFF LD B,8 GPCL1 LD (HL),0 INC HL DJNZ GPCL1 RET ; CLRIRM LD HL,PIXRAM LD DE,PIXRAM+1 LD BC,27FFH LD (HL),0 LDIR LD HL,COLRAM LD DE,COLRAM+1 LD BC,09FFH LD A,38H ;WEISS/SCHWARZ LD (HL),A LDIR LD HL,VIDRAM LD DE,VIDRAM+1 LD BC,04FFH LD (HL),20H LDIR RET ; ; EINGABE TAFELNUMMER INPTNR CALL DELTA ;DELETE TAFELNR. LD L,25 LD H,25 LD (CURSP),HL LD A,30H LD (COLOR),A LD DE,0 INPTN1 CALL KEY CP 0AH JR Z,INPEND CP 0BH JR Z,INPEND CP 03H JR Z,INPRET CP 'A' CALL Z,DARZPB CP 'N' JR Z,INPEND CP 'M' CALL Z,ABILD CP 30H ;>=30H? JR C,INPTNR CP 3AH ;<3A? JR NC,INPTNR CALL WRCHR LD HL,KEYPU ADD HL,DE SUB 30H LD (HL),A INC E LD A,E CP 3 JR NZ,INPTN1 LD A,(KEYPU) LD (XMAGAZ),A LD A,(KEYPU+1) LD (XZEHN),A LD A,(KEYPU+2) LD (XEIN),A INPEND CALL DISTA INPRET RET ; ; ERHOEHEN DER TAFELNUMMER UM 1 INCTN PUSH AF LD A,(XEIN) CP 9 JR Z,INCT1 INC A LD (XEIN),A JR INCT4 INCT1 XOR A LD (XEIN),A LD A,(XZEHN) CP 9 JR Z,INCT2 INC A LD (XZEHN),A JR INCT4 INCT2 XOR A LD (XZEHN),A LD A,(XMAGAZ) CP 9 JR Z,INCT3 INC A LD (XMAGAZ),A JR INCT4 INCT3 XOR A LD (XMAGAZ),A INCT4 POP AF RET ; ; VERRINGERN DER TAFELNR. UM 1 DECTN PUSH AF LD A,(XEIN) SUB 1 JR C,DECT1 LD (XEIN),A JR DECT4 DECT1 LD A,9 LD (XEIN),A LD A,(XZEHN) SUB 1 JR C,DECT2 LD (XZEHN),A JR DECT4 DECT2 LD A,9 LD (XZEHN),A LD A,(XMAGAZ) SUB 1 JR C,DECT3 LD (XMAGAZ),A JR DECT4 DECT3 LD A,9 LD (XMAGAZ),A DECT4 POP AF RET ; ANFTA LD A,1 LD (XMAGAZ),A DEC A LD (XZEHN),A LD (XEIN),A RET ; MSG1 LD A,30H LD (COLOR),A LD L,19 LD H,25 LD (CURSP),HL CALL CAOS DEFB 23H DEFM 'Tafel:' NOP RET ; CLMSG1 LD A,30H LD (COLOR),A LD L,19 LD H,25 LD (CURSP),HL CALL CAOS DEFB 23H DEFM ' ' NOP RET ; ; ANZEIGEN DER ANZAHL VT-ZEILEN DARZPB PUSH AF LD A,20H LD (COLOR),A LD L,1 LD H,25 LD (CURSP),HL CALL CAOS DEFB 23H DEFM 'VTZ/BAI: ' NOP DARZP1 CALL EZPBAI ;ERMITTELN LD L,10 LD H,25 LD (CURSP),HL LD A,(AZPBAI) CALL CAOS DEFB 1CH ;ANZEIGEN CALL SENSE JR NC,DARZP1 CP 'A' JR NZ,DARZP1 CALL CLRTA CALL STATZ POP AF RET ; ; TAFELNR. ANZEIGEN DISTA LD A,30H LD (COLOR),A LD L,25 LD H,25 LD (CURSP),HL LD A,(XMAGAZ) ADD 30H CALL WRCHR LD A,(XZEHN) ADD 30H CALL WRCHR LD A,(XEIN) ADD 30H CALL WRCHR RET ; ; DARGESTELLTE TAFELNR. LOESCHEN DELTA LD A,30H LD (COLOR),A LD L,25 LD H,25 LD (CURSP),HL CALL CAOS DEFB 23H DEFM ' ' NOP RET ; ; SUBCODES/STEUERBITS AUSGEBEN OUTST LD A,20H LD (COLOR),A LD L,1 LD H,25 LD (CURSP),HL CALL CAOS DEFB 23H DEFM 'Sub:' NOP LD HL,SBTAU LD B,8 OUTST1 LD A,(HL) CP 10H JR NC,OUTST4 CP 10 JR NC,OUTST2 ADD 30H ; 0-9 JR OUTST3 OUTST4 LD A,'-' ; >F JR OUTST3 OUTST2 ADD 55 ; A-F OUTST3 CALL CAOS DEFB 0 INC HL DJNZ OUTST1 RET ; MSGPF LD A,20H LD (COLOR),A LD L,35 LD H,25 LD (CURSP),HL CALL CAOS DEFB 23H DEFM 'V1.0' NOP RET ; MSGST LD L,14 LD H,25 LD (CURSP),HL LD A,(STOPB) CP 0 JR Z,MSGST1 LD A,10H LD (COLOR),A CALL CAOS DEFB 23H DEFM 'Stop' NOP RET MSGST1 LD A,20H LD (COLOR),A CALL CAOS DEFB 23H DEFM ' ' NOP RET ; MSGHC LD A,20H LD (COLOR),A LD L,1 LD H,25 LD (CURSP),HL CALL CAOS DEFB 23H DEFM 'KC-VIDEOTEXT' NOP RET ; STATZ CALL MSGHC CALL MSGST CALL MSG1 CALL DISTA CALL MSGPF RET ; RESST LD A,(STOPB) RES 0,A LD (STOPB),A CALL CLRTA RET ; STOPT PUSH AF LD A,(STOPB) BIT 0,A JR NZ,STOPTR SET 0,A LD (STOPB),A POP AF RET STOPTR CALL RESST POP AF RET ; NEUBEG CALL RESST CALL MSGHC XOR A ;KEINE TEXT- LD (FRTAS),A ;FREIGABE RET ; ANZA AND 0FH CP 0AH JR NC,ANZA1 ADD A,30H ;0...9 CALL WRCHR RET ANZA1 ADD A,37H ;A...F CALL WRCHR RET ; ANZTN LD A,(ANZZ) INC A LD (ANZZ),A AND 7 CP 7 RET NZ LD HL,1 LD (CURSP),HL LD A,30H LD (COLOR),A ;GELB LD A,(MAGAZ) CALL ANZA LD A,(SZEHN) CALL ANZA LD A,(SEIN) CALL ANZA RET ; BACK LD HL,0100H LD (WINON),HL LD HL,1E28H LD (WINLG),HL CALL CAOS DEFB 23H DEFB 0CH DEFB 0DH NOP RET ; MSGKCV DEFM 'KC-VIDEOTEXT' ; STRICH CALL AMAG LD A,2CH LD B,39 STRI1 PUSH AF PUSH BC CALL OUTGR POP BC POP AF DJNZ STRI1 RET ; ABILD PUSH AF CALL CLRIRM LD L,0 LD H,3 LD (WINON),HL LD L,40 ;40 BREIT LD H,27 ;27 HOCH LD (WINLG),HL ; LD HL,0101H LD (CURSP),HL CALL STRICH LD A,38H LD (COLOR),A LD HL,0201H LD (CURSP),HL LD HL,MSGKCV LD B,12 KCML PUSH BC PUSH HL LD A,(HL) CALL CAOS DEFB 0 LD A,8 CALL CAOS DEFB 0 CALL ZHDUP LD A,9 CALL CAOS DEFB 0 POP HL POP BC INC HL DJNZ KCML ; CALL AROT CALL CAOS DEFB 23H DEFM ' die TELETEXT-' DEFM 'Adaption' NOP LD HL,0313H LD (CURSP),HL CALL CAOS DEFB 23H DEFM 'auf KC85 /' DEFM 'G.Reinhold' NOP ; LD HL,0401H LD (CURSP),HL CALL STRICH ; CALL AMAG LD HL,0600H LD (CURSP),HL LD A,18H LD (COLOR),A CALL CAOS DEFB 23H DEFM ' Enter......Abbruch ' DEFM 'Tafelsuche, Eingabe' DEFW 0D0AH DEFM ' der Tafel' DEFM 'nummer 3stellig' DEFW 0D0AH NOP ; CALL AGELB CALL CAOS DEFB 23H DEFM ' Cursor' DEFW 0D0AH DEFM ' up.........Inkrement' DEFM ' Tafelnummer' DEFW 0D0AH DEFB 0AH NOP ; CALL AMAG CALL CAOS DEFB 23H DEFM ' down.......Dekrement' DEFM ' Tafelnummer' DEFW 0D0AH DEFB 0AH NOP ; CALL AGELB CALL CAOS DEFB 23H DEFM ' Stop.......Halten der' DEFM ' aktuellen Tafel' DEFW 0D0AH DEFB 0AH NOP ; CALL AMAG CALL CAOS DEFB 23H DEFM ' N..........Neubeginn' DEFM ' der Tafelsuche' DEFW 0D0AH DEFB 0AH NOP ; CALL AGELB CALL CAOS DEFB 23H DEFM ' T..........Textfreiga' DEFM 'be' DEFW 0D0AH DEFB 0AH NOP ; CALL AMAG CALL CAOS DEFB 23H DEFM ' A..........Abstimm' DEFM 'hilfe-Empfangsgeraet' DEFW 0D0AH DEFB 0AH NOP ; CALL AGELB CALL CAOS DEFB 23H DEFM ' M..........Menue ' DEFM ' Break.......System' DEFW 0D0AH DEFB 0AH DEFB 20H NOP ; CALL STRICH LD A,1 LD (STOPB),A ;STOP SETZEN CALL STATZ POP AF RET ; KEY CALL CAOS DEFB 4 RET ; SENSE BIT 0,(IX+8) JR Z,SEEND RES 0,(IX+8) LD A,(IX+13) SCF ;BERUEHRT RET SEEND SCF CCF ;NICHT BER. RET ; TEXTF PUSH AF LD A,(FRTAS) CP 1 JR Z,TEXTF1 LD A,1 LD (FRTAS),A CALL CLMSG1 CALL ANZTA CALL MSG1 CALL DISTA TEXTF1 POP AF RET ; ;--------------------------------------- ; DEFW 7F7FH DEFM 'KCTEXT' DEFB 1 ; CALL CLRIRM CALL CLRTA CALL INIT CALL ANFTA ;TAFEL 100 CALL CLRSS ;SUBC. LOESCH. CALL ABILD ;MENU JR LOOP1 ;SUCHBEGINN ; LOOP CALL STATZ ;STATUSZEILE CALL INPTNR ;TAFEL EINGEBEN CP 3 ;BREAK JP Z,VTEND LOOP4 CALL CLRTA CALL RESST ;RESET STOP CAL˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙