IMD 1.16: 31/08/2008 22:29:40 f02501 84-93025-01 a000 timer495 2/jun/83  ž� ªªž @0‚|†ø)®wÂwЀЀÎtQº®q¦l) ˆ " ž}‚gÿA ¢`œ�žúž¼žöšèì Mˆ’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’IOS4 €MÁúE180040811194800800408111948 800408111948*F02501 VOLTIMER495 (84-93025-01-A000)   ’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’Ižúž¼žöšèì Mˆ@†jæjg€ÿíg�ÿèÂg@ †o G€ÿò`úkžŽ¾ôž¾¢_„C# b# ž}€BŸ€ žuÒ[¾æ žþž]e‡ †JÂR¾­æði¾òÀˆÆCÆCp@€„†<€…†;€††:€ƒ †FÂ8P@ G€ÿÁÆ;à‰¾•NÆêP¾éâ×èCHùC €ˆC ˜GÈTºà€qEžç‚â¢'ŸÉž¦ *�¦Ã C¦¦ÏŸxÆžì @0DAJ÷LÆ )®ê‘ЀЀΎQBžxªâ" ¦† i¾¦€„�œ�ªª+⟠fžE¾ùžB)3žß `jm�BˆB¾ I,Ÿv ¾ °¾€B¾ I,ŸmžÊ ž @¬E°E¨F¤F)¤D¾^ÄE‚‚„Fž% †ÊæjHÿÆÄÆÄ@pÆO¾ÄŸv g€ÿ7g�ÿ4ò]X¾] P¢hâV+ì„s=è„胾cž�Æ_†N‚£ ž‡žôŠGŠF¾Öž�†›¾ÁžØ¾ø ¦•“@Aú�LèSÃ)"$ C ž‰žkžøª1žïŠ/žjŠ-ž žhÿöÿÿ ‚p ž…âv¾R†Ÿw ÞpÞpžwâ‚p¾ Þkâižº† ’ŸÂ¢œ€15 !¦^æ\žd ²X‚ žˆò %€À'+ò²NŸs愾Qâ‚)žs ‡EÞDŸ|Ÿ{ @ž$ ož¶ Ož¯ mž­ Jž« Kž© iž¸ gž¶†. žV tž²žì„sFè„n`" FàEžD)ž ¾E`¾CnrgŸy ¾w"¾NÞž{žR¾q1¾HÞ ž}žL¾2`¾0t¾žG¾- ²B¾c ¾(Þ>Þ=Þ<žy¦:ž;¾!ž9¾ü¾/ž5OS:: SYSž¦ž"ªªiüþŒþ‹Âwþ‹þŠÂvc Bc A@6<# þ�Ic B# ÞgIþjHÀc r‡Ÿc ·œ‡›Þš# @0‚X†ß)P ®VÂVЀЀÎSQº®P¦‹pI þN@61 EXR: #(2) JSK #(0) ENDC IFT #(?)>2 EXR: #(3) JSK #(0) ENDC IFT #(?)>3 EXR: #(4) JSK #(0) ENDC ENDM TITL TIMER MACROS -- INIT & TIME:ST INIT MACRO OPTIONS +:20 NAM TIME:ST EXTR TM:RTN EXTR CNT:LOW EXTR CNT:HIGH TM:END SET 0 TIME:2 SET $ TIME:ST WORD 0 OPTIONS -:20 ENDM SPACE 5 TIME:INC MACRO OPTIONS +:20 IFT TM:END IMS CNT:LOW JMP TIME:1 IMS CNT:HIGH JMP TIME:1 JST TM:RTN TIME:2 SET $ NOP LPOOL ENDC TM:END SET 0 OPTIONS -:20 ENDM TITL TIMER MACROS -- TIME & TIME:END TIME MACRO TIME:INC OPTIONS -2 TM:END SET 1 TIME:0 SET $ ORG TIME:2 WORD TIME:0 ORG TIME:0 NOP  NOP WORD #(1) WORD #(2) MSG #(3) IFT #(?)>3 OHEAD SET #(4,'OV')%14 ENDC IFF #(?)>3 OHEAD SET 0 ENDC TIME:1 SET $ ORG TIME:0 WORD TIME:1 WORD OHEAD ORG TIME:1 OPTIONS +2 ENDM SPACE 5 TIME:END MACRO WORD 0 ENDM * SAVE END RRRRR 44444 99 TITL ** TIMER495.NUC ** (84-93025-20-A000) TIMING TEST PROGRAM TITL I/O MACRO SUBROUTINES NAM TIMER495 NAM CNT:HIGH  NAM CNT:LOW NAM TM:RTN EXTR TIME:ST MACHINE :20 TIMER495 REL WRITE EQU $ ADD =1,X GET ADDRESS OF MESSAGE COPY X,WTIOB+IO:BUF STORE INTO IOB COPY PRFLG,A JEQ A,$+2 JUMP IF DEFAULT I/O COPY X,OUTIOB+IO:BUF SUB =1,X POINT TO THE BYTE COUNT COPY 0(X),X GET IT COPY X,WTIOB+IO:BCT STORE INTO IOB COPY PRFLG,A JEQ A,$+2 JUMP IF DEFAULT I/O COPY X,OUTIOB+IO:BCT COPY:M WRTCODE,A,WTIOB+IO:FC COPY A,OUTIOB+IO:FC I:IO WTIOB JMP IOERR COPY PRFLG,A JEQ A,$+4 I:IO OUTIOB JMP IOERR RSK WRTCODE WORD WR:%4+FA: TITL * * SET UP IOB TO WRITE ON 'OC' * IOB:A WTIOB,'OC',WR:,FA:,WTDBCT,0,WTDCFI,0 * IOB:A OUTIOB,'Z2',WR:,FA:,WTDBCT,0,WTDCFI,0 * WTDBCT EQU 80 WRITE BYTE COUNT WTDCFI RES 2,0 WRITE CFI PRFLG WORD 0 GFN:PL NAMPTR,ISMPL UNIT EQU NAMPTR+PUN: FNO EQU NAMPTR+FNO: LUN EQU NAMPTR+LUN: NAME EQU NAMPTR+NAME: SEXT EQU NAMPTR+SEXT: INXT EQU NAMPTR+INXT: RLN EQU NAMPTR+RLN: * OPEN EQU $ COPY PRFLG,A JEQ A,OPIF1 COPY:M OPENCODE,A,IO:FC(X) I:IO 0(X) JMP IOERR OPIF1 RSK OPENCODE WORD FU:%4+OP: * CLOSE EQU $ COPY PRFLG,A JEQ A,CLIF1 COPY:M CLOSCODE,A,IO:FC(X) I:IO 0(X) JMP IOERR CLIF1 RSK CLOSCODE WORD FU:%4+CL: * * IOERR COPY:M =0,A,PRFLG WRITE ERRMSG E:MONE PRMERR COPY:M =0,A,PRFLG WRITE PERMSG E:MONE NOFOUND COPY:M =0,A,PRFLG WRITE NOFMSG E:MONE LPOOL TITL TIMER EXECUTIVE * * * TIMER495 EQU $ E:GFN NAMPTR . GET COMMAND LINE PARAMETER JEQ A,TIMER1 . IF  VALID FILE NAME, JUMP TO 1 CLSN A,=1 JMP TIMER3 . NO PARAMETER GIVEN (CRT) JUMP TO 3 JMP PRMERR . ILLEGAL INPUT GIVEN--ABORT TIMER1 COPY:M =-1,A,PRFLG 1 ALLOW USE OF OUTIOB COPY UNIT,A JNE A,TIMER2 . UNIT GIVEN OR LP, JUMP TO 2 E:UF . . FILE IS ON UF COPY A,FNO . GET IT'S FNO & UNIT COPY X,UNIT TIMER2 COPY NAMPTR,A 2 NAME GIVEN? JEQ A,TIMER3 . NO (LP) - JUMP TO 3 COPY:M =20,A,INXT . YES, SPECIFY INXT, SEXT, & RLN COPY A,SEXT COPY:M =0,A,RLN F:CREA NAMPTR . CREATE THE FILE IF IT JGE A,TIMER3 . DOESN'T ALREADY EXIST JMP IOERR LPOOL TIMER3 COPY:M ='Z2',A,LUN 3 CONNECT FILE TO 'Z2' F:CONN NAMPTR JGT A,TIMER4 JMP NOFOUND LPOOL TIMER4 OPEN OUTIOB OPEN THE FILE WRITE HEADING,HEAD1,BLANK,BLANK COPY:M =-1,A,RESCNT RBIT 5,S COPY:M RTCINC,A,RTCSAVE COPY:M RTCINC+1,A,RTCSAVE1 COPY:M RTCINC+2,A,RTCSAVE2 COPY:M JST1,A,RTCINC+1 COPY:M =RTCRTN,A,RTCINC+2 TIMER5 COPY TIME:ST,X COPY X,TM:CUR TIMER10 EQU $ COPY:M =0,A,ABORT COPY:M SETCTR,A,COUNTER IMS COUNTER JMP $-1 * * INITIATE TEST AND TIMER * COPY:M TICK4,A,RTCINC COPY:M =-1,A,RTCCNT COPY:M LOW1,A,CNT:LOW COPY:M HIGH1,A,CNT:HIGH COPY TM:CUR,X COPY 0(X),Y COPY 2(X),A LOAD INITIAL VALUES COPY 3(X),X SBIT 5,S JMP 0(Y) * * HERE ON RETURN FROM TEST * TM:RTN ENT RBIT 5,S COPY RTCINC,A COPY A,SCORE COPY TM:CUR,X COPY 1(X),X COPY SCORE,A JNE X,TIMER40 SUB OHD,A EXCH ABORT,A JNE A,TIMER30 EXCH ABORT,A TIMER30 JST CONVERT JST RESULT COPY *TM:RTN,A JNE A,$+2 JMP TIMER60 COPY A,TM:CUR JMP TIMER10 TIMER40 EXCH ABORT,A JNE A,TIMER50 EXCH ABORT,A TIMER50 COPY A,OHD JMP TIMER30 TIMER60 WRITE ENDMSG,BLANK COPY:M RTCSAVE,A,RTCINC COPY:M RTCSAVE1,A,RTCINC+1 COPY:M RTCSAVE2,A,RTCINC+2 SBIT 5,S CLOSE OUTIOB E:MON RTCRTN ENT TBIT 2,S JF OV,RTCRTN0 RBIT 2,S COPY A,SAVEA COPY:M =0,A,COUNTER JMP RTCRTN1 RTCRTN0 COPY A,SAVEA COPY:M =-1,A,COUNTER RTCRTN1 IMS RTCCNT JMP RTCRTN2 COPY:M TICKS,A,RTCINC COPY:M HIGH1,A,CNT:HIGH COPY:M LOW1,A,CNT:LOW JMP RTCRTN3 RTCRTN2 COPY:M =-1,A,ABORT RTCRTN3 COPY SAVEA,A IMS COUNTER SBIT 2,S SBIT 8,S JMP *RTCRTN SAVEA RES 1 OHD WORD 0 TM:CUR WORD 0 SCORE WORD 0 ABORT WORD 0 STRT WORD 0 RTCCNT WORD 0 TICKS RES 1,0 TICK4 RES 1,-4 RTCINC EQU :91 RTCSAVE WORD 0 RTCSAVE1 WORD 0 RTCSAVE2 WORD 0 COUNTER WORD 0 HBUFADDR WORD HBUF*2+4 JST1 JST *$+1 SETCTR WORD :0000 LPOOL TITL SERVICE SUBROUTINE BIN-ASCII CONVERT ENT * * SET UP FOR CONVERT *  COPY A,BUF COPY:M =HRT,A,PTR COPY:M =-4,A,KNT COPY HBUFADDR,A BUFFER DATA ADDR(RESOLUTION) EXCH BUF,A COPY =' ',X JGE A,$+3 NEG A,A MAKE POSITIVE COPY ='-',X COPY A,VALUE  INITIAL VALUE TO CONVERT SBIT 2,S COPYB X,*BUF PUT 'SIGN' IN BUFFER RBIT 2,S IMS BUF COPY =0,A COPY A,STFLG START OF FIELD FLAG * * OUTER LOOP - CONVERT NEXT DIGIT TO CHAR * BAC04 EQU  $ COPY VALUE,A GET REMAINING VALUE COPY ='0'-1,X INITIAL RESULT BAC08 EQU $ * * INNER LOOP - SUBTRACT CONVERTER TILL DIGIT DONE * ADD *PTR,A SUBTRACT OFF DIGIT ADD =1,X BUMP RESULT JGE  A,BAC08 LOOP TILL NEGATIVE SUB *PTR,A RESTORE VALUE COPY A,VALUE SAVE INTERMEDIATE IMS   PTR * * BLANK OUT START OF FIELD AND STORE CHAR * COPY STFLG,A JNE A,BAC12 GO IF FIELD BEGUN COPY *PTR,A NEXT DIGIT CONTROL JEQ A,BAC12 SKIP IF DECIMAL POINT NEXT CLSN ='0',X SKIP IF RESULT NOT ZERO COPY =' ',X REPLACE ZERO WITH SPACE JMP BAC12 LPOOL BAC12 EQU $ SBIT 2,S COPYB X,*BUF  STORE RESULT IN OUTPUT BUFFER RBIT 2,S IMS BUF CLSN =' ',X JMP $+2 COPY X,STFLG SET FIELD START IF CHAR NOT SPACE * * PLACE DECIMAL POINT IF REQUESTED * COPY *PTR,A GET NEXT CONTROL WORD  JNE A,BAC16 CONTINUE IF DECIMAL POINT NEXT COPY ='.',X IMS PTR JMP BAC12 STORE DECIMAL POINT BAC16 EQU $ IMS KNT BUMP DIGIT COUNTER JMP BAC04 LOOP UNTIL DONE * * PAD BUFFER WITH TERMINATOR DIGIT(S) * COPY =HRT2,X TERMINATOR TABLE(RESOLUTION) ADD VALUE,X +REMAINDER SHIFT X,LO,1 MAKE BYTE PTR SBIT 2,S COPYB 0(X),A GET FIRST CHAR COPYB A,*BUF STORE IN STRING  IMS BUF COPYB 1(X),A SECOND CHAR COPYB A,*BUF STORE IN STRING RBIT 2,S JMP *CONVERT LPOOL TITL RESULT OUTPUT ROUTINE RESULT ENT COPY TM:CUR,X COPY 1(X),X JEQ X,$+2 JMP RESULT40 COPY =80,Q COPY =BLANK+1,Y COPY =WTBUF+1,X COPY 0(Y),A RESULT10 COPY A,0(X) ADD =1,X JNED Q,RESULT10 IMS RESCNT JMP $+3 COPY =WTBUF+5,Y JMP RESULT22 COPY =HBUF,X COPY 0(X),A GET RESULT BYTE CNT ADD =1,X GET RESULT BUFFER ADDRESS SHIFT A,R,1 CHANGE TO WORD CNT COPY =WTBUF,Y GET WRITE BUFFER ADDRESS RESULT21 COPY 0(X),Q MOVE A WORD COPY Q,2(Y) ADD =1,X ADD =1,Y JNED A,RESULT21 RESULT22 COPY TM:CUR,X ADD =4,X POINT TO MESSAGE BYTE COUNT COPY 0(X),A GET IT ADD =1,X GET MESSAGE BUFFER ADDRESS SHIFT A,R,1 CHANGE BYTE CNT TO WORD CNT RESULT30 COPY 0(X),Q COPY Q,1(Y) ADD =1,X ADD =1,Y JNED A,RESULT30 COPY =:2020,A COPY A,0(Y) REMOVE TRASH FROM OUTPUT WRITE WTBUF RESULT40 JMP *RESULT VALUE WORD 0 CURRENT REMAINDER BUF WORD 0 BUFFER ADDR PTR  WORD 0 CONVERT TABLE POINTER KNT WORD 0 DIGIT COUNTER STFLG WORD 0 START OF FIELD FLAG BFTMP  WORD 0 RESCNT WORD 0 CONTEXT RES 9,0 LPOOL TITL TABLE STORAGE * * TEST LOOP COUNTER * CNT:LOW WORD 0 CNT:HIGH WORD 0 * * PRECISION CONVERTER TABLES * HRT WORD -4000,-400,-40,0,-4 HIGH RES CONVERT TABLE HRT2 WORD '0 ','0 ','5 ','5 ' * USE :FFFA E9EC FOR 333,332 AT TTLF (50NS RES) * USE :FFFF 63C0 FOR 40,000 AT 1.0 MS (50NS RES) * LOW1 WORD :E9EC LOW ORDER (50 NSEC RES) HIGH1 WORD :FFFA HIGH ORDER (50 NSEC RES) HEADING MSG '0 LSI-4/95 TIMING TEST PROGRAM (A000)' HEAD1 MSG ' REAL-TIME-CLOCK SHOULD BE SET TO TTLF' BLANK MSG ' ' HBUF MSG ' 0000.000 MICROSEC -' RESULT - HIGH RESOLUTION ERRMSG MSG ' I/O ERROR' ENDMSG MSG '0 LSI-4/95 TIMING PROGRAM....END' PERMSG MSG ' PARAMETER ERROR' NOFMSG MSG ' DOCUMENTATION NOT FOUND' WTBUF RES 1,80 RES 80,:2020 LPOOL TIMEREND EQU $ SAVE  END TIMER495 RESS RESULT21 COPY 0(X),Q MOVE A WORD COPY Q,2(Y) ADD =1,X ADD =1,Y JNED A,RESULT21 RESULT22 COPY TM:CUR, JTM:RTN CNT:LOW CNT:HIGHJTIMER495O0SEGMENTBLANK TIMER495o �KE:MON F:CONN F:CREA KE:UF E:GFN E:MONE KI:IO TIME:ST ii +¦›‚§A¦ *ÿ €¦”‚¡A¦™‚‹†Ž†•:žË‚˜C: žÆ# OC(PZ2(P ‚_E‚…„ƒ ž‹# 0‚VE‚… „ƒ ž‚# 1 †L¢Œþ Ÿ‹  †G¢‰þŸ† †B¢…þŸ�ÿt#g ¢—ÿ—C ž—žfÿ†-‚/Ãÿ�†- ¦+‚(M †)†) †(:+EžO+tt‚…†:+ BžOZ2¢þþ0¢ýÿý¢ýÿû¢üÿù¢ú ÿ÷ÿ‡òWƒö†èƒõ†çƒô†æ‚è‡ð ‚ñ‡ï£ð¦× †×‚á†ÝÞÜž~‚Ö‡ã ÿ†Ñƒå‡åƒå‡å¢Èà€€‚ ƒUœ@g  WƒÔ†À¢¾ �‚½1ËŽ¹’»Á’¹ ¾Û¿ÒƒqÁž‡†±žY’±Á’¯†«žt ¢Èÿº¢»ÿ¸‚­‡¹‚¬‡¸‚«‡·U¢® ÿ½Ÿ½ $6Å'†– † žƒ†’ÿ †œÞ•ž‡‚”‡¢ƒ¨‡¨ƒ¤‡¤ž‚ÿ†‰‚„Þ�%…Ÿeÿü ê¿€¡ ÀØñ‘’“ët¾³¿´rSt  †í‚¦†ìü†ë‚_’ç ) B)-†á%§à'ÞÞ †ß‚Ú )/‹Ú+=�׆ÔÞÕ‚Ö΃ÒL,0) ž‰œ�ž›œŸ�µ %§Â'ÞÀ, ž�¦Àƒ½Ã).Þº žtÞ¹žZ¢Šª³.%€€‡°Þ¯€�‡­'Ÿ<º  ¢ �1Až£IPâ²¢²€@„€+U½ Þ¢ž‚â¬žŠ¢«€€+â¨À€ÄB+ k»££+€€+À€ÄA+k» ‚š„@¢–ÿ˜ŸW ò15ó0 gg ð`þpÿØÿü0 0 5 5 éìÿú .0 LSI-4/95 TI MING TEST PROGRAM (A000) 0 REAL-TIME-C LOCK SHOULD BE SET TO TT LF  0000.000 MICR OSEC - I/O ERROR(0  LSI-4/95 TIMING PR OGRAM....END PARAMETER ERROR DOCUMENTATION NOT FOUNDPP u0800408112139d TITL LSI 4 INSTRUCTION EXECUTION TIMES - 4/95 BASIC TITL ** TMBAS95.ASM ** (84-93025-21-A000) * * ********************************************** ********************************************** ** ** **  TTTTTTT IIIII MM MM EEEEEE RRRRR ** ** T I M M M M E R R ** ** T I M M M EEEEE RRRRR ** ** T I M M E R R ** ** T IIIII M M EEEEEE R R ** **  ** ********************************************** ********************************************** * * * * LSI-4 INSTRUCTION EXECUTION TIMES * 4/95 STANDARD INSTRUCTION SET * TITL ADDRESSING MODES - BYTE MODE MACHINE :20 * * ADDRESSING MODES - BYTE MODE * INIT TIME 0,0,' LSI 4/95 BASIC INSTRUCTION SET ' TIME:INC CELLE WORD  0 TIME 0,0,'OV',OV SBIT 2,S COPYB CELL3,A RBIT 2,S TIME 0,0,'BYTE MODE - RELATIVE BACKWARDS' SBIT 2,S COPYB CELLE,A RBIT 2,S TIME 0,0,'BYTE MODE - RELATIVE FORWARDS' SBIT 2,S COPYB CELLF1,A RBIT 2,S TIME:INC CELLF1 WORD 0 BNDB1 WORD CELLE TIME 0,0,'OV',OV RBIT 6,S SBIT 2,S COPYB CELL3,X RBIT 2,S SBIT 6,S TIME 0,0,'BYTE MODE - RELATIVE BACKWARDS - INDIRECT 1 LEVEL' RBIT 6,S SBIT 2,S COPYB *BNDB1,X RBIT 2,S SBIT 6,S TIME 0,0,'BYTE MODE - RELATIVE FORWARDS - INDIRECT 1 LEVEL' RBIT 6,S SBIT 2,S COPYB *BNDF1,X RBIT 2,S SBIT 6,S  TIME:INC BNDF1 WORD CELLF CELLF WORD 0 TIME 0,0,'OV',OV SBIT 2,S COPYB $,X   RBIT 2,S TIME 0,0,'BYTE MODE - POST INDEXED' SBIT 2,S COPYB CELL3(X),Q RBIT 2,S TIME 0,0,'OV',OV RBIT 6,S SBIT 2,S COPYB $,X RBIT 2,S SBIT 6,S TIME 0,0,'BYTE MODE - SCRATCH - INDIRECT 1 LEVEL' RBIT 6,S SBIT 2,S COPYB *SIND1,X RBIT 2,S SBIT 6,S TIME 0,0,'BYTE MODE - POST INDEXED INDIRECT' RBIT 6,S SBIT 2,S COPYB *SIND1(X),Q RBIT 2,S SBIT 6,S TIME CELL3,0,'OV',OV COPY A,Y SBIT 2,S COPYB $,Q RBIT 2,S TIME CELL3,0,'BYTE MODE - PRE INDEXED' COPY A,Y SBIT 2,S COPYB 1(Y),Q RBIT 2,S TIME CELL3,0,'BYTE MODE - PRE INDEXED & POST INDEXED' COPY A,Y SBIT 2,S COPYB 0(X,Y),Q RBIT 2,S TIME 0,0,'OV',OV COPY A,Y RBIT 6,S SBIT 2,S COPYB $,Q RBIT 2,S SBIT 6,S TIME 0,0,'BYTE MODE - PRE INDEXED INDIRECT' COPY A,Y RBIT 6,S SBIT 2,S COPYB *SIND1(Y),Q RBIT 2,S SBIT 6,S TIME 0,0,'BYTE MODE - PRE INDEXED INDIRECT POST INDEXED' COPY A,Y RBIT 6,S SBIT 2,S COPYB *SIND1(X,Y),Q RBIT 2,S SBIT 6,S TIME:INC TITL MEMORY REFERENCE SINGLE WORD - BYTE MODE * * MEMORY REFERENCE - SINGLE WORD * BYTE MODE * TIME 0,0,'OV',OV SBIT 2,S RBIT 2,S TIME 0,0,'BYTE MODE - COPYB MEMORY TO REG' SBIT 2,S COPYB CELL3,A RBIT 2,S TIME 0,0,'BYTE MODE - COPYB REG TO MEMORY' SBIT 2,S COPYB A,CELL3 RBIT 2,S TIME 0,0,'BYTE MODE - ADDB MEMORY TO REG'  SBIT 2,S ADDB CELL3,A RBIT 2,S TIME 0,0,'BYTE MODE - EXCHB MEMORY WITH REG' SBIT 2,S EXCHB CELL3,A RBIT 2,S TIME 0,0,'BYTE MODE - ANDB MEMORY TO REG' SBIT 2,S  ANDB CELL3,A RBIT 2,S TIME 0,0,'BYTE MODE - ORB MEMORY WITH REG' SBIT 2,S ORB CELL3,A RBIT 2,S TIME 0,0,'BYTE MODE - XORB MEMORY WITH REG' SBIT 2,S XORB CELL3,A  RBIT 2,S TIME 0,0,'BYTE MODE - CSKB - REG < MEMORY - NO SKIP' SBIT 2,S CSKB A,CELL1+1  RBIT 2,S TIME :0F0F,0,'BYTE MODE - CSKB - REG > MEMORY - SKIP + 1' SBIT 2,S CSKB A,CELL0 HLT RBIT 2,S TIME 0,0,'BYTE MODE - CSKB - REG = MEMORY - SKIP + 2' SBIT 2,S  CSKB A,CELL0 HLT HLT RBIT 2,S TIME:INC TITL ADDRESSING MODES - WORD MODE * * ADDRESSING MODES - WORD MODE * INDB2 WORD INDB1;:8000 INDB1 WORD CELLA CELLA WORD 0 TIME 0,0,'OV',OV COPY CELL3,X TIME 0,0,'RELATIVE BACKWARDS' COPY CELLA,X TIME 0,0,'OH',OV RBIT 6,S COPY CELL3,X SBIT 6,S TIME 0,0,'RELATIVE BACKWARDS - INDIRECT 1 LEVEL' RBIT 6,S COPY *INDB1,X SBIT 6,S  TIME 0,0,'RELATIVE BACKWARDS - INDIRECT 2 LEVELS' RBIT 6,S COPY *INDB2,X SBIT 6,S TIME 0,0,'OH',OV COPY CELL 3,X TIME 0,0,'RELATIVE FORWARDS' COPY CELLB,X TIME 0,0,'OH',OV RBIT 6,S COPY CELL3,X SBIT 6,S  TIME 0,0,'RELATIVE FORWARD - INDIRECT 1 LEVEL' RBIT 6,S COPY *INDF1,X SBIT 6,S TIME 0,0,'RELATIVE FORWARD - INDIRECT 2 LEVELS' RBIT 6,S COPY *INDF2,X SBIT 6,S TIME:INC INDF2 WORD INDF1;:8000 INDF1 WORD CELLB CELLB WORD 0 TIME 0,0,'OV',OV COPY CELL3,X TIME 0,0,'OH',OV RBIT 6,S COPY CELL3,X SBIT 6,S TIME 0,0,'SCRATCH - INDIRECT 1 LEVEL' RBIT 6,S COPY *SIND1,X SBIT 6,S TIME 0,0,'SCRATCH - INDIRECT 2 LEVELS' RBIT 6,S COPY *SIND2,X SBIT 6,S TIME 0,0,'OH',OV COPY CELL3,Q TIME 0,0,'POST INDEXED' COPY CELL3(X),Q TIME 0,0,'OV',OV COPY A,Y COPY CELL3,Q TIME 0,0,'PRE-INDEXED' COPY A,Y COPY CELL3(Y),Q TIME 0,0,'PRE-INDEXED & POST-INDEXED' COPY A,Y  COPY CELL3(X,Y),Q TIME 0,0,'OV',OV RBIT 6,S COPY CELL3,Q SBIT 6,S TIME 0,0,'INDIRECT POST-INDEXED' RBIT 6,S COPY *SIND1(X),Q SBIT 6,S TIME 0,0,'OV',OV COPY A,Y RBIT 6,S COPY CELL3,Q SBIT 6,S TIME 0,0,'PRE-INDEXED INDIRECT' COPY A,Y RBIT 6,S COPY *SIND1(Y),Q SBIT 6,S TIME 0,0,'PRE-INDEXED - INDIRECT - POST-INDEXED' COPY A,Y RBIT 6,S COPY *SIND1(X,Y),Q SBIT 6,S TIME:INC TITL MEMORY REFERENCE SINGLE WORD - WORD MODE * * MEMORY REFERENCE - SINGLE WORD * WORD MODE * TIME :A,:B,'OV',OV TIME :A,:B,'COPY MEMORY TO REG' COPY CELL1,A TIME :A,:B,'COPY REG TO MEMORY' COPY A,CELL3  TIME :A,:B,'ADD - ADD MEMORY TO REG' ADD CELL1,A TIME :A,:B,'SUB - SUBTRACT MEMORY FROM REG'  SUB CELL1,A TIME :A,:B,'EXCH - EXCHANGE MEMORY WITH REG' EXCH CELL3,A TIME 0,0,'AND - AND MEMORY TO REG' AND CELL1,A TIME 0,0,'OR - INCLUSIVE OR MEMORY TO REG' OR CELL1,A  TIME 0,0,'XOR - EXCLUSIVE OR MEMORY TO REG' XOR CELL1,A TIME 0,0,'CSK - REG < MEMORY - NO SKIP'  CSK A,CELL1 TIME 1,0,'CSK - REG > MEMORY - SKIP + 1' CSK A,CELL0 HLT TIME 0,0,'CSK - REG = MEMORY - SKIP + 2' CSK A,CELL0 HLT HLT TIME 0,0,'OV',OV NOP TIME 0,0,'JMP - UNCONDITIONAL JUMP' JMP MEMLC0 MEMLC0 NOP TIME 0,0,'OV',OV JMP *CONT0 CONT0 WORD CONT1 CONT1 JMP CONT3 CONT3 NOP TIME 0,0,'JST - JUMP & STORE PROGRAM COUNTER' JST SUB0 JMP  CONT2 SUB0 ENT JMP *SUB0 CONT2 NOP TIME 0,0,'OV',OV COPY A,CELL3 TIME :FFFF,0,'IMS - INCR MEMORY & SKIP IF ZERO - SKIP' COPY A,CELL3 IMS CELL3 HLT TIME 1,0,'IMS - INCR MEMORY & SKIP IF ZERO - NO SKIP' COPY A,CELL3 IMS CELL3 TIME:INC STKBOT EQU $  RES 6,:1111 STKTOP WORD 0 SAVEK WORD 0 SAVEL WORD 0 LPOOL TIME 0,0,'OV',OV JST STKSET NOP JST STKEN D TIME 0,0,'JSK - JUMP & STACK' JST STKSET JSK SUB1 SUB1 NOP JST STKEND TITL REGISTER - REGISTER * * REGISTER - REGISTER * TIME 0,0,'OV',OV TIME :A,:B,'COPY - COPY REG TO REG' COPY A,X TIME 0,0,'NEG - NEGATE REG TO REG' NEG A,X TIME :A,:B,'ADD - ADD REG TO REG' ADD  A,X TIME :A,:B,'SUB - SUBTRACT REG FROM REG' SUB A,X TIME 0,0,'AND - AND REG TO REG'  AND A,X TIME 0,0,'OR - INCLUSIVE OR REG TO REG' OR A,X TIME 0,0,'XOR - EXCLUSIVE OR REG TO REG' XOR A,X TIME 0,0,'CSN REG-REG - NO SKIP' CSN A,X TIME 0,1,'CSN REG-REG - SKIP + 1' CSN A,X HLT TIME 0,1,'CSK REG-REG - NO SKIP' CSK A,X TIME 2,1,'CSK REG-REG - SKIP + 1' CSK A,X HLT TIME 0,0,'CSK REG-REG - SKIP + 2' CSK A,X  HLT HLT TIME :A,:B,'EXCH - EXCHANGE REG WITH REG' EXCH A,X TIME 0,0,'COMP - 1''S COMPLEMENT REG TO REG' COMP A,X TIME 0,1,'CSM - REG-REG - NO SKIP' CSM A,X TIME 2,1,'CSM - REG-REG - SKIP + 1' CSM A,X HLT TIME 0,0,'CSM - REG-REG - SKIP + 2' CSM A,X HLT HLT TITL CONTROL INSTRUCTIONS * * CONTROL * TIME 0,0,'OV',OV TIME 0,0,'FMT - FETCH MACHINE TYPE' FMT A TIME 0,0,'UIS - UPDATE INTERRUPT STATUS' UIS TIME 0,0,'OV',OV NOP TIME 0,0,'XNX - INDEX NEXT INSTRUCTION' XNX A NOP TIME 0,0,'OH'O,OV JST STKSET COPY =RSKRTN1,A COPY K,Y COPY A,0(Y) RSKRTN1 JST STKEND TIME 0,0,'RSK - RETURN THROUGH STACK' JST STKSET COPY =RSKRTN2,A COPY K,Y COPY A,0(Y) RSK RSKRTN2 JST STKEND LOC0 EQU $ TITL I/O INSTRUCTIONS * * I/O INSTRUCTIONS * TIME 0,0,'OV',OV TIME 0,0,'OUT - OUTPUT REGISTER' OUT A,04 TIME 0,0,'IN - INPUT TO REGISTER' IN 04,A TIME 0,0,'SELP - SELECT AND PRESENT' SELP A,04  TIME 0,0,'SST - SENSE & SKIP IF TRUE' SST 04 TITL IMMEDIATE INSTRUCTIONS * * IMMEDIATE INSTRUCTIONS * IMMED TIME 0,0,'OV',OV TIME 0,0,'IMMEDIATE - COPY - LOAD BYTE NEGATIVE' COPY =-1,A TIME 0,0,'IMMEDIATE - COPY - LOAD BYTE POSITIVE' COPY =1,A TIME 0,0,'IMMEDIATE - SUB - SUBTRACT BYTE'  SUB =1,A TIME 0,0,'IMMEDIATE - ADD - ADD BYTE' ADD =1,A TIME 1,0,'IMMEDIATE - CLSN - COMPARE EQUAL - NO SKIP' CLSN =1,A TIME 0,0,'IMMEDIATE - CLSN - COMPARE EQUAL - SKIP OCCURS' CLSN =1,A NOP TIME 0,0,'IMMEDIATE - CSK - COMPARE 3 WAY - NO SKIP' CSK A,=1 TIME 1,0,'IMMEDIATE - CSK - COMPARE 3 WAY - SKIP + 1' CSK A,=0 HLT TIME 1,0,'IMMEDIATE - CSK - COMPARE 3 WAY - SKIP + 2' CSK A,=1 HLT HLT TIME 0,0,'IMMEDIATE - AND - AND TO REGISTER'   AND =1,A TIME 0,0,'IMMEDIATE - OR - INCLUSIVE OR TO REGISTER' OR =1,A TIME 0,0,'IMMEDIATE - XOR - EXCLUSIVE OR TO REGISTER' XOR =1,A TITL SINGLE REGISTER SHIFTS * * SINGLE REGISTER SHIFTS * * LEFT LOGICAL * TIME 0,0,'OV',OV TIME 0,0,'SHIFT LEFT 1 PLACE' SHIFT A,L,1 TIME  0,0,'OV',OV SHIFT A,L,1 TIME 0,0,'SHIFT 10 ADDITIONAL PLACES - SINGLE REGISTER' SHIFT A,L,11 * * LEFT LOGICAL THRU OV * TIME 0,0,'OV',OV TIME 0,0,'SHIFT LEFT W/OV 1 PLACE' SHIFT A,LO,1 * * LEFT ROTATE * TIME 0,0,'OV',OV TIME 0,0,'ROTATE LEFT 1 PLACE' ROTATE A,L,1 * * LEFT ROTATE THRU OV * TIME 0,0,'OV',OV TIME 0,0,'ROTATE LEFT W/OV 1 PLACE' ROTATE A,LO,1 * * RIGHT LOGICAL * TIME 0,0,'OV',OV TIME 0,0,'SHIFT RIGHT 1 PLACE' SHIFT A,R,1 * * RIGHT LOGICAL WITH OV * TIME 0,0,'OV',OV TIME 0,0,'SHIFT RIGHT W/OV 1 PLACE' SHIFT A,RO,1 * * RIGHT ROTATE *  TIME 0,0,'OV',OV TIME 0,0,'ROTATE RIGHT 1 PLACE' ROTATE A,R,1 * * ROTATE RIGHT THRU OV * TIME 0,0,'OV',OV TIME 0,0,'ROTATE RIGHT W/OV 1 PLACE' ROTATE A,RO,1 * * RIGHT ARITHMETIC * TIME  0,0,'OV',OV TIME 0,0,'ARITHMETIC SHIFT RIGHT 1 PLACE' SHIFT A,RA,1 TITL DOUBLE REGISTER SHIFTS * * DOUBLE REGISTER SHIFTS * TIME 0,0,'OV',OV TIME 0,0,'DOUBLE REG LEFT LOGICAL 1 PLACE' SHIFT AX,L,1 TIME 0,0,'OV',OV SHIFT AX,L,1 TIME 0,0,'SHIFT 10 ADDITIONAL PLACES - DOUBLE REGISTER'  SHIFT AX,L,11 * * DOUBLE REG - LEFT LOGICAL THRU OV * TIME 0,0,'OV',OV TIME 0,0,'DOUBLE REG LEFT LOGICAL THRU OV 1 PLACE' SHIFT AX,LO,1 * * DOUBLE REG - LEFT ROTATE * TIME 0,0,'OV',OV TIME 0,0,'DOUBLE REG LEFT ROTATE 1 PLACE' ROTATE AX,L,1 * * DOUBLE REG - LEFT ROTATE THRU OV * TIME 0,0,'OV',OV TIME 0,0,'DOUBLE REG LEFT ROTATE THRU OV 1 PLACE' ROTATE AX,LO,1 * * DOUBLE REG - RIGHT LOGICAL *  TIME 0,0,'OV',OV TIME 0,0,'DOUBLE REG RIGHT LOGICAL 1 PLACE' SHIFT AX,R,1 * * DOUBLE REG - RIGHT LOGICAL THRU OV * TIME 0,0,'OV',OV TIME 0,0,'DOUBLE REG RIGHT LOGICAL THRU OV 1 PLACE' SHIFT AX,RO,1 * * DOUBLE REG - RIGHT ROTATE * TIME 0,0,'OV',OV TIME 0,0,'DOUBLE REG RIGHT LOGICAL 1 PLACE'  SHIFT AX,R,1 * * DOUBLE REG - RIGHT ROTATE THRU OV * TIME 0,0,'OV',OV TIME 0,0,'DOUBLE REG RIGHT ROTATE THRU OV 1 PLACE' ROTATE AX,RO,1 * * DOUBLE REG - RIGHT ARITHMETIC * TIME 0,0,'OV',OV TIME 0,0,'DOUBLE REG RIGHT ARITHMETIC 1 PLACE' SHIFT AX,RA,1 TITL STACK OPERATIONS * * STACK OPERATIONS *  TIME 0,0,'OV',OV JST STKSET JST STKEND TIME 0,0,'PUSH - STORE REGISTERS ONTO STACK' JST STKSET PUSH 0 JST STKEND TIME 0,0,'OV',OV JST STKSET COPY =STKBOT,Q COPY Q,K COPY CELL0  ,Q COPY Q,L JST STKEND TIME 0,0,'POP - LOAD REGISTERS FROM STACK' JST STKSET COPY =STKBOT,Q  COPY Q,K COPY CELL0,Q COPY Q,L POP JST STKEND TITL CONDITIONAL JUMPS * * CONDITIONAL JUMPS * TIME 0,0,'OV',OV TIME 0,0,'JEQ - JUMP IF ZERO - JUMP OCCURS' JEQ A,MEMLC9 MEMLC9 TIME 1,0,'JEQ - JUMP IF ZERO - NO JUMP' JEQ A,MEMLCA MEMLCA TIME 1,0,'JNE - JUMP IF NON-ZERO - JUMP OCCURS' JNE A,MEMLCB MEMLCB TIME 0,0,'JNE - JUMP IF NON-ZERO - NO JUMP' JNE A,MEMLCC MEMLCC TIME 1,0,'JGT - JUMP IF > ZERO - JUMP OCCURS' JGT A,MEMLCD MEMLCD TIME 0,0,'JGT - JUMP IF > ZERO - NO JUMP'  JGT A,MEMLCE MEMLCE TIME 0,0,'JLE - JUMP IF < OR = ZERO - JUMP OCCURS' JLE A,MEMLCF MEMLCF TIME 1,0,'JLE - JUMP IF < OR = ZERO - NO JUMP' JLE A,MEMLCG MEMLCG TIME 0,0,'JGE - JUMP IF > OR = ZERO - JUMP OCCURS'  JGE A,MEMLCH MEMLCH TIME :FFFF,0,'JGE - JUMP IF > OR = ZERO - NO JUMP' JGE A,MEMLCI MEMLCI TIME  :FFFF,0,'JLT - JUMP IF < ZERO - JUMP OCCURS' JLT A,MEMLCJ MEMLCJ TIME 0,0,'JLT - JUMP IF < ZERO - NO JUMP'  JLT A,MEMLCK MEMLCK TIME :FFFF,0,'IJEQ - INCR & JUMP IF ZERO - INCR & JUMP' IJEQ A,MEMLCL MEMLCL TIME 1,0,'IJEQ - INCR & JUMP IF ZERO - INCR ONLY' IJEQ A,MEMLCM MEMLCM TIME 0,0,'IJNE - INCR & JUMP IF NON-ZERO - INCR & JUMP' IJNE A,MEMLCN MEMLCN TIME :FFFF,0,'IJNE - INCR & JUMP IF NON-ZERO - INCR ONLY' IJNE A,MEMLCO MEMLCO TIME 0,0,'JEQD - DECR & JUMP IF :FFFF - DECR & JUMP' JEQD A,MEMLCP MEMLCP TIME 2,0,'JEQD - DECR & JUMP IF :FFFF - DECR ONLY' JEQD A,MEMLCQ MEMLCQ TIME 1,0,'JNED - DECR & JUMP IF NOT :FFFF - DECR & JUMP' JNED A,MEMLCR MEMLCR TIME 0,0,'JNED - DECR & JUMP IF NOT :FFFF - DECR ONLY' JNED A,MEMLCS MEMLCS TIME 1,0,'OV',OV OUT A,0 DA=0, FL=0 TURN ON SENSE SWITCH TIME 1,0,'JT SS - JUMP OCCURS' OUT A,0 TURN ON SENSE SWITCH JT SS,MEMLCW MEMLCW TIME 0,0,'JT SS - NO JUMP' OUT A,0 TURN OFF SENSE SWITCH JT SS,MEMLCX MEMLCX TIME 0,0,'JF SS - JUMP OCCURS' OUT A,0 TURN OFF SENSE SWITCH JF SS,MEMLCY MEMLCY TIME 1,0,'JF SS - NO JUMP' OUT A,0 TURN ON SENSE SWITCH  JF SS,MEMLC4 MEMLC4 TIME :170,0,'OV',OV COPY A,S TIME :172,0,'JT OV - JUMP OCCURS' COPY A,S JT OV,MEMLC5 MEMLC5 TIME :170,0,'JT OV - NO JUMP' COPY A,S JT OV,MEMLC6 MEMLC6 TIME :170,0,'JF OV - JUMP OCCURS' COPY A,S JF OV,MEMLC7 MEMLC7 TIME :172,0,'JF OV - NO JUMP'  COPY A,S JF OV,MEMLC8 MEMLC8 TIME :171,0,'JT CY - JUMP OCCURS' COPY A,S JT CY,MEMLC1 MEMLC1 TIME :170,0,'JT CY - NO JUMP' COPY A,S JT CY,MEMLC2 MEMLC2 TIME :170,0,'JF CY - JUMP OCCURS' COPY A,S JF CY,MEMLC3 MEMLC3 TIME :171,0,'JF CY - NO JUMP' COPY A,S J  F CY,EXTEN EXTEN TIME:INC TITL EXTENDED ADDRESSING MODE INSTRUCTIONS * * EXTENDED INSTRUCTIONS * ENDB1  WORD CELLM CELLM WORD 0 TIME 0,0,'OV',OV ADDC CELL3,Q TIME 0,0,'EXTENDED - RELATIVE BACKWARDS' ADDC CELLM,Q TIME 0,0,'EXTENDED - RELATIVE BACKWARDS - INDIRECT 1 LEVEL' ADDC *ENDB1,Q  TIME 0,0,'EXTENDED - RELATIVE FORWARDS' ADDC CELLN,Q TIME 0,0,'EXTENDED - RELATIVE FORWARDS - INDIRECT 1 LEVEL' ADDC *ENDF1,Q TIME:INC ENDF1 WORD CELLN CELLN WORD 0 TIME 0,0,'EXTENDED - POST INDEXED' ADDC CELL3(X),Q TIME 0,0,'EXTENDED - POST INDEXED INDIRECT' ADDC *SIND1(X),Q  TIME 0,0,'OV',OV COPY CELL0,Y ADDC CELL3,Q TIME 0,0,'EXTENDED - PRE INDEXED'  COPY CELL0,Y ADDC CELL3(Y),Q TIME 0,0,'EXTENDED - PRE INDEXED INDIRECT' COPY CELL0,Y  ADDC *SIND1(Y),Q TIME 0,0,'EXTENDED - PRE AND POST INDEXED' COPY CELL0,Y ADDC CELL3(X,Y),Q  TIME 0,0,'EXTENDED - PRE AND POST INDEXED INDIRECT' COPY CELL0,Y ADDC *SIND1(X,Y),Q TIME  0,0,'OV',OV TIME 0,0,'EXTENDED - COPYE - LOAD ' COPYE CELL3,Q TIME 0,0,'EXTENDED - COPYE - STORE ' COPYE A,CELL3 TIME 0,0,'EXTENDED - ADD ' ADDE CELL0,A TIME 0,0,'EXTENDED - SUBTRACT ' SUBE CELL0,A TIME 0,0,'EXTENDED - EXCHANGE ' EXCHE A,CELL3 TIME 0,0,'CEA - COMPUTE EFFECTIVE ADDRESS' CEA CELL0,A TIME 0,0,'EXTENDED AND' ANDE CELL0,A TIME 0,0,'EXTENDED OR' ORE CELL0,A TIME 0,0,'EXTENDED XOR' XORE CELL0,A TIME 0,0,'ADDC - ADD WITH CARRY' ADDC CELL2,A TIME 0,0,'SUBC - SUB WITH CARRY' SUBC CELL0,A TIME 0,0,'CSME - REG < MEM CELL - NO SKIP' CSME A,CELL1 TIME 2,0,'CSME - REG > MEM CELL - SKIP + 1' CSME A,CELL0 HLT TIME 0,0,'CSME - REG = MEM CELL - SKIP + 2' CSME A,CELL0 HLT HLT  TIME 0,0,'CSKE - REG < MEM CELL - NO SKIP' CSKE A,CELL2 TIME 2,0,'CSKE - REG > MEM CELL - SKIP + 1' CSKE A,CELL0 HLT TIME 0,0,'CSKE - REG = MEM CELL - SKIP + 2' CSKE A,CELL0 HLT HLT TIME 0,0,'EXTENDED - JUMP' JMPE EX EX TIME 0,0,'OV',OV JMP *J1 J1  WORD J2 J2 JMP J3 J3 NOP TIME 0,0,'EXTENDED JUMP & STORE ' JSTE J4 JMP J5 J4 ENT JMP *J4 J5 NOP TIME 0,0,'OV',OV COPY A,CELL3 TIME :FFFF,0,'EXTENDED IMS - INCREMENT AND SKIP' COPY A,CELL3 IMSE CELL3 HLT TIME 1,0,'EXTENDED IMS - INCREMENT ONLY' COPY A,CELL3 IMSE CELL3 TIME 0,0,'OV',OV TIME 0,0,'MUL - MULTIPLY MEMORY BY REGS' MUL CELL1,AX TIME 0,0,'DIV - DIVIDE REGS BY MEMORY' DIV CELL1,AX TIME 0,0,  'OV',OV JST STKSET NOP JST STKEND TIME 0,0,'EXTENDED JUMP & STACK' JST STKSET JSKE SUB4 SUB4  NOP JST STKEND TIME 0,0,'OV',OV COPY A,CELL3 TIME 0,0,'EXTENDED DMS - DECREMENT AND SKIP'  COPY A,CELL3 DMSE CELL3 HLT TIME 5,0,'EXTENDED DMS - DECREMENT ONLY' COPY A,CELL3 DMSE CELL3 * * DOUBLE-LOAD AND DOUBLE STORE * TIME 0,0,'OV',OV TIME 0,0,'EXTENDED - DOUBLE LOAD ' COPYE STKBOT,AQ TIME 0,0,'EXTENDED - DOUBLE STORE' COPYE AQ,STKBOT TITL TRAP INSTRUCTIONS * * TRAP OVERHEAD * TIME 0,0,'OV',OV JST TRAPSET JMP *L1 FORCE AN INDIRECT JUMP L2 SIN 1 NOP JST TRAPSET TIME:INC L1 WORD L2 SET1 WORD :9F80 SET2 WORD CONTIN SET3 WORD :9F80 SET4 WORD T1 * * UTRAP - USER TRAP * TIME 0,0,'UTRAP - USER TRAP' JST TRAPSET UTRAP A,0 CONTIN SIN  1 NOP JST TRAPSET * * STRAP - SYSTEM TRAP * TIME 0,0,'STRAP - SYSTEM TRAP' JST TRAPSET STRAP A,0 T1 SIN 1 NOP JST TRAPSET TITL STATUS CHANGE INSTRUCTIONS * * STATUS CHANGE * TIME  0,0,'OV',OV TIME 0,0,'SBIT - SET GENERAL PURPOSE REGISTER BIT' SBIT 0,A TIME 0,0,'RBIT - RESET GENERAL PURPOSE REGISTER BIT' RBIT 0,A TIME 0,0,'CBIT - COMPLEMENT GENERAL PURPOSE REGISTER BIT'  CBIT 0,A TIME 0,0,'TBIT - TRANSFER GENERAL PURPOSE REG. BIT TO OV' TBIT 0,A TIME 0,0,'SBIT - STATUS REGISTER' SBIT 1,S TIME 0,0,'RBIT - STATUS REGISTER' RBIT 1,S TIME 0,0,'CBIT - STATUS REGISTER' CBIT 1,S TIME 0,0,'TBIT - STATUS REGISTER' TBIT 0,S TIME 0,0,'OV',OV NOP TIME 0,0,'SIN - STATUS INHIBIT' SIN  1 NOP TITL FLOATING POINT INSTRUCTIONS * * FLOATING POINT * TIME 0,0,'OH',OV COPY CELF5,A COPY CELF6,Q TIME 0,0,'FLOATING POINT - FIX' COPY CELF5,A COPY CELF6,Q  FIX TIME 0,0,'OH',OV COPY CELF7,A COPY CELF8,Q TIME 0,0,'FLOATING POINT - FLOAT' COPY CELF7,A COPY CELF8,Q FLOAT TIME 0,0,'OH',OV COPY CELF1,A COPY CELF2,Q TIME 0,0,'FLOATING POINT - ADD - NO ALIGN' COPY CELF1,A COPY CELF2,Q ADDF  FLOAT1 TIME 0,0,'FLOATING POINT - ADD - ALIGN ACC 1' COPY CELF1,A COPY CELF2,Q ADDF  FLOAT2 TIME 0,0,'FLOATING POINT - ADD - ALIGN ACC 11' COPY CELF1,A COPY CELF2,Q ADDF FLOAT3 TIME 0,0,'FLOATING POINT - ADD - NO ALIGN - DIFFERENT SIGNS' COPY CELFB,A COPY CELF2,Q ADDF FLOAT1 TIME 0,0,'FLOATING POINT - SUB - NO ALIGN' COPY CELF1,A COPY CELF2,Q  SUBF FLOAT1 TIME 0,0,'FLOATING POINT - SUB - ALIGN ACC 1' COPY CELF1,A COPY CELF2,Q  SUBF FLOAT2 TIME 0,0,'FLOATING POINT - SUB - ALIGN ACC 11' COPY CELF1,A COPY CELF2,Q   SUBF FLOAT3 TIME 0,0,'FLOATING POINT - SUB - NO ALIGN - DIFFERENT SIGNS' COPY CELFB,A COPY CELF2,Q SUBF FLOAT1 TIME 0,0,'OH',OV COPY CELF3,A COPY CELF4,Q TIME  0,0,'FLOATING POINT - MULTIPLY' COPY CELF3,A COPY CELF4,Q MULF FLOAT4 TIME 0,0,'FLOATING POINT - DIVIDE' COPY CELF3,A COPY CELF4,Q DIVF FLOAT5 TIME 0,0,'OH',OV  COPY CELF9,A COPY CELFA,Q TIME 0,0,'FLOATING POINT - COMPARE LESS THAN' COPY CELF9,A  COPY CELFA,Q CSKF FLOAT6 TIME 0,0,'FLOATING POINT - COMPARE GREATER THAN' COPY CELF9,A  COPY CELFA,Q CSKF FLOAT7 HLT TIME 0,0,'FLOATING POINT - COMPARE EQUAL' COPY CELF9,A COPY CELFA,Q CSKF FLOAT8 HLT HLT TIME:INC TIME:END TITL DATA * * DATA * STATUS WORD :170 STKSET ENT COPY K,Q COPY Q,SAVEK COPY L,Q COPY Q,SAVEL COPY =STKTOP,Q COPY Q,K COPY X,L JMP *STKSET STKEND ENT COPY STATUS,Q COPY Q,S COPY SAVEK,Q COPY Q,K COPY SAVEL,Q COPY Q,L JMP *STKEND TRAPSET ENT COPY SET1,A EXCH A,:A2 COPY A,SET1 COPY SET2,A EXCH A,:A3 COPY A,SET2 COPY SET3,A EXCH A,:A6 COPY A,SET3 COPY SET4,A EXCH A,:A7 COPY A,SET4 JMP *TRAPSET ABS :6 SIND2 WORD SIND1;:8000 SIND1 WORD CELL3 CELL0 WORD 0 CONTENTS DO NOT CHANGE CELL1 WORD 1 CONTENTS DO NOT CHANGE CELL2 WORD 2 CONTENTS DO NOT CHANGE CELL3 WORD 0  CONTENTS MAY BE CHANGED CELL4 WORD LOC0 TITL DATA - FLOATING POINT ABS :2200 TO FORCE THE SAME ADDRESSING MODES FOR TEST LOOPS CELF1 WORD :5144 CELF2 WORD :3D4E FLOAT1 WORD :511E WORD :FB4C FLOAT2 WORD :519E WORD :FB4C FLOAT3 WORD :569E WORD :FB4C CELF3 WORD :487E CELF4 WORD :DC00 FLOAT4 WORD :C85E WORD :AD00 FLOAT5 WORD :D05D WORD :AF03 CELF5 WORD :4FFF CELF6 WORD :FFFF CELF7 WORD :7FFF CELF8 WORD :FF80 CELF9 WORD :0000 CELFA WORD :0000 FLOAT6 WORD :0000 WORD :0001 FLOAT7  WORD :8000 WORD :0001 FLOAT8 WORD :0000 WORD :0000 CELFB WORD :D144 END AL' COPY CELF9,A COPY CELFA,Q CSKF FLOAT8 HLT HLT TIME:INC TIME:END TITL DATAJTIME:ST O0SEGMENTBLANK o¶KCNT:HIGHCNT:LOW TM:RTN ig , LS I 4/95 BASIC INSTRUCTION SET ß…ž~ß„ž|¿ƒttt!&&OV&,@, %€'ßrž{ßqžy¿p466 BYTE MODE - RELATIVE BACKWARDS6JJ %‚2'ßTž{ßSžy¿RRSS BYTE MODE - RELATIVE FORWARDS Sgg %‚�'ß7ž{ß6žy¿5%ossOVsy@y g% 'eß#žyß"žw¿!ƒ…… 2BYTE MODE - RE LATIVE BACKWARDS - INDIRECT 1 LEVEL …££ g%£L'eß…žyß„žw¿ƒttt­±± 0BYTE MODE - RE LATIVE FORWARDS - INDIRECT 1 LEVEL±ÎÎ g%£‰'eßZžyßYžw¿X  ÛØÜÜOVÜâ@â %¢~'ßHž{ßGžy¿Fêëë BYTE MODE - POST INDEXEDëüü %À–'ß.ž{ß-žy¿,OV @  g%¢~'eßžyßžw¿ &BYTE MODE - SC RATCH - INDIRECT 1 LEVEL.. g%¡'eß…žyß„žw¿ƒttt8== "BYTE MODE - PO ST INDEXED INDIRECT =SS g%Á‡'eß`žyß_žw¿^]^^ OV^d@d `%Â~'ßPžzßOžx¿Nmnn BYTE MODE - PRE INDEXED n `%ÀA'ß5žzß4žx¿3ˆ‰‰ &BYTE MODE - PR E INDEXED & POST INDEXED‰¡¡ `%ÀÀ'ßžzßžx¿ª««OV«±@± `g%Â~'eßžx߃žv¿‚tt¼¿¿ BYTE MODE - PR E INDEXED INDIRECT¿ÔÔ `g%ÁG'eß…žxß`žv¿_tßáá .BYTE MODE - PR E INDEXED INDIRECT POST INDEXED áýý `g%ÁÇ'eß\žxß7žv¿6  OV @%'ßNž|ß)žz¿( BYTE MODE - CO PYB MEMORY TO REG ,, %€'ß0ž{ß žy¿ 466 BYTE MODE - CO PYB REG TO MEMORY 6KK %„'ßž{߃žy¿‚ttSWW BYTE MODE - ADDB MEMORY TO REGWkk %ˆ'ß…ž{ßcžy¿btsvv "BYTE MODE - EX CHB MEMORY WITH REG vŒŒ %�'ßdž{ßBžy¿A”–– BYTE MODE - ANDB MEMORY TO REG–ªª %”'ßFž{ß$žy¿#²´´ BYTE MODE - OR B MEMORY WITH REG ´ÉÉ %´'ß'ž{ßžy¿ÑÓÓ BYTE MODE - XO RB MEMORY WITH REGÓèè %˜'ßž{߃žy¿‚ttðôô *BYTE MODE - CS KB - REG < MEMORY - NO SKIP ô %¸'ß…ž{ß]žy¿\t *BYTE MODE - CS KB - REG > MEMORY - SKIP + 133 %¸ 'ß_žzß7žx¿6<>> *BYTE MODE - CS KB - REG = MEMORY - SKIP + 2>XX %¸  'ß9žyßžw¿ƒefbggOVgm@m  ß(ž}ßž{¿‚ tsvv RELATIVE BACKWARDSv„„¢aßž}߃ž{¿ktŠŒŒOHŒ’@’ g  eßž{ßsžy¿[š›› &RELATIVE BACKW ARDS - INDIRECT 1 LEVEL ›³³ g£0eß…ž{ßRžy¿:t»½½ &RELATIVE BACKW ARDS - INDIRECT 2 LEVELS½ÕÕ g£ eßcž{ß0žy¿ÝÞÞOHÞä@ä  ßVž}ß#ž{¿ êëë RELATIVE FORWARDS ëùù¢ÞßAž}ßž{¿�tÿOH@ g  eß0ž{ß„žy¿p t $RELATIVE FORWA RD - INDIRECT 1 LEVEL ** g£«eßž{ßbžy¿N244 $RELATIVE FORWA RD - INDIRECT 2 LEVELS4KK g£‰eß…ž{ßAžy¿-t„WXSYYOVY_@_  ßsž}ß/ž{¿effOHfl@l g  eßdž{ß žy¿ tuu SCRATCH - INDIRECT 1 LEVELu‡‡ g¡eßIž{ßžy¿�t�’’ SCRATCH - INDIRECT 2 LEVELS ’¥¥ g¡eß+ž{߃žy¿ct­°°OH°¶ @¶À ßž}ßtž{¿T ¼¾¾ POST INDEXED¾ÉÉÀ‹ß ž}ßaž{¿AÏÐÐOVÐÖ@Ö`À ß…ž|ßSžz¿3tÝßß PRE-INDEXED ßêê`ÀKßqž|ß?žz¿ñòò PRE-INDEXED & POST-INDEXEDò`ÀËßWž|ß%žz¿   OV @ gÀ eßHž{ßžy¿�t INDIRECT POST-INDEXED ,, gÁ‡eß.ž{߃žy¿gt466OV6<@< `gÀ eßžzßržx¿V EGG PRE-INDEXED INDIRECTGVV `gÁGeßžzßXžx¿<_`` &PRE-INDEXED -  INDIRECT - POST-INDEXED `xx `gÁÇeß…žzß6žx¿t�ƒƒ OVƒ‰@‰ßxž~ß)ž|¿ Ž�� COPY MEMORY TO REG �žž€ ßbž}ßž{¿‚ t¤§§ COPY REG TO MEMORY §¶¶„ ßJž}߃ž{¿jt¼¾¾ ADD - ADD MEMORY TO REG¾Ïψ ß1ž}ßjž{¿QÕÖÖ SUB - SUBTRACT MEMORY FROM REGÖêêŒ ßž}ßOž{¿6ðññ EXCH - EXCHANG E MEMORY WITH REG ñ� ß…ž}ß3ž{¿t  AND - AND MEMORY TO REG  ” ßkž}ßž{¿�t&(( "OR - INCLUSI VE OR MEMORY TO REG (>>´ ßMž}ß„ž{¿c tDGG "XOR - EXCLUSI VE OR MEMORY TO REG G]]˜ ß.ž}ßež{¿Dcdd CSK - REG < MEMORY - NO SKIP dxx¸ ßž}ßJž{¿)~ CSK - REG > MEMORY - SKIP + 1““ ¸ ߆ž|ß.žz¿ tš�� CSK - REG = MEMORY - SKIP + 2�±± ¸  ßgž{ßžy¿�t¹»»OV»Á@ÁßYž}ßž{¿sÇÈÈ JMP - UNCONDITIONAL JUMP ÈÚÚž€ß?ž|߃žz¿YtáããOVãé@韀란ß.žzßržx¿Hòóó "JST - JUMP & S TORE PROGRAM COUNTERó   ¾�ž‚ Ÿ~ß žyßQžw¿'OV@„ ߆ž}ßDž{¿ t ## ÿÿ(IMS - INCR ME MORY & SKIP IF ZERO - SKIP#<< „ Ü  ßbž{ß žy¿�tDFF ,IMS - INCR ME MORY & SKIP IF ZERO - NO SKIP Faa„ Ü ß>ž|߃žz¿]thssOVsy@y ¿ˆ¿‡ß%ž{ßjžy¿DŒ•�„„ JSK - JUMP & STACK„’’ ¿oþ€¿mß žzßPžx¿*›œœOVœ¢@¢ß…ž~ßDž|¿t§©© COPY - COPY REG TO REG ©ºº ßlž}ß+ž{¿ÀÁÁ NEG - NEGATE REG TO REGÁÒÒ ßTž}ßž{¿�tØÚÚ ADD - ADD REG TO REG Úêê ß<ž}߃ž{¿itðòò SUB - SUBTRACT REG FROM REGò ß!ž}ßhž{¿N    AND - AND REG TO REG   ß ž}ßQž{¿7"## OR - INCLUSIVE OR REG TO REG#77 ß…ž}ß6ž{¿t=?? XOR - EXCLUSIVE OR REG TO REG?SS ßiž}ßž{¿YZZ CSN REG-REG - NO SKIP Zjj ßRž}ßž{¿�tprr  CSN REG-REG - SKIP + 1r‚‚  ß9ž|߃žz¿ht‰‹‹ CSK REG-REG - NO SKIP ‹››+ß!ž}ßkž{¿P¡¢¢ CSK REG-REG - SKIP + 1¢²²+ ß ž|ßSžz¿8¹ºº CSK REG-REG - SKIP + 2ºÊÊ +  ß…ž{ß:žy¿tÒÔÔ EXCH - EXCHANGE REG WITH REGÔçç ßjž}ßž{¿íîî "COMP - 1'S COM PLEMENT REG TO REGî   ßNž}ßž{¿�t    CSM - REG-REG - NO SKIP    &ß5ž}߃ž{¿ht " $ $ CSM - REG-REG - SKIP + 1 $ 5 5& ßž|ßižz¿N < = = CSM - REG-REG - SKIP + 2 = N N &  ßž{ßOžy¿4 V W WOV W ]@ ]ß…ž~ßCž|¿(t b d d FMT - FETCH MACHINE TYPE  d v vßkž}ß)ž{¿ | } } UIS - UPDATE INTERRUPT STATUS } ‘ ‘ ßPž}ßž{¿�t — ™ ™OV ™ Ÿ@ ŸßBž}ßž{¿s ¥ ¦ ¦ XNX - INDEX NEXT INSTRUCTION  ¦ º º ß&ž|߃žz¿Wt Á à ÃOH à É@ É ¿Š‚‹`p„@¿‡ßžyßqžw¿EŒ• Í Ó × × RSK - RETURN THROUGH STACK  × ê ê ¿i‚‹`p„@# ¿eß…žxßOžv¿#t ï õ ø øOV ø þ@ þßwž~ßAž|¿    OUT - OUTPUT REGISTER   ß`ž}ß*ž{¿�t    IN - INPUT TO REGISTER  - -ßGž}ßž{¿h 3 4 4 SELP - SELECT AND PRESENT  4 F Fß.ž}߃ž{¿Ot L N N SST - SENSE & SKIP IF TRUE  N a aßž}ßhž{¿4 g h hOV h n@ nßž~ß\ž|¿( s t t &IMMEDIATE - CO PY - LOAD BYTE NEGATIVE  t Œ Œÿß…ž}ß=ž{¿ t ’ ” ” &IMMEDIATE - CO PY - LOAD BYTE POSITIVE  ” ¬ ¬ ßež}ßž{¿�t ² ´ ´ IMMEDIATE - SU B - SUBTRACT BYTE ´ É É ÿßHž}ßž{¿d Ï Ð Ð IMMEDIATE - ADD - ADD BYTE  Ð ã ã ß.ž}߃ž{¿Jt é ë ë *IMMEDIATE - CL SN - COMPARE EQUAL - NO SKIP ë   ß ž}ßaž{¿(    .IMMEDIATE - CL SN - COMPARE EQUAL - SKIP OCCURS  ( ( ß…ž|ß=žz¿t / 1 1 *IMMEDIATE - CS K - COMPARE 3 WAY - NO SKIP 1 K K ßcž}ßž{¿�t Q S S ,IMMEDIATE - CS K - COMPARE 3 WAY - SKIP + 1  S n n  ß?ž|߃žz¿]t u w w ,IMMEDIATE - CS K - COMPARE 3 WAY - SKIP + 2  w ’ ’   ßž{ß^žy¿8 š › › "IMMEDIATE - AN D - AND TO REGISTER › ± ±ß…ž}ßAž{¿t · ¹ ¹ ,IMMEDIATE - OR - INCLUSIVE OR TO REGISTER  ¹ Ô Ôßbž}ßž{¿�t Ú Ü Ü ,IMMEDIATE - XO R - EXCLUSIVE OR TO REGISTER  Ü ÷ ÷ß?ž}߃ž{¿^t ý ÿ ÿOV ÿ @ ß2ž~ßvž|¿Q    SHIFT LEFT 1 PLACE    ßž}ß`ž{¿;  ! !OV ! '@ 'ßž}ßSž{¿. - . . .SHIFT 10 ADDI TIONAL PLACES - SINGLE REGISTER  . J J ß…ž} ß0ž{¿ t P R ROV R X@ Xßxž~ß#ž|¿�t ] _ _ SHIFT LEFT W/OV 1 PLACE _ p pß_ž}ß ž{¿h v w wOV w }@ }ßSž~߃ž|¿\t ‚ „ „ ROTATE LEFT 1 PLACE  „ “ “ß<ž}ßlž{¿E ™ š šOV š  @  ß0ž~ß`ž|¿9 ¥ ¦ ¦ ROTATE LEFT W/OV 1 PLACE ¦ · ·ßž}ßHž{¿! ½ ¾ ¾OV ¾ Ä@ Äß ž~ß<ž|¿ É Ê Ê SHIFT RIGHT 1 PLACE Ê Ù Ùß…ž}ß&ž{¿‚tt ß â âOV â è@ èßwž~ßž|¿t í î î SHIFT RIGHT W/OV 1 PLACE  î   ß^ž}߃ž{¿[t   OV  @ ßQž~ßvž|¿N    ROTATE RIGHT 1 PLACE  # # ß;ž}ß`ž{¿8 ) * *OV * 0@ 0ß/ž~ßTž|¿, 5 6 6 ROTATE RIGHT W/OV 1 PLACE  6 H H ßž}ß;ž{¿ N O OOV O U@ Uß ž~ß/ž|¿ Z [ [ ARITHMETIC SHIFT RIGHT 1 PLACE [ o o ß…ž}ßž{¿‚tt u x xOV x ~@ ~ßwž~ßž|¿t ƒ „ „ DOUBLE REG LEF T LOGICAL 1 PLACE  „ ™ ™/ß[ž}߃ž{¿Xt Ÿ ¡ ¡OV ¡ §@ §/ßMž}ßuž{¿J ­ ® ® ,SHIFT 10 ADDIT IONAL PLACES - DOUBLE REGISTER ® É É/ ß+ž}ßSž{¿( Ï Ð ÐOV Ð Ö@ Ößž~ßGž|¿ Û Ü Ü (DOUBLE REG LEF T LOGICAL THRU OV 1 PLACE  Ü õ õ/ß…ž}ß'ž{¿‚tt û þ þOV þ@ßwž~ßž|¿t    DOUBLE REG LEFT ROTATE 1 PLACE /ß\ž}߃ž{¿Yt$&&OV&,@,ßOž~ßvž|¿L122 &DOUBLE REG LEF T ROTATE THRU OV 1 PLACE2JJ/ß0ž}ßWž{¿-PQQOVQW@Wß$ž~ßKž|¿!\]] DOUBLE REG RIG HT LOGICAL 1 PLACE]rr/ßž}ß/ž{¿xyyOVy@ß…ž~ß#ž|¿‚tt„‡‡ (DOUBLE REG RIG HT LOGICAL THRU OV 1 PLACE‡  / ßcž}ßž{¿`¦§§OV§­@­ßWž~߃ž|¿Tt²´´ DOUBLE REG RIG HT LOGICAL 1 PLACE´ÉÉ/ß:ž}ßfž{¿7ÏÐÐOVÐÖ@Öß.ž~ßZž|¿+ÛÜÜ (DOUBLE REG RIG HT ROTATE THRU OV 1 PLACE Üõõ/ ßž}ß:ž{¿ ûüüOVü@ßž~ß.ž|¿�t   $DOUBLE REG RIG HT ARITHMETIC 1 PLACE    / ß…ž}ßž{¿bt&((OV(.@.¿‡¿‡ßvž|ßžz¿SŒ•588 "PUSH - STORE R EGISTERS ONTO STACK 8NN ¿gC ¿eßTžz߃žx¿1tWYYOVY_@_ ¿VŠp@ÀP@¿RßAžxßpžv¿jjmm POP - LOAD RE GISTERS FROM STACKm‚‚ ¿3Âgp@ÀP@c ¿.ßžwßLžu¿�tŽ��OV�–@–ßž~ß?ž|¿t›œœ "JEQ - JUMP IF ZERO - JUMP OCCURS œ²²@ß…ž}ß"ž{¿Wt¸ºº JEQ - JUMP IF ZERO - NO JUMP ºÎÎ@ßiž}ßž{¿;ÔÕÕ  &JNE - JUMP IF NON-ZERO - JUMP OCCURS ÕííÀßJž}߃ž{¿tóõõ "JNE - JUMP IF NON-ZERO - NO JUMP õ  Àß,ž}ßež{¿�t $JGT - JUMP IF > ZERO - JUMP OCCURS **@ß ž}ßFž{¿b011 JGT - JUMP IF > ZERO - NO JUMP 1FF@ß…ž}ß*ž{¿FtLNN (JLE - JUMP IF < OR = ZERO - JUMP OCCURSNggÀßdž}ß ž{¿%mnn $JLE - JUMP IF < OR = ZERO - NO JUMPn……ÀßFž}߃ž{¿t‹�� (JGE - JUMP IF > OR = ZERO - JUMP OCCURS�¦¦@ß%ž}ßbž{¿�t¬®® ÿÿ$JGE - JUMP IF > OR = ZERO - NO JUMP®ÅÅ@ßž}ßCž{¿bËÌÌ ÿÿ$JLT - JUMP IF < ZERO - JUMP OCCURS ÌããÀß…ž}ß%ž{¿Dtéëë  JLT - JUMP IF < ZERO - NO JUMP ëÀßhž}ßž{¿' ÿÿ(IJEQ - INCR &  JUMP IF ZERO - INCR & JUMP  @ßHž}߃ž{¿t&(( &IJEQ - INCR &  JUMP IF ZERO - INCR ONLY(@@@ß(ž}ßcž{¿�tFHH ,IJNE - INCR &  JUMP IF NON-ZERO - INCR & JUMPHccÀßž}ß@ž{¿^ijj ÿÿ*IJNE - INCR &  JUMP IF NON-ZERO - INCR ONLYj„„Àß…ž}ßž{¿=tŠŒŒ *JEQD - DECR &  JUMP IF :FFFF - DECR & JUMP Œ¦¦@ßcž}߃ž{¿t¬®® (JEQD - DECR &  JUMP IF :FFFF - DECR ONLY ®ÇÇ@ßBž}ßbž{¿�tÍÏÏ .JNED - DECR &  JUMP IF NOT :FFFF - DECR & JUMP ÏëëÀßž}ß>ž{¿]ñòò ,JNED - DECR &  JUMP IF NOT :FFFF - DECR ONLY ò  Àß…ž}ßž{¿;tOV@ßwž}ßž{¿-!"" JT SS - JUMP OCCURS "11@ß`ž|߃žz¿t8:: JT SS - NO JUMP :GG@ßJž|ßmžz¿NOO JF SS - JUMP OCCURS O^^Àß3ž|ßVžz¿�tegg JF SS - NO JUMP gttÀßž|ß@žz¿k{||pOV|‚@‚0ßž}ß3ž{¿^ˆ‰‰ rJT OV - JUMP OCCURS ‰˜˜06@ß…ž|ßžz¿GtŸ¡¡ pJT OV - NO JUMP ¡®®06@ßož|ßžz¿1µ¶¶ pJF OV - JUMP OCCURS ¶ÅÅ06ÀßXž|߃žz¿tÌÎÎ rJF OV - NO JUMP ÎÛÛ06ÀßBž|ßmžz¿âãã qJT CY - JUMP OCCURS ãòò0V@ß+ž|ßVžz¿�tùûû pJT CY - NO JUMP û0V@ßž|ß@žz¿k pJF CY - JUMP OCCURS 0VÀß…ž|ß)žz¿Tt&(( qJF CY - NO JUMP (550VÀßož|ßžz¿>><??OV?E@EG ß_ž|ßžz¿.LMM EXTENDED - RELATIVE BACKWARDS MaaG‚ÿÛßCž|߃žz¿thjj 0EXTENDED - REL ATIVE BACKWARDS - INDIRECT 1 LEVELj‡‡GÂÿ´ßž|ß]žz¿�tŽ�� EXTENDED - RELATIVE FORWARDS�££G‚-ßž|ßAžz¿eª«« 0EXTENDED - REL ATIVE FORWA RDS - INDIRECT 1 LEVEL «ÈÈGÂß…ž|ßžz¿@tÒÏÓÓ EXTENDED - POST INDEXED ÓääG" ßiž|ßžz¿$ëìì EXTENDED - POS T INDEXED INDIRECTìGbßLž|߃žz¿t  OV @ àG ß<ž{ßsžy¿‚t EXTENDED - PRE INDEXED++ àG ß!ž{ßXžy¿g344 EXTENDED - PRE INDEXED INDIRECT 4II àGRßž{ß:žy¿IQRR EXTENDED - PRE AND POST INDEXED Rgg àG2 ß…ž{ßžy¿+toqq (EXTENDED - PRE AND POST INDEXED INDIRECTqŠŠ àGrßbž{߃žy¿t’””OV”š@šßUž~ßvž|¿�tŸ¡¡ EXTENDED - COPYE - LOAD ¡²²G ß;ž|ß\žz¿g¹ºº EXTENDED - COPYE - STORE ºÌÌ ß!ž|ßBžz¿MÓÔÔ EXTENDED - ADD Ôáá ß ž|ß-žz¿8èéé EXTENDED - SUBTRACT éøø ß…ž|ßžz¿!tÿ EXTENDED - EXCHANGE  ßmž|߃žz¿ t CEA - COMPUTE EFFECTIVE ADDRESS..ßOž|ßežz¿�t577 EXTENDED AND7BBß;ž|ßQžz¿mIJJ EXTENDED OR JUU'ß(ž|ß>žz¿Z\]] EXTENDED XOR]hhßž|ß+žz¿Gopp ADDC - ADD WITH CARRY p€€ ß…ž|ßžz¿/t‡‰‰ SUBC - SUB WITH CARRY ‰™™'ßlž|߃žz¿t ¢¢ CSME - REG < M EM CELL - NO SKIP ¢·· ßNž|ßežz¿�t¾ÀÀ  CSME - REG > M EM CELL - SKIP + 1ÀÕÕ  ß/ž{ßFžy¿bÝÞÞ CSME - REG = M EM CELL - SKIP + 2Þóó   ßžzß'žx¿Cüýý CSKE - REG < M EM CELL - NO SKIP ý' ß…ž|ß žz¿&t  CSKE - REG > M EM CELL - SKIP + 100 ' ßfž{߃žy¿t8::  CSKE - REG = M EM CELL - SKIP + 2:OO '  ßFžzßcžx¿�tXZZ EXTENDED - JUMP Zgg�ß0ž|ßMžz¿knooOVou@uŸ€wž€ß žzß=žx¿[~ EXTENDED JUMP & STORE �� '�ž‚ Ÿ~ßžxß!žv¿?š››OV›¡@¡„ ߆ž}ßž{¿2 t§ªª ÿÿ"EXTENDED IMS - INCREMENT AND SKIP ªÀÀ „ G  ßdžz߃žx¿tÉËË EXTENDED IMS - INCREMENT ONLY Ëßß „ G ßFž{ßežy¿�tçééOVéï@ïß9ž~ßXž|¿tôõõ MUL - MULTIPLY MEMORY BY REGSõ  ' ßž|ß<žz¿X DIV - DIVIDE REGS BY MEMORY$$' ßž|ß!žz¿=+,,OV,2@2 ¿ˆ¿‡ß‡ž{ßžy¿.Œ•t:>> EXTENDED JUMP & STACK >NN ¿lƒ¿ißižy߃žw¿tXZZOVZ`@`„ ß[ž}ßuž{¿ fhh "EXTENDED DMS - DECREMENT AND SKIP h~~ „ g  ß:žzßTžx¿�t‡ ‰‰ EXTENDED DMS - DECREMENT ONLY ‰�� „ g ßž{ß6žy¿c¥¦¦OV¦¬@¬ßž~ß*ž|¿W±²² EXTENDED - DOUBLE LOAD ²ÃÃG†ï¥ß…ž|ßžz¿>tÊÌÌ EXTENDED - DOUBLE STORE ÌÝÝG‡ï‹ßkž|߃žz¿$täææOVæì@ì ¿ŠŸ‹¿†ßYžyßqžw¿�Ÿ€)öþþ UTRAP - USER TRAP þ   ¿j¿fß9žyßQžw¿�t STRAP - SYSTEM TRAP '' ¿O¿Kßžyß6žw¿f122OV28@8ßž~ß*ž|¿Z=>> (SBIT - SET GE NERAL PURPOSE REGISTER BIT>WW ß…ž}ß ž{¿:t]__ *RBIT - RESET  GENERAL PURPOSE REGISTER BIT_yy ßcž}߃ž{¿t�� 0CBIT - COMPLE MENT GENERAL PURPOSE REGISTER BIT �žžß>ž}ß^ž{¿�t¤¦¦ 0TBIT - TRANSF ER GENERAL PURPOSE REG. BIT TO OV ¦ÃÃßž}ß9ž{¿\ÉÊÊ SBIT - STATUS REGISTERÊÚÚßž}ß"ž{¿Eàáá RBIT - STATUS REGISTERáññß…ž}ß ž{¿.t÷ùù CBIT - STATUS REGISTERù  ßmž}߃ž{¿t TBIT - STATUS REGISTER!!ßUž}ßkž{¿�t'))OV)/@/ßGž}ß]ž{¿s566 SIN - STATUS INHIBIT6FFß/ž|ßEžz¿[MNNOHNT@T ƒ‡Ã‡ß!ž|ß7žz¿M""[^^ FLOATING POINT - FIX^mm ƒnÃn ßž{ßžy¿3uvvOHv|@| ƒ‡Ã‡ß‡ž|ßžz¿%""tƒ‡‡ FLOATING POINT - FLOAT‡—— ƒlÃl ßkž{߃žy¿ tŸ¡¡OH¡§@§ ƒ‡Ã‡ß\ž|ßtžz¿ƒ""t®²² FLOATING POINT - ADD - NO ALIGN ²ÇÇ ƒgÃg\"ß:žzßRžx¿aÐÑÑ "FLOATING POINT - ADD - ALIGN ACC 1Ñçç ƒGÃG\"ßžzß2žx¿Aðññ $FLOATING POINT - ADD - ALIGN ACC 11 ñ ƒ&Ã&\"ß…žzßžx¿ t 2FLOATING POINT - ADD - NO ALIGN - DIFFERENT SIGNS 11 ƒŒÃˆ\"ß\žzß„žx¿ƒ"tt":?? FLOATING POINT - SUB - NO ALIGN ?TT ƒ‰Ãe\"ß9žzßažx¿`"]__ "FLOATING POINT - SUB - ALIGN ACC 1_uu ƒhÃD\"ßžzß@žx¿?~ $FLOATING POINT - SUB - ALIGN ACC 11 –– ƒGÃ#\"ß…žzßžx¿tŸ¡¡ 2FLOATING POINT - SUB - NO ALIGN - DIFFERENT SIGNS ¡¿¿ ƒ‹Ã‹\"ß\žz߃žx¿‚tt""ÈÍÍOHÍÓ@Ó ƒ‡Ã‡ßJž|ßqžz¿p"" ÚÝÝ FLOATING POINT - MULTIPLY Ýïï ƒkÃk\" ß,žzßSžx¿Røùù FLOATING POINT - DIVIDE ù   ƒPÃP\" ßžzß8žx¿7OH@ ƒ‡Ã‡ßž|ß*žz¿)""!$$ "FLOATING POINT - COMPARE LESS THAN$:: ƒgÃg\"ß…žzßžx¿tCEE &FLOATING POINT - COMPARE GREATER THAN E]] ƒDÃD\" ßažy߃žw¿‚t tgjj FLOATING POINT - COMPARE EQUALj~~ ƒ#Ã#\"  ß?žxßažv¿` p @pÇœ@PǛ›p@P Ÿw  Ât0@Ã’p@ÑP@Ÿx ƒ�“�‡�ƒŽ “އŒƒ�“�‡‹ƒŒ“Œ‡ŠŸrqrpú¢û£ü¦ý§i€ d ðÿÿ" QD=NQûLQžûLVžûLH~ÜÈ^­ Ð]¯Oÿÿÿÿÿ€€ÑDÿÿç ƒGÃG\"ßžzß2žx¿Aðññ $FLOATING POINT - ADD - ALIGN ACC 11 ñ ƒ&Ã&\"ß…žzßžx¿ t 2FLOATING POINT - ADD - NO ALIGN - OVicEdDano7¶+¦›‚§A¦ *ÿ €¦”‚¡A¦™‚‹†Ž†•:Ξ˂˜C:ÖžÆ# OCÞPZ2ÞP!‚_E‚…„ƒ ž‹# 0‚VE‚…„ƒ ž‚# 1 †L¢Œþ Ÿ‹ †G¢‰þŸ† †B¢…þŸ�µÐÙ¢—ÿ—C ž—žfÿ†-‚/Ãÿ�†-¦+‚(M †)†) †(:áEžOá ‚…†:áqBžOZ2¢þþ0¢ýÿý¢ýÿû¢üÿù¢úÿ÷ÿ‡òWƒö†èƒõ†çƒô†æ‚è‡ð‚ñ‡ï£ð¦× †×‚á†ÝÞÜž~‚Ö‡ãÿ†Ñƒå‡åƒå‡å¢Èà€€‚ ƒUœ@ WƒÔ†À¢¾ �‚½1ËŽ¹’»Á’¹¾Û¿ÒƒqÁž‡†±žY’±Á’¯†«žt¢Èÿº¢»ÿ¸‚­‡¹‚¬‡¸‚«‡·U¢®ÿ½Ÿ½ $6Å'†– † žƒ†’ÿ†œÞ•ž‡‚”‡¢ƒ¨‡¨ƒ¤‡¤ž‚ÿ†‰‚„Þ�%…Ÿe½ÿü ;V¿€WÖv¶Ž§‘’“ ¡tiuj(» ' †í‚¦†ìü†ë‚_’ç) B)-†á%§à'ÞÞ †ß‚Ú)/‹Ú+=�׆ÔÞÕ‚Ö΃ÒL,0) ž‰RSTQRUSk%§Â'ÞÀ, ž�¦Àƒ½Ã).ÞºžtÞ¹žZ¢Šª³.%€€‡°Þ¯€�‡­'Ÿ<p0 ¢ �1Až£IPâ²¢²€@„€+U½Þ¢ž‚â¬žŠ¢«€€+â¨À€ÄB+k»££+€€+À€ÄA+k»‚š„@¢–ÿ˜ŸW ¨çë©æ¾ ¶}ð`þpÿØÿü0 0 5 5 éìÿú.0 LSI-4/95 TIMING TEST PROGRAM (A000)0 REAL-TIME-CLOCK SHOULD BE SET TO TTLF  0000.000 MICROSEC - I/O ERROR(0 LSI-4/95 TIMING PROGRAM....END PARAMETER ERROR DOCUMENTATION NOT FOUNDPP , LSI 4/95 BASIC INSTRUCTION SET ß…ž~ß„ž|¿ƒij{!&&OV&,@, %€'ßrž{ßqžy¿p466BYTE MODE - RELATIVE BACKWARDS6JJ %‚2'ßTž{ßSžy¿RRSSBYTE MODE - RELATIVE FORWARDS Sgg %‚�'ß7ž{ß6žy¿5%ossOVsy@y g% 'eß#žyß"žw¿!ƒ……2BYTE MODE - RELATIVE BACKWARDS - INDIRECT 1 LEVEL …££ g%£L'eß…žyß„žw¿ƒij{­±±0BYTE MODE - RELATIVE FORWARDS - INDIRECT 1 LEVEL±ÎÎ g%£‰'eßZžyßYžw¿XÛØÜÜOVÜâ@â %¢~'ßHž{ßGžy¿FêëëBYTE MODE - POST INDEXEDëüü %À–'ß.ž{ß-žy¿,OV @  g%¢~'eßžyßžw¿&BYTE MODE - SCRATCH - INDIRECT 1 LEVEL.. g%¡'eß…žyß„žw¿ƒij{8=="BYTE MODE - POST INDEXED INDIRECT =SS g%Á‡'eß`žyß_žw¿^]^^ OV^d@d `%Â~'ßPžzßOžx¿Nmnn BYTE MODE - PRE INDEXED n `%ÀA'ß5žzß4žx¿3ˆ‰‰ &BYTE MODE - PRE INDEXED & POST INDEXED‰¡¡ `%ÀÀ'ßžzßžx¿ª««OV«±@± `g%Â~'eßžx߃žv¿‚j{¼¿¿ BYTE MODE - PRE INDEXED INDIRECT¿ÔÔ `g%ÁG'eß…žxß`žv¿_ißáá.BYTE MODE - PRE INDEX ED INDIRECT POST INDEXED áýý `g%ÁÇ'eß\žxß7žv¿6  OV @%'ßNž|ß)žz¿( BYTE MODE - COPYB MEMORY TO REG ,, %€'ß0ž{ß žy¿ 466 BYTE MODE - COPYB REG TO MEMORY 6KK %„'ßž{߃žy¿‚j{SWWBYTE MODE - ADDB MEMORY TO REGWkk %ˆ'ß…ž{ßcžy¿bisvv"BYTE MODE - EXCHB MEMORY WITH REG vŒŒ %�'ßdž{ßBžy¿A”––BYTE MODE - ANDB MEMORY TO REG–ªª %”'ßFž{ß$žy¿#²´´ BYTE MODE - ORB MEMORY WITH REG ´ÉÉ %´'ß'ž{ßžy¿ÑÓÓ BYTE MODE - XORB MEMORY WITH REGÓèè %˜'ßž{߃žy¿‚j{ðôô*BYTE MODE - CSKB - REG < MEMORY - NO SKIP ô %¸'ß…ž{ß]žy¿\i*BYTE MODE - CSKB - REG > MEMORY - SKIP + 133 %¸ 'ß_žzß7žx¿6<>>*BYTE MODE - CSKB - REG = MEMORY - SKIP + 2>XX %¸  'ß9žyßžw¿ƒefbggOVgm@m  ß(ž}ßž{¿‚ {svvRELATIVE BACKWARDSv„„¢aßž}߃ž{¿kjŠŒŒOHŒ’@’ g  eßž{ßsžy¿[š››&RELATIVE BACKWARDS - INDIRECT 1 LEVEL ›³³ g£0eß…ž{ßRžy¿:i»½½&RELATIVE BACKWARDS - INDIRECT 2 LEVELS½ÕÕ g£ eßcž{ß0žy¿ÝÞÞOHÞä@ä  ßVž}ß#ž{¿ êëëRELATIVE FORWARDS ëùù¢ÞßAž}ßž{¿�{ÿOH@ g  eß0ž{ß„žy¿p j$RELATIVE FORWARD - INDIRECT 1 LEVEL ** g£«eßž{ßbžy¿N244$RELATIVE FORWARD - INDIRECT 2 LEVELS4KK g£‰eß…ž{ßAžy¿-i„WXSYYOVY_@_  ßsž}ß/ž{¿effOHfl@l g  eßdž{ß žy¿ tuuSCRATCH - INDIRECT 1 LEVELu‡‡ g¡eßIž{ßžy¿�{�’’SCRATCH - INDIRECT 2 LEVELS ’¥¥ g¡eß+ž{߃žy¿cj­°°OH°¶@¶À ßž}ßtž{¿T ¼¾¾ POST INDEXED¾ÉÉÀ‹ß ž}ßaž{¿AÏÐÐOVÐÖ@Ö`À ß…ž|ßSžz¿3iÝßß PRE-INDEXED ßêê`ÀKßqž|ß?žz¿ñòòPRE-INDEXED & POST-INDEXEDò`ÀËßWž|ß%žz¿   OV @ gÀ eßHž{ßžy¿�{INDIRECT POST-INDEXED ,, gÁ‡eß.ž{߃žy¿gj466OV6<@< `gÀ eßžzßržx¿V EGGPRE-INDEXED INDIRECTGVV `gÁGeßžzßXžx¿<_``&PRE-INDEXED - INDIRECT - POST-INDEXED `xx `gÁÇeß…žzß6žx¿i�ƒƒ OVƒ‰@‰ßxž~ß)ž|¿ Ž�� COPY MEMORY TO REG �žž€ ßbž}ßž{¿‚ {¤§§ COPY REG TO MEMORY §¶¶„ ßJž}߃ž{¿jj¼¾¾  ADD - ADD MEMORY TO REG¾Ïψ ß1ž}ßjž{¿QÕÖÖ SUB - SUBTRACT MEMORY FROM REGÖêêŒ ßž}ßOž{¿6ðññ EXCH - EXCHANGE MEMORY WITH REG ñ� ß…ž}ß3ž{¿i AND - AND MEMORY TO REG  ” ßkž}ßž{¿�{&(("OR - INCLUSIVE OR MEMORY TO REG (>>´ ßMž}ß„ž{¿c jDGG"XOR - EXCLUSIVE OR MEMORY TO REG G]]˜ ß.ž}ßež{¿DcddCSK - REG < MEMORY - NO SKIP dxx¸ ßž}ßJž{¿)~CSK - REG > MEMORY - SKIP + 1““ ¸ ߆ž|ß.žz¿ iš��CSK - REG = MEMORY - SKIP + 2�±± ¸  ßgž{ßžy¿�{¹»»OV»Á@ÁßYž}ßž{¿sÇÈÈJMP - UNCONDITIONAL JUMP ÈÚÚž€ß?ž|߃žz¿YjáããOVãé@韀란ß.žzßržx¿Hòóó"JST - JUMP & STORE PROGRAM COUNTERó   ¾�ž‚ Ÿ~ß žyßQžw¿'OV@„ ߆ž}ßDž{¿ i ##ÿÿ(IMS - INCR MEMORY & SKIP IF ZERO - SKIP#<< „ Ü  ßbž{ß žy¿�{DFF,IMS - INCR MEMORY & SKIP IF ZERO - NO SKIP Faa„ Ü ß>ž|߃žz¿]jhssOVsy@y ¿ˆ¿‡ß%ž{ßjžy¿DŒ•�„„JSK - JUMP & STACK„’’ ¿oþ€¿mß žzßPžx¿*›œœOVœ¢@¢ß…ž~ßDž|¿i§©© COPY - COPY REG TO REG ©ºº ßlž}ß+ž{¿ÀÁÁNEG - NEGATE REG TO REGÁÒÒ ßTž}ßž{¿�{ØÚÚ ADD - ADD REG TO REG Úêê ß<ž}߃ž{¿ijðòò SUB - SUBTRACT REG FROM REGò ß!ž}ßhž{¿N   AND - AND REG TO REG   ß ž}ßQž{¿7"##OR - INCLUSIVE OR REG TO REG#77 ß…ž}ß6ž{¿i=??XOR - EXCLUSIVE OR REG TO REG?SS ßiž}ßž{¿YZZCSN REG-REG - NO SKIP Zjj ßRž}ßž{¿�{prrCSN REG-REG - SKIP + 1r‚‚  ß9ž|߃žz¿hj‰‹‹CSK REG-REG - NO SKIP ‹››+ß!ž}ßkž{¿P¡¢¢CSK REG-REG - SKIP + 1¢²²+ ß ž|ßSžz¿8¹ººCSK REG-REG - SKIP + 2ºÊÊ +  ß…ž{ß:žy¿iÒÔÔ EXCH - EXCHANGE REG WITH REGÔçç ßjž}ßž{¿íîî"COMP - 1'S COMPLEMENT REG TO REGî   ßNž}ßž{¿�{   CSM - REG-REG - NO SKIP    &ß5ž}߃ž{¿hj " $ $CSM - REG-REG - SKIP + 1 $ 5 5& ßž|ßižz¿N < = =CSM - REG-REG - SKIP + 2 = N N &  ßž{ßOžy¿4 V W WOV W ]@ ]ß…ž~ßCž|¿(i b d dFMT - FETCH MACHINE TYPE  d v vßkž}ß)ž{¿ | } }UIS - UPDATE INTERRUPT STATUS } ‘ ‘ ßPž}ßž{¿�{ — ™ ™ OV ™ Ÿ@ ŸßBž}ßž{¿s ¥ ¦ ¦XNX - INDEX NEXT INSTRUCTION  ¦ º º ß&ž|߃žz¿Wj Á à ÃOH à É@ É ¿Š‚‹`p„@¿‡ßžyßqžw¿EŒ• Í Ó × ×RSK - RETURN THROUGH STACK  × ê ê ¿i‚‹`p„@# ¿eß…žxßOžv¿#i ï õ ø øOV ø þ@ þßwž~ßAž|¿   OUT - OUTPUT REGISTER   ß`ž}ß*ž{¿�{   IN - INPUT TO REGISTER  - -ßGž}ßž{¿h 3 4 4SELP - SELECT AND PRESENT  4 F Fß.ž}߃ž{¿Oj L N NSST - SENSE & SKIP IF TRUE  N a aßž}ßhž{¿4 g h hOV h n@ nßž~ß\ž|¿( s t t&IMMEDIATE - COPY - LOAD BYTE NEGATIVE  t Œ Œÿß…ž}ß=ž{¿ i ’ ” ”&IMMEDIATE - COPY - LOAD BYTE POSITIVE  ” ¬ ¬ ßež}ßž{¿�{ ² ´ ´ IMMEDIATE - SUB - SUBTRACT BYTE ´ É É ÿßHž}ßž{¿d Ï Ð ÐIMMEDIATE - ADD - ADD BYTE  Ð ã ã ß.ž}߃ž{¿Jj é ë ë*IMMEDIATE - CLSN - COMPARE EQUAL - NO SKIP ë   ß ž}ßaž{¿(   .IMMEDIATE - CLSN - COMPARE EQUAL - SKIP OCCURS  ( ( ß…ž|ß=žz¿i / 1 1*IMMEDIATE - CSK - COMPARE 3 WAY - NO SKIP 1 K K ßcž}ßž{¿�{ Q S S,IMMEDIATE - CSK - COMPARE 3 WAY - SKIP + 1  S n n  ß?ž|߃žz¿]j u w w,IMMEDIATE - CSK - COMPARE 3 WAY - SKIP + 2  w ’ ’   ßž{ß^žy¿8 š › ›"IMMEDIATE - AND - AND TO REGISTER › ± ±ß…ž}ßAž{¿i · ¹ ¹,IMMEDIATE - OR - INCLUSIVE OR TO REGISTER  ¹ Ô Ôßbž}ßž{¿�{ Ú Ü Ü,IMMEDIATE - XOR - EXCLUSIVE OR TO REGISTER  Ü ÷ ÷ß?ž}߃ž{¿^j ý ÿ ÿOV ÿ @ ß2ž~ßvž|¿Q   SHIFT LEFT 1 PLACE    ßž}ß`ž{¿;  ! !OV ! '@ 'ßž}ßSž{¿. - . ..SHIFT 10 ADDITIONAL PLACES - SINGLE REGISTER  . J J ß…ž}ß0ž{¿ i P R ROV R X@ Xßxž~ß#ž|¿�{ ] _ _SHIFT LEFT W/OV 1 PLACE _ p pß_ž}ß ž{¿h v w wOV w }@ }ßSž~߃ž|¿\j ‚ „ „ROTATE LEFT 1 PLACE  „ “ “ß<ž}ßlž{¿E ™ š šOV š  @  ß0ž~ß`ž|¿9 ¥ ¦ ¦ROTATE LEFT W/OV 1 PLACE ¦ · ·ßž}ßHž{¿! ½ ¾ ¾OV ¾ Ä@ Äß ž~ß<ž|¿ É Ê ÊSHIFT RIGHT 1 PLACE Ê Ù Ùß…ž}ß&ž{¿‚i{ ß â âOV â è@ èßwž~ßž|¿t í î îSHIFT RIGHT W/OV 1 PLACE  î   ß^ž}߃ž{¿[j   OV  @ ßQž~ßvž|¿N   ROTATE RIGHT 1 PLACE  # # ß;ž}ß`ž{¿8 ) * *OV * 0@ 0ß/ž~ßTž|¿, 5 6 6ROTATE RIGHT W/OV 1 PLACE  6 H H ßž}ß;ž{¿ N O OOV O U@ Uß ž~ß/ž|¿ Z [ [ ARITHMETIC SHIFT RIGHT 1 PLACE [ o o ß…ž}ßž{¿‚i{ u x xOV x ~@ ~ßwž~ßž|¿t ƒ „ „ DOUBLE REG LEFT LOGICAL 1 PLACE  „ ™ ™/ß[ž}߃ž{¿Xj Ÿ ¡ ¡OV ¡ §@ §/ßMž}ßuž{¿J ­ ® ®,SHIFT 10 ADDITIONAL PLACES - DOUBLE REGISTER ® É É/ ß+ž}ßSž{¿( Ï Ð ÐOV Ð Ö@ Ößž~ßGž|¿ Û Ü Ü(DOUBLE REG LEFT LOGICAL THRU OV 1 PLACE  Ü õ õ/ß…ž}ß'ž{¿‚i{ û þ þOV þ@ßwž~ßž|¿t   DOUBLE REG LEFT ROTATE 1 PLACE /ß\ž}߃ž{¿Yj$&&OV&,@,ßOž~ßvž|¿L122&DOUBLE REG LEFT ROTATE THRU OV 1 PLACE2JJ/ß0ž}ßWž{¿-PQQOVQW@Wß$ž~ßKž|¿!\]] DOUBLE REG RIGHT LOGICAL 1 PLACE]rr/ßž}ß/ž{¿xyyOVy@ß…ž~ß#ž|¿‚i{„‡‡(DOUBLE REG RIGHT LOGICAL THRU OV 1 PLACE‡  / ßcž}ßž{¿`¦§§OV§­@­ßWž~߃ž|¿Tj²´´ DOUBLE REG RIGHT LOGICAL 1 PLACE´ÉÉ/ß:ž}ßfž{¿7ÏÐÐOVÐÖ@Öß.ž~ßZž|¿+ÛÜÜ(DOUBLE REG RIGHT ROTATE THRU OV 1 PLACE Üõõ/ ßž}ß:ž{¿ ûüüOVü@ßž~ß.ž|¿�{  $DOUBLE REG RIGHT ARITHMETIC 1 PLACE    / ß…ž}ßž{¿bi&((OV(.@.¿‡¿‡ßvž|ßžz¿SŒ•588"PUSH - STORE REGISTERS ONTO STACK 8NN ¿gC ¿eßTžz߃žx¿1jWYYOVY_@_ ¿VŠp@ÀP@¿RßAžxßpžv¿jjmm POP - LOAD REGISTERS FROM STACKm‚‚ ¿3Âgp@ÀP@c ¿.ßžwßLžu¿�{Ž��OV�–@–ßž~ß?ž|¿t›œœ"JEQ - JUMP IF ZERO - JUMP OCCURS œ²²@ß…ž}ß"ž{¿Wi¸ººJEQ - JUMP IF ZERO - NO JUMP ºÎÎ@ßiž}ßž{¿;ÔÕÕ&JNE - JUMP IF NON-ZERO - JUMP OCCURS ÕííÀßJž}߃ž{¿jóõõ"JNE - JUMP IF NON-ZERO - NO JUMP õ  Àß,ž}ßež{¿�{$JGT - JUMP IF > ZERO - JUMP OCCURS **@ß ž}ßFž{¿b011 JGT - JUMP IF > ZERO - NO JUMP 1FF@ß…ž}ß*ž{¿FiLNN(JLE - JUMP IF < OR = ZERO - JUMP OCCURSNggÀßdž}ß ž{¿%mnn$JLE - JUMP IF < OR = ZERO - NO JUMPn……ÀßFž}߃ž{¿j‹��(JGE - JUMP IF > OR = ZERO - JUMP OCCURS�¦¦@ß%ž}ßbž{¿�{¬®®ÿÿ$JGE - JUMP IF > OR = ZERO - NO JUMP®ÅÅ@ßž}ßCž{¿bËÌÌÿÿ$JLT - JUMP IF < ZERO - JUMP OCCURS ÌããÀß…ž}ß%ž{¿Diéëë JLT - JUMP IF < ZERO - NO JUMP ëÀßhž}ßž{¿'ÿÿ(IJEQ - INCR & JUMP IF ZERO - INCR & JUMP  @ßHž}߃ž{¿j&((&IJEQ - INCR & JUMP  IF ZERO - INCR ONLY(@@@ß(ž}ßcž{¿�{FHH,IJNE - INCR & JUMP IF NON-ZERO - INCR & JUMPHccÀßž}ß@ž{¿^ijjÿÿ*IJNE - INCR & JUMP IF NON-ZERO - INCR ONLYj„„Àß…ž}ßž{¿=iŠŒŒ*JEQD - DECR & JUMP IF :FFFF - DECR & JUMP Œ¦¦@ßcž}߃ž{¿j¬®®(JEQD - DECR & JUMP IF :FFFF - DECR ONLY ®ÇÇ@ßBž}ßbž{¿�{ÍÏÏ.JNED - DECR & JUMP IF NOT :FFFF - DECR & JUMP ÏëëÀßž}ß>ž{¿]ñòò,JNED - DECR & JUMP IF NOT :FFFF - DECR ONLY ò  Àß…ž}ßž{¿;iOV@ßwž}ßž{¿-!""JT SS - JUMP OCCURS "11@ß`ž|߃žz¿j8:: JT SS - NO JUMP :GG@ßJž|ßmžz¿NOOJF SS - JUMP OCCURS O^^Àß3ž|ßVžz¿�{egg JF SS - NO JUMP gttÀßž|ß@žz¿k{||pOV|‚@‚0ßž}ß3ž{¿^ˆ‰‰rJT OV - JUMP OCCURS ‰˜˜06@ß…ž|ßžz¿GiŸ¡¡ pJT OV - NO JUMP ¡®®06@ßož|ßžz¿1µ¶¶pJF OV - JUMP OCCURS ¶ÅÅ06ÀßXž|߃žz¿jÌÎÎ rJF OV - NO JUMP ÎÛÛ06ÀßBž|ßmžz¿âããqJT CY - JUMP OCCURS ãòò0V@ß+ž|ßVžz¿�{ùûû pJT CY - NO JUMP û0V@ßž|ß@žz¿kpJF CY - JUMP OCCURS 0VÀß…ž|ß)žz¿Ti&(( qJF CY - NO JUMP (550VÀßož|ßžz¿>><??OV?E@EG ß_ž|ßžz¿.LMMEXTENDED - RELATIVE BACKWARDS MaaG‚ÿÛßCž|߃žz¿jhjj0EXTENDED - RELATIVE BACKWARDS - INDIRECT 1 LEVELj‡‡GÂÿ´ßž|ß]žz¿�{Ž��EXTENDED - RELATIVE FORWARDS�££G‚-ßž|ßAžz¿eª««0EXTENDED - RELATIVE FORWARDS - INDIRECT 1 LEVEL «ÈÈGÂß…ž|ßžz¿@iÒÏÓÓEXTENDED - POST INDEXED ÓääG" ßiž|ßžz¿$ëìì EXTENDED - POST INDEXED INDIRECTìGbßLž|߃žz¿j  OV @ àG ß<ž{ßsžy¿‚{EXTENDED - PRE INDEXED++ àG ß!ž{ßXžy¿g344 EXTENDED - PRE INDEXED INDIRECT 4II àGRßž{ß:žy¿IQRR EXTENDED - PRE AND POST INDEXED Rgg àG2 ß…ž{ßžy¿+ioqq(EXTENDED - PRE AND POST INDEXED INDIRECTqŠŠ àGrßbž{߃žy¿j’””OV”š@šßUž~ßvž|¿�{Ÿ¡¡EXTENDED - COPYE - LOAD ¡²²G ß;ž|ß\žz¿g¹ººEXTENDED - COPYE - STORE ºÌÌ ß!ž|ßBžz¿MÓÔÔ EXTENDED - ADD Ôáá ß ž|ß-žz¿8èééEXTENDED - SUBTRACT éøø ß…ž|ßžz¿!iÿEXTENDED - EXCHANGE  ßmž|߃žz¿  j CEA - COMPUTE EFFECTIVE ADDRESS..ßOž|ßežz¿�{577 EXTENDED AND7BBß;ž|ßQžz¿mIJJ EXTENDED OR JUU'ß(ž|ß>žz¿Z\]] EXTENDED XOR]hhßž|ß+žz¿GoppADDC - ADD WITH CARRY p€€ ß…ž|ßžz¿/i‡‰‰SUBC - SUB WITH CARRY ‰™™'ßlž|߃žz¿j ¢¢ CSME - REG < MEM CELL - NO SKIP ¢·· ßNž|ßežz¿�{¾ÀÀ CSME - REG > MEM CELL - SKIP + 1ÀÕÕ  ß/ž{ßFžy¿bÝÞÞ CSME - REG = MEM CELL - SKIP + 2Þóó   ßžzß'žx¿Cüýý CSKE - REG < MEM CELL - NO SKIP ý' ß…ž|ß žz¿&i CSKE - REG > MEM CELL - SKIP + 100 ' ßfž{߃žy¿j8:: CSKE - REG = MEM CELL - SKIP + 2:OO '  ßFžzßcžx¿�{XZZ EXTENDED - JUMP Zgg�ß0ž|ßMžz¿knooOVou@uŸ€wž€ß žzß=žx¿[~EXTENDED JUMP & STORE �� '�ž‚ Ÿ~ßžxß!žv¿?š››OV›¡@¡„ ߆ž}ßž{¿2 i§ªªÿÿ"EXTENDED IMS - INCREMENT AND SKIP ªÀÀ „ G  ßdžz߃žx¿jÉËËEXTENDED IMS - INCREMENT ONLY Ëßß „ G ßFž{ßežy¿�{çééOVéï@ïß9ž~ßXž|¿tôõõMUL - MULTIPLY MEMORY BY REGSõ  ' ßž|ß<žz¿XDIV - DIVIDE REGS BY MEMORY$$' ßž|ß!žz¿=+,,OV,2@2 ¿ˆ¿‡ß‡ž{ßžy¿.Œ•i:>>EXTENDED JUMP & STACK >NN ¿lƒ¿ißižy߃žw¿jXZZOVZ`@`„ ß[ž}ßuž{¿ fhh"EXTENDED DMS - DECREMENT AND SKIP h~~ „ g  ß:žzßTžx¿�{‡‰‰EXTENDED DMS - DECREMENT ONLY ‰�� „ g ßž{ß6žy¿c¥¦¦OV¦¬@¬ßž~ß*ž|¿W±²²EXTENDED - DOUBLE LOAD ²ÃÃG†ï¥ß…ž|ßžz¿>iÊÌÌEXTENDED - DOUBLE STORE ÌÝÝG‡ï‹ßkž|߃žz¿$jäææOVæì@ì ¿ŠŸ‹¿†ßYžyßqžw¿�Ÿ€)öþþUTRAP - USER TRAP þ   ¿j¿fß9žyßQžw¿�{STRAP - SYSTEM TRAP '' ¿O¿Kßžyß6žw¿f122OV28@8ßž~ß*ž|¿Z=>>(SBIT - SET GENERAL PURPOSE REGISTER BIT>WW ß…ž}ß ž{¿:i]__*RBIT - RESET GENERAL PURPOSE REGISTER BIT_yy ßcž}߃ž{¿j��0CBIT - COMPLEMENT GENERAL PURPOSE REGISTER BIT �žžß>ž}ß^ž{¿�{¤¦¦0TBIT - TRANSFER GENERAL PURPOSE REG. BIT TO OV ¦ÃÃßž}ß9ž{¿\ÉÊÊSBIT - STATUS REGISTERÊÚÚßž}ß"ž{¿EàááRBIT - STATUS REGISTER áññß…ž}ß ž{¿.i÷ùùCBIT - STATUS REGISTERù  ßmž}߃ž{¿jTBIT - STATUS REGISTER!!ßUž}ßkž{¿�{'))OV)/@/ßGž}ß]ž{¿s566SIN - STATUS INHIBIT6FFß/ž|ßEžz¿[MNNOHNT@T ƒ‡Ã‡ß!ž|ß7žz¿M""[^^FLOATING POINT - FIX^mm ƒnÃn ßž{ßžy¿3uvvOHv|@| ƒ‡Ã‡ß‡ž|ßžz¿%""iƒ‡‡FLOATING POINT - FLOAT‡—— ƒlÃl ßkž{߃žy¿ jŸ¡¡OH¡§@§ ƒ‡Ã‡ß\ž|ßtžz¿ƒ""{®²² FLOATING POINT - ADD - NO ALIGN ²ÇÇ ƒgÃg\"ß:žzßRžx¿aÐÑÑ"FLOATING POINT - ADD - ALIGN ACC 1Ñçç ƒGÃG\"ßžzß2žx¿Aðññ$FLOATING POINT - ADD - ALIGN ACC 11 ñ ƒ&Ã&\"ß…žzßžx¿ i2FLOATING POINT - ADD - NO ALIGN - DIFFERENT SIGNS 11 ƒŒÃˆ\"ß\žzß„žx¿ƒ"j{":?? FLOATING POINT - SUB - NO ALIGN ?TT ƒ‰Ãe\"ß9žzßažx¿`"]__"FLOATING POINT - SUB - ALIGN ACC 1_uu ƒhÃD\"ßžzß@žx¿?~$FLOATING POINT - SUB - ALIGN ACC 11 –– ƒGÃ#\"ß…žzßžx¿iŸ¡¡2FLOATING POINT - SUB - NO ALIGN - DIFFERENT SIGNS ¡¿¿ ƒ‹Ã‹\"ß\žz߃žx¿‚j{""ÈÍÍOHÍÓ@Ó ƒ‡Ã‡ßJž|ßqžz¿p"" ÚÝÝFLOATING POINT - MULTIPLY Ýïï ƒkÃk\" ß,žzßSžx¿RøùùFLOATING POINT - DIVIDE ù   ƒPÃP\" ßžzß8žx¿7OH@ ƒ‡Ã‡ßž|ß*žz¿)""!$$"FLOATING POINT - COMPARE LESS THAN$:: ƒgÃg\"ß…žzßžx¿iCEE&FLOATING POINT - COMPARE GREATER THAN E]] ƒDÃD\" ßažy߃žw¿‚j{gjjFLOATING POINT - COMPARE EQUALj~~-ƒ#Ã#\"  ß?žxßažv¿`p @pÇœ@PǛ›p@P Ÿw Ât0@Ã’p@ÑP@Ÿx ƒ�“�‡�ƒŽ“އŒƒ�“�‡‹ƒŒ“Œ‡ŠŸrqrpú¢û£ü¦ý§€  ð"QD=NQûLQžûLVžûLH~ÜÈ^­Ð]¯Oÿÿÿÿÿ€€ÑDmE7E3E5E3--E2E0+IGN ACC 1Ñçç ƒGÃG\"ßžzß2žx¿Aðññ$FLOATING POINT - ADD - ALIGN ACC 11 ñ ƒ&Ã&\"ß…žzßžx¿ i2FLOATING POINT - ADD - NO ALIGN - DIFFERENT SIGNS 11 ƒŒÃˆ\"ß\žzß„žx¿ƒ"j{":?? FLOATING POINT - SUB - NO ALIGN ?TT ƒ‰Ãe\"ß9žzßažx¿`"]__"FLOATING POINT - S’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I ’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I ’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I ’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I ’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I  ’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I! ’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I" ’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I# ’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I$ ’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I% ’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I& ’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’Iÿÿÿÿÿÿe;820909173247820909173247820909174326eú@€800408111948800408111948820909175346e:' 800408111948800408111948800408111948e800408111948800408111948800408111948800408111948800408111948800408111948e¸8004081121115080040811211500800421160750deï8004081121187580040811212325800421160755de “8004081121270080040811213375800421160801d e»8004081121370080040811214125800421160806d(  e6kk8004081121447580040811215950800421160820d eS0_?8004081122027580040811221625800421160833d eƒ2b^8004081122195080040811223300800421160847d e>88004081122367580040811224600800421160856de[&8004081122492580040811225650800421160903deo)…8004081123000080040811230775800421160911d) * + , - . / 0 ÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿÿÿÿÿÿð. TIMER495 JCLTIMER495 MACTIMER495 NUC TIMER495 OBJ TMBAS95 ASM TMBAS95 OBJ TIMER95B SYS TMNEW95 ASMTMNEW95 OBJTIMER95N SYS TITL LSI 4 INSTRUCTION EXECUTION TIMES - 4/95 NEW INSTRUCTIONS TITL ** TMNEW95.ASM ** (84-93025-22-A000) MACHINE :20 * * ********************************************** ********************************************** ** 1  ** ** TTTTTTT IIIII MM MM EEEEEE RRRRR ** ** T I M M M M E R R ** ** T I M M M EEEEE RRRRR ** ** T I M M E R R ** ** T IIIII M M EEEEEE R R ** **  ** ********************************************** ********************************************** * * * * LSI-4 INSTRUCTION EXECUTION TIMES * 4/95 NEW INSTRUCTION SET * * TITL NEW INSTRUCTION MACROS * U S E R D E F I N E D O P---C O D E S * BITS MACRO S1 SYMATT #(1) IFT S1&:800 S1 SET S1++:400 ENDC S1 SET S1&:700%-4 R1 SET R1++S1 WORD R1 S1 SYMVAL #(1) WORD S1 ENDM TITL STRU MACRO :5C15 STORE AREG IN USER SPACE LODU MACENT :5C25 LOAD AREG FROM USER SPACE LCNTX MACENT :5C45 LOAD CONTEXT CVTDBL MACENT :260D CONVERT TO DOUBLE PRECISION WAIT MACENT :262D WAIT ON SEMAPHORE SIGNAL MACENT :261D SIGNAL SEMAPHORE DEQUEN MACENT :264D REMOVE QUEUE ELEMENT FOLLOWING REFERENCE ELEMENT ENQUEB MACENT :263D INSERT QUEUE ELEMENT BEFORE REFERENCE ELEMENT MOVE MACENT :267D BLOCK MOVE WORD RETURN MACENT :266D RETURN FROM PROCEDURE STRECC MACENT :26AD STORE ERROR CORRECTION CODE LODECC MACENT :26BD LOAD ERROR CORRECTION CODE GENECC MACENT :26CD GENERATE ERROR CORRECTION CODE ENQUEA MACENT :26DD INSERT QUEUE ELEMENT AFTER REFERENCE ELEMENT DELQUE MACENT :26ED DELETE QUEUE ELEMENT REFERENCED NEXTQUE MACENT :26FD POINT TO NEXT QUEUE ELEMENT WORD #(0) ENDM SPACE 1 PUSH: MACRO :0F05 PUSH SINGLE REGISTER ONTO STACK POP:  MACENT :0F07 POP SINGLE REGISTER FROM STACK R1 SYMVAL #(1) R1 SET R1&6%12++#(0) WORD R1 ENDM ENTER MACRO :265D ENTER PROCEDURE SCNTX MACENT :5C35 SAVE CONTEXT WORD #(0) S1 SYMVAL #(1) WORD #(1) ENDM TITL MULS MACRO :1F80 MULTIPLY -- STACK RELATIVE DIVS MACENT :1F81 DIVIDE -- STACK RELATIVE CEAS MACENT :1F84 COMPUTE EFFECTIVE ADDRESS -- STACK RELATIVE DLOADS MACENT :1F86 LOAD DOUBLE REGISTER -- STACK RELATIVE LOADS MACENT :1F88 LOAD SINGLE REGISTER -- STACK RELATIVE ADDS MACENT :1F8A ADD TO REGISTER -- STACK RELATIVE SUBS MACENT :1F8B SUBTRACT FROM REGISTER -- STACK RELATIVE EXCHS MACENT :1F8C EXCHANGE WITH REGISTER -- STACK RELATIVE R1 SYMVAL #(2) R1 SET R1&6%12++#(0) BITS #(1) ENDM SPACE 2 SPACE 2 CSMS MACRO :1F85 COMPARE MAG. & SKIP 3 WAY -- STACK RELATIVE DSTORS MACENT :1F87 STORE DOUBLE REGISTERS -- STACK RELATIVE STORS MACENT :1F89 STORE SINGLE REGISTER -- STACK RELATIVE R1 SYMVAL #(1) R1 SET R1&6%12++#(0) BITS #(2) ENDM SPACE 2 SPACE 2 ADDCS MACRO :1F82 ADD WITH CARRY -- STACK RELATIVE SUBCS MACENT :3F82 SUBTRACT WITH CARRY -- STACK RELATIVE ANDS MACENT :1F8E 'AND' TO REGISTER -- STACK RELATIVE ORS MACENT :3F8E 'OR' TO REGISTER -- STACK RELATIVE XORS MACENT :1F8F 'EXCLUSIVE OR' TO REGISTER -- STACK RELATIVE R1 SYMVAL #(2) R1 SET R1&4%12++#(0) BITS #(1)  ENDM TITL CSKS MACRO :3F8F COMPARE & SKIP 3 WAY -- STACK RELATIVE R1 SYMVAL #(1) R1 SET R1&2 4%12++#(0) BITS #(2) ENDM SPACE 2 JSKS MACRO :1F83 JUMP & STACK -- STACK RELATIVE JMPS MACENT :1F8D JUMP -- STACK RELATIVE JSTS MACENT :3F8D JUMP & STORE -- STACK RELATIVE IMSS MACENT :5F8D INCREMENT & SKIP IF ZERO -- STACK RELATIVE DMSS MACENT :7F8D DECREMENT & SKIP IF ZERO -- STACK RELATIVE DBLADDS MACENT :268B ADD TO DOUBLE REGISTER -- STAK RELATIVE DBLSUBS MACENT :268A SUBTRACT FROM DOUBLE REGISTERS -- STACK RELATIVE DBLADD MACENT :260B DBLSUB MACENT :260A R1  SET #(0) BITS #(1) ENDM SPACE 2 INSR MACRO :030B INSERT BIT FIELD TO MEMORY XTR MACENT :030E EXTRACT BIT FIELD FROM MEMORY XTRS MACENT :030F EXTRACT BIT FIELD AND EXTEND SIGN R1 SYMVAL #(1) R1 SET R1&6%12++#(0) S1 SYMVAL #(2) S1 SET S1-1&15%4++R1 WORD S1 ENDM TITL STORK MACRO :1E80 STORE REGISTER -- STACK RELATIVE R1 SYMVAL #(1) GET REGISTER R1 SET R1&6%12++#(0) OR IN SKELETON AFTER SHIFTING S1 SYMATT #(2) GET ATTRIBUTES IFT S1&:800 ONLY INDIRECT OR NONE ALLOWED R1 SET R1++:40 SET INDIRECT BIT ENDC S1 SYMVAL #(2) GET D6 FIELD R1 SET R1++S1 OR D6 FIELD IN WORD R1 ENDM SPACE 2 LOADK MACRO :1E00 LOAD REGISTER -- STACK RELATIVE R1 SYMVAL #(2) R1 SET R1&6%12++#(0) S1 SYMATT #(1) IFT S1&:800 R1 SET R1++:40 ENDC S1 SYMVAL #(1) R1 SET R1++S1 WORD R1 ENDM TITL STACK RELATIVE INSTRUCTIONS * * INIT TIME 0,0,' LSI 4/95 NEW INSTRUCTION SET' TIME:INC STKBOT RES 14,:CCCC STKTOP RES 14,:2222 SAVEK WORD 0 SAVEL WORD 0 TIME 0,0,'OH',OV JST STKSET JST STKEND TIME 0,0,' STACK RELATIVE - CSKE - REG < MEM - NO SKIP' JST STKSET CSKS A,0 JST STKEND TIME :3333,0,' STACK RELATIVE - CSKE - REG > MEM - SKIP+1' JST STKSET CSKS A,2 HLT JST STKEND TIME :2222,0,' STACK RELATIVE - CSKE - REG = MEM - SKIP+2' JST STKSET CSKS A,3 HLT HLT JST STKEND TIME 0,0,' STACK RELATIVE - CSME - REG < MEM - NO SKIP' JST STKSET CSMS A,0 JST STKEND TIME :3333,0,' STACK RELATIVE - CSME - REG > MEM - SKIP+1' JST STKSET CSMS A,2 HLT JST STKEND TIME :2222,0,' STACK RELATIVE - CSME - REG = MEM - SKIP+2' JST STKSET CSMS A,3 HLT HLT JST STKEND TIME 0,0,' STACK RELATIVE - COPYE - LOAD SINGLE REGISTER ' JST STKSET LOADS 0,A JST STKEND TIME 0,0,' STACK RELATIVE - COPYE - STORE SINGLE REGISTER ' JST STKSET STORS A,0 JST STKEND  TIME 0,0,' STACK RELATIVE - COPYE - STORE DOUBLE REGISTERS ' JST STKSET DSTORS AQ,0 JST STKEND TIME 0,0,' STACK RELATIVE - COPYE - LOAD DOUBLE REGISTERS ' JST STKSET DLOADS 0,AQ JST STKEND TIME 0,0,' STACK RELATIVE - ADDE - ADD TO REGISTER ' JST STKSET ADDS 0,A JST STKEND TIME 0,0,' STACK RELATIVE - SUBE - SUBTRACT FROM REGISTER ' JST STKSET SUBS 0,A JST STKEND TIME 0,0,' STACK RELATIVE - EXCHE - EXCHANGE REGISTER WITH MEM ' JST STKSET EXCH 0,A JST STKEND TIME 0,0,' STACK RELATIVE - ANDE - AND TO REGISTER ' JST STKSET ANDS 0,A JST STKEND TIME 0,0,' STACK RELATIVE - XORE - EXCLUSIVE OR TO REGISTER ' JST STKSET XORS 0,A JST STKEND TIME 0,0,' STACK RELATIVE - ORE - INCLUSIVE OR TO REGISTER ' JST STKSET ORS 0,A JST STKEND TIME 0,0,' STACK RELATIVE - ADDC - ADD WITH CARRY ' JST STKSET ADDCS 0,A JST STKEND TIME 0,0,' STACK RELATIVE - SUBC - SUB WITH CARRY ' JST STKSET SUBCS 0,A JST STKEND TIME 0,0,' PUSH - PUSH SINGLE REGISTER ONTO STACK' JST STKSET PUSH: A JST S3 TKEND TIME 0,0,' POP - POP SINGLE REGISTER FROM STACK' JST STKSET POP: A JST STKEND TIME 0,0,' STACK RELATIVE - MUL - MULTIPLY ' JST STKSET MULS 0,AQ JST STKEND TIME 0,0,' STACK RELATIVE - DIV - DIVIDE ' JST STKSET DIVS 4,AX JST STKEND TIME 0,0,' STACK RELATIVE - CEA - COMPUTE EFFECTIVE ADDRESS ' JST STKSET CEAS 0,A JST STKEND TIME 0,0,' STACK RELATIVE - OH',OV COPY A,STKTOP JST STKSET JST STKEND TIME :FFFF,0,' STACK RELATIVE - IMSE - INCREMENT & SKIP ' COPY A,STKTOP JST STKSET IMSS 0 HLT JST STKEND TIME 1,0,' STACK RELATIVE - IMSE - INCREMENT ONLY ' COPY A,STKTOP JST STKSET IMSS 0 JST STKEND  TIME 2,0,' STACK RELATIVE - DMSE - DECREMENT ONLY ' COPY A,STKTOP JST STKSET DMSS 0 JST STKEND TIME 0,0,' STACK RELATIVE - DMSE - DECREMENT & SKIP ' COPY A,STKTOP JST STKSET DMSS 0 HLT JST STKEND TIME TMJMP,:9F80,' STACK RELATIVE - OH',OV JST STKSET COPY X,STKTOP COPY A,STKTOP+1 JMP *$+1 WORD $+1 TMJMP JST STKEND TIME TMJMP1,:9F80,' STACK RELATIVE - JMPE - JUMP ' JST STKSET COPY X,STKTOP COPY A,STKTOP+1 JMPS 0 TMJMP1 JST STKEND TIME 0,0,' STACK RELATIVE - OH',OV JST STKSET DSTORS AX,2 JST STKEND TIME 0,0,' STACK RELATIVE - DBLADD - DOUBLE PRECISION ADD ' JST STKSET DSTORS AX,2 DBLADDS 2 JST STKEND TIME 0,0,' STACK RELATIVE - DBLSUB - DOUBLE PRECISION SUB ' JST STKSET DSTORS AX,2 DBLSUBS 2 JST STKEND TITL CONTEXT SWITCH INSTRUCTIONS TIME 0,0,'OH',OV JST STKSET COPY =LOADC1,A COPY A,STKTOP COPY =:170,A COPY A,STKTOP+1 SIN 1 COPY =0,X LOADC1 JST STKEND TIME 0,0,' LCNTX - LOAD CONTEXT - CP = 0 ' JST STKSET COPY =LOADC2,A COPY A,STKTOP COPY =:170,A COPY A,STKTOP+1 SIN 2 COPY =0,X LCNTX LOADC2 JST STKEND TIME 0,0,'OH',OV JST STKSET COPY =SAVEC10,A COPY A,STKTOP COPY =:170,A COPY A,STKTOP+1 SIN 2 COPY =0,X LCNTX SAVEC10 JST STKEND TIME 0,0,' SCNTX - SAVE CONTEXT - CP = 0' JST STKSET COPY =SAVEC11,A  COPY A,STKTOP COPY =:170,A COPY A,STKTOP+1 SIN 2 COPY =0,X LCNTX SAVEC11 SCNTX SAVEC12 SAVEC12 WORD :170 WORD STKTOP JST STKEND TIME 0,0,'OH',OV JST STKSET COPY =:170,A COPY A,CONTXT+2 COPY =LOADC3,A COPY =CONTXT,X SIN 1 COPY A,CONTXT LOADC3 JST STKEND TIME 0,0,' LCNTX - LOAD CONTEXT - CP NOT = 0' JST STKSET COPY =:170,A COPY A,CONTXT+2 COPY =CONTXT,X COPY =LOADC4,A SIN 2 COPY A,CONTXT LCNTX LOADC4 JST STKEND TIME 0,0,'OH',OV JST STKSET COPY =:170,A COPY A,CONTXT+2 COPY =SAVEC20,A COPY =CONTXT,X SIN 2 COPY A,CONTXT LCNTX SAVEC20 JST STKEND TIME 0,0,' SCNTX - SAVE CONTEXT - CP NOT = 0' JST STKSET COPY =:170,A COPY A,CONTXT+2 COPY =CONTXT,X COPY =SAVEC21,A SIN 2 COPY A,CONTXT LCNTX SAVEC21 SCNTX SAVEC22 SAVEC22 WORD :170 WORD STKTOP JST STKEND TIME 0,0,'OH',OV COPY A,Q TIME :8000,0,' CVTDBL - CONVERT TO DOUBLE PRECISION - NEG' COPY A,Q CVTDBL TIME 0,0,' CVTDBL - CONVERT TO DOUBLE PRECISION - POS' COPY A,Q CVTDBL TIME 0,5,' OH',OV COPY =STKTOP-3,Y TIME 0,5,' XTR - EXTRACT BIT FIELD - 1 BIT FROM CENTER' COPY =STKTOP-3,Y XTR A,1 TIME 0,5,' XTR - EXTRACT BIT FIELD - 4 BITS FROM CENTER' COPY =STKTOP-3,Y XTR A,4 TIME 0,10,' XTR - EXTRACT BIT FIELD - 16 BITS ACROSS BOUNDARY' COPY =STKTOP-3,Y XTR A,16 TIME 0,5,' XTRS - EXTRACT SIGNED BIT FIELD - 1 BIT FROM CENTER' COPY =STKTOP-3,Y XTRS A,1 TIME 0,5,' XTRS - EXTRACT SIGNED BIT4  FIELD - 4 BITS FROM CENTER' COPY =STKTOP-3,Y XTRS A,4 TIME 0,10,' XTRS - EXTRACT SIGNED BIT FIELD - 16 BITS ACROSS BOUNDARY' COPY =STKTOP-3,Y XTRS A,16 TIME :F,5,' INSR - INSERT BIT FIELD - 1 BIT' COPY =STKTOP-3,Y INSR A,1 TIME :F,5,' INSR - INSERT BIT FIELD - 4 BITS INTO CENTER' COPY =STKTOP-3,Y INSR A,4 TIME :FFFF,10,' INSR - INSERT BIT FIELD - 16 BITS ACROSS BOUNDARY' COPY =STKTOP-3,Y INSR A,16 TIME 0,STKTOP,' OH',OV COPY A,STKTOP TIME :00,STKTOP,' SIGNAL - SIGNAL SEMAPHORE' COPY A,STKTOP SIGNAL TIME :3F,STKTOP,' WAIT - WAIT ON SEMAPHORE' COPY A,STKTOP WAIT TIME 0,0,' OH',OV JST STKSET JST STKEND TIME 0,0,' ENTER - ENTER PROCEDURE' JST STKSET ENTER 5 JST STKEND TIME -1,0,' OH',OV COPY A,CNT:LOW COPY A,CNT:HIGH COPY =NEXT,A COPY A,CONTXT THIS OH MAKES SURE THAT THE CONTEXT COPY =CONTXT,X POINTER IS NOT =0, OTHERWISE AN INFINITE COPY K,A COPY A,7(X) COPY L,A COPY A,1(X) LCNTX . LOOP MAY RESULT & TIMER WOULD NOT FINISH. NEXT EQU $ TIME 0,0,' OH',OV JST STKSET COPY =RTN1,A COPY A,STKTOP RTN11 JST STKEND TIME 0,0,' RETURN - RETURN FROM PROCEDURE' JST STKSET COPY =RTN2,A COPY A,STKTOP  RETURN RTN22 JST STKEND TIME 0,0,' OH',OV COPY =STKTOP,X COPY =2,A COPY =STKBOT,Q SIN 1 TIME 0,0,' MOVE - MOVE 1 WORD'  COPY =STKTOP,X COPY =1,A COPY =STKBOT,Q SIN 1 MOVE TIME 0,0,' MOVE - MOVE 2 WORDS' COPY =STKTOP,X COPY =2,A COPY =STKBOT,Q SIN 1 MOVE TIME 0,0,' OH',OV COPY =QUEUE,X TIME 0,0,' DEQUEN - REMOVE NEXT QUEUE ELEMENT (HEAD NODE)' COPY =QUEUE,X  DEQUEN TIME QUEUE1,0,' OH',OV COPY =QUEUE,X COPY X,0(X) COPY X,1(X) COPY A,Q ENQUEA TIME QUEUE1,0,' DEQUEN - REMOVE NEXT QUEUE ELEMENT' COPY =QUEUE,X COPY X,0(X) COPY X,1(X) COPY A,Q ENQUEA DEQUEN TIME QUEUE1,0,' OH',OV COPY =QUEUE,X COPY X,0(X) COPY X,1(X) COPY A,Q TIME QUEUE1,0,' ENQUEB - INSERT BEFORE QUEUE ELEMENT' COPY =QUEUE,X COPY X,0(X) COPY X,1(X) COPY A,Q ENQUEB TIME QUEUE1,0,' ENQUEA - INSERT AFTER QUEUE ELEMENT' COPY =QUEUE,X COPY X,0(X) COPY X,1(X) COPY A,Q ENQUEA TIME QUEUE1,0,' OH',OV COPY =QUEUE,X COPY X,0(X) COPY X,1(X) COPY A,Q ENQUEA EXCH Q,X TIME QUEUE1,0,' DELQUE - DELETE THIS QUEUE ELEMENT' COPY =QUEUE,X COPY X,0(X) COPY X,1(X) COPY A,Q ENQUEA EXCH Q,X DELQUE TIME QUEUE,QUEUE,' OH',OV COPY A,X COPY A,0(X) COPY A,1(X) TIME QUEUE,QUEUE,' DELQUE - DELETE THIS QUEUE ELEMENT (HEAD NODE)' COPY A,X COPY A,0(X) COPY A,1(X) DELQUE TIME QUEUE,QUEUE,' NEXTQUE- POINT TO NEXT QUEUE ELEMENT' COPY A,X COPY A,0(X) COPY A,1(X) NEXTQUE * * * TIME 0,0,' OH',OV JST STKSET JST STKEND TIME 0,0,' STACK RELATIVE - COPY - STORE SINGLE REGISTER ' JST STKSET STORK A,0 JST STKEND TIME 0,0,' STACK RELATIVE - COPY - LOAD SINGLE REGISTER ' JST STKSET LOADK 0,A JST STKEND TIME 0,STKTOP,' OH',OV TIME 0,STKTOP,' GENECC - GENERATE ERROR CORRECTION CODE' GENECC TIME 0,STKTOP,' OH',OV COPY A,0(X) TIME 0,STKTOP,' STRECC -  STORE ERROR CORRECTION CODE' COPY A,0(X) STRECC TIME 0,STKTOP,' LODECC - LOAD ERROR CORRECTION CODE' COPY A,0(X) LODECC TIME -1,0,' OH',OV COPY A,CNT:LOW COPY A,CNT:HIGH SET UP FOR 1 PASS ONLY COPY =1,A OUT A,5 TURN ON TABLE ACCESS COPY =:FC00,X COPY =:FC40,Y TEST0 COPY =:3000,A TEST1 COPY A,0(X) ADD =1,A ADD =1,X CSK X,Y JMP TEST1 NOP COPY =:3000,A COPY =:F5 C80,Y TEST2 COPY A,0(X) ADD =1,A ADD =1,X CSK X,Y JMP TEST2 NOP OUT A,4 RESET MMU TIME 0,STKTOP,' OH',OV COPY =1,A OUT A,6 SET USER #1 COPY =2,A OUT A,5 TURN ON TRANSLATION OUT A,4 RESET MMU TIME 0,STKTOP,' STRU - STORE TO USER SPACE' COPY =1,A OUT A,6 COPY =2,A OUT A,5 STRU OUT A,4 TIME 0,STKTOP,' LODU - LOAD FROM USER SPACE' COPY =1,A OUT A,6 COPY =2,A OUT A,5 LODU OUT A,4 TIME:INC TIME:END STATUS WORD :170 RTN1 WORD RTN11 RTN2 WORD RTN22 STKSET ENT COPY K,Q COPY Q,SAVEK COPY L,Q COPY Q,SAVEL COPY =STKTOP,Q COPY Q,K COPY =STKBOT,Q COPY Q,L JMP *STKSET STKEND ENT COPY STATUS,Q COPY Q,S COPY SAVEK,Q COPY Q,K COPY SAVEL,Q COPY Q,L JMP *STKEND CONTXT RES 9,0 QUEUE WORD QUEUE WORD QUEUE RES 10 QUEUE1 WORD QUEUE1 WORD QUEUE1 RES 10 END JST STKEND TIME 0,0,' STACK RELATIVE - COPY - STORE SINGLE REGISTER ' JST STKSET STORK A,0 JST STKEND TIME 0,0,' STACK RELATIVE - COPY - LOAD SINGLE REGISTER ' JST STKSET LOADK 0,A JST STKEND TIME 0,STKTOP,' OH',OV TIME 0,STKTOP,' GENECC - GENERATE ERROR CORRECTION CODE' GENECC TIME 0,STKTOP,' OH',OV COPY A,0(X) TIME 0,STKTOP,' STRECC -  STORE ERROR CORRECTION CODE' COPY A,0(X) STRECC TIME 0,STKTOP,' LODECC - LOAD ERROR CORRECTION CODE' COPY A,0(X) LODECJTIME:ST O0SEGMENTBLANK o éKCNT:HIGHCNT:LOW TM:RTN ig & LSI  4/95 NEW INSTRUCTION SETß…ž~ß„ž|¿ƒtttÌÌ""@@OH@F@F¿‡¿‡ßVž|ßUžz¿T ² ¼MPP , STACK RELATIV E - CSKE - REG < MEM - NO SKIPPkk ¿b?�¿`ß/žzß.žx¿-tuu 33, STACK RELATIV E - CSKE - REG > MEM - SKIP+1 u�� ¿=?� ¿:ß žyßžw¿š›› "", STACK RELATIV E - CSKE - REG = MEM - SKIP+2 ›¶¶ ¿?�  ¿ß…žxß„žv¿ƒtttÁÅÅ , STACK RELATIV E - CSME - REG < MEM - NO SKIPÅàà ¿‰…¿‡ß]žzß\žx¿[ ² ¼éìì 33, STACK RELATIV E - CSME - REG > MEM - SKIP+1 ì ¿b… ¿_ß5žyß4žw¿3 "", STACK RELATIV E - CSME - REG = MEM - SKIP+2 -- ¿<…  ¿8ßžxß žv¿ 899 0 STACK RELATIV E - COPYE - LOAD SINGLE REGISTER 9VV ¿ˆ¿ß…žzß„žx¿ƒttt_cc 0 STACK RELATIV E - COPYE - STORE SINGLE REGISTER c€€ ¿‰‰¿‡ß[žzßZžx¿Y ² ¼‰ŒŒ 2 STACK RELATIV E - COPYE - STORE DOUBLE REGISTERS Œªª ¿__‡¿]ß1žzß0žx¿/³´´ 0 STACK RELATIV E - COPYE - LOAD DOUBLE REGISTERS ´ÑÑ ¿8_†¿6ß žzß žx¿ÚÛÛ * STACK RELATIV E - ADDE - ADD TO REGISTER Ûõõ ¿Š¿ß…žzß„žx¿ƒtttþ 2 STACK RELATIV E - SUBE - SUBTRACT FROM REGISTER    ¿‰‹¿‡ßZžzßYžx¿X ² ¼),, 6 STACK RELATIV E - EXCHE - EXCHANGE REGISTER WITH MEM ,LL ¿]�¿\ß/ž{ß.žy¿-TUU * STACK RELATIV E - ANDE - AND TO REGISTER Uoo ¿:Ž¿8ß žzß žx¿ xyy 4 STACK RELATIV E - XORE - EXCLUSIVE OR TO REGISTER y˜˜ ¿�¿ß…žzß„žx¿ƒt6 tt¡¥¥ 4 STACK RELATIV E - ORE - INCLUSIVE OR TO REGISTER ¥ÄÄ ¿‰?Ž¿‡ßYžzßXžx¿W ² ¼ÍÐÐ * STACK RELATIV E - ADDC - ADD WITH CARRY Ðêê ¿c‚¿aß3žzß2žx¿1óôô * STACK RELATIV E - SUBC - SUB WITH CARRY ô ¿??‚¿=ßžzßžx¿  ( PUSH - PUSH S INGLE REGISTER ONTO STACK 11 ¿¿ß…ž{ß„žy¿ƒttt9== & POP - POP SI NGLE REGISTER FROM STACK=UU ¿ˆ¿‡ßaž{ß`žy¿_ ² ¼]`` $ STACK RELATIV E - MUL - MULTIPLY `ww ¿f_€¿dß>žzß=žx¿<€�� " STACK RELATIV E - DIV - DIVIDE �—— ¿F?�¿Dßžzßžx¿ ¡¡ 4 STACK RELATIV E - CEA - COMPUTE EFFECTIVE ADDRESS ¡ÀÀ ¿„¿ß…žzß„žx¿ƒtttÉÍÍ  STACK RELATIVE - OHÍÜ@Ü ‡ˆ¿¿‡ßjž{ßižy¿h0 ¼äçç ÿÿ, STACK RELATIV E - IMSE - INCREMENT & SKIP ç ‡b¿Š_� ¿^ßAžxß@žv¿? ²  * STACK RELATIV E - IMSE - INCREMENT ONLY )) ‡;¿c_�¿8ßžyßžw¿344 * STACK RELATIV E - DMSE - DECREMENT ONLY 4NN ‡¿>�¿ß…žyß„žw¿ƒtttX\\ , STACK RELATIV E - DMSE - DECREMENT & SKIP \ww ‡‹¿� ¿‡ß[žxßZžv¿Y0 ¼‚……™ Ÿ€ STACK RELATIVE - OH…”@”¿‹§m‡ŠŸ€™¿jß>žxß=žv¿< ²1Ÿ¢¢¼ Ÿ€ STACK RELATIVE - JMPE - JUMP ¢·· ¿h§J‡g�¿Gßžxßžv¿ÂÃà  STACK RELATIVE - OHÃÒ@Ò ¿M?‡¿.ßžzßžx¿�tÛÝÝ 0 STACK RELATIV E - DBLADD - DOUBLE PRECISION ADD Ýúú ¿%?‡&‹¿ß…žxß„žv¿Wtt 0 STACK RELATIV E - DBLSUB - DOUBLE PRECISION SUB %% ¿‹?‡&Š¿‡ßZžxßYžv¿, ² ¼033OH39@9 ¿w‚�‡‹‚‹‡‹)¿qßDžvßCžt¿0p1@FKK LCNTX - LOAD  CONTEXT - CP = 0 K`` ¿P‚އd‚d‡d)\E¿Ißžußžs¿�thnqqOHqw@w ¿9‚�‡M‚M‡M)\E¿2ßžußžs¿j…‡‡  SCNTX - SAVE CONTEXT - CP = 0‡›› ¿‚“‡)‚)‡))\E\5¥p0¿ ß…žqß„žo¿Btt£­±±OH±·@· ¿�‚‡Ž‚ޢЇˆ¿ˆßnžvßmžt¿+ ² Ä ¼ ƾÄÊÊ " LCNTX - LOAD  CONTEXT - CP NOT = 0Êàà ¿d‚�‡e¢b‚‹‡_\E¿^ßDžußCžs¿pèîòòOHòø@ø ¿L‚u‡M‚Œ¢I‡G\E¿Fß,žuß+žs¿�t   " SCNTX - SAVE  CONTEXT - CP NOT = 0    ¿$‚M‡%¢"‚�‡\E\5*p0¿ßžq߃žo¿Ut(266OH6<@<@ß…ž}ßsž{¿EtBDD €, CVTDBL - CONV ERT TO DOUBLE PRECISION - NEG D__@& ßaž|ßOžz¿!fgg , CVTDBL - CONV ERT TO DOUBLE PRECISION - POS g‚‚@& ß>ž|ß,žz¿�t‰‹‹ OH ‹’@’â†ß/ž}ßž{¿r-˜šš . XTR - EXTRAC T BIT FIELD - 1 BIT FROM CENTER 7 š¶¶âbß ž|߃žz¿Mt½¿¿ . XTR - EXTRAC T BIT FIELD - 4 BITS FROM CENTER¿ÛÛâ=>ß…ž|ß^žz¿(tâää 4 XTR - EXTRAC T BIT FIELD - 16 BITS ACROSS BOUNDARY äâþß]ž|ß6žz¿    4 XTRS - EXTRAC T SIGNED BIT FIELD - 1 BIT FROM CENTER **â‡ß6ž|ßžz¿‚-t144 6 XTRS - EXTRAC T SIGNED BIT FIELD - 4 BITS FROM CENTER 4TTâ]?ß ž|߃žz¿Xt[]] : XTRS - EXTRAC T SIGNED BIT FIELD - 16  BITS ACROSS BOUNDARY]â2ÿß…ž|ßXžz¿-t†ˆˆ  INSR - INSERT BIT FIELD - 1 BITˆ��â ßgž|ß:žz¿¤¥¥ . INSR - INSERT BIT FIELD - 4 BITS INTO CENTER ¥ÁÁâ‡;ßCž|ßžz¿‚-tÈËË ÿÿ 2 INSR - INSERT BIT FIELD - 16 BITS ACROSS BOUNDARYËééâ_ûßž|߃žz¿Ztðòò0 OH òù@ù‡†ß ž}ßtž{¿K0ÿ0  SIGNAL - SIGNAL SEMAPHORE‡l&ß…ž|ßYžz¿0t?0  WAIT - WAIT ON SEMAPHORE //‡P&-ßiž|ß=žz¿677 OH 7>@>¿‡¿‡ßZž|ß.žz¿ ² ¼EHH  ENTER - ENTER PROCEDURE HZZ ¿k&]¿iß<žzßžx¿�tceeÿÿ OH el@l ‡.‡‚އޢ�p„‡P„�\Eß$žt߃žr¿itv Ä{ OH †@† ¿?‚‰‡‡¿=ßžzßožx¿U0 °�’’ RETURN - RETU RN FROM PROCEDURE ’§§ ¿‚Їf&m¿ß…žyßMžw¿3t ±±´´ OH ´»@» ¢T ‡ßržzß:žx¿ "ÄÆÆ  MOVE - MOVE 1 WORD ÆÖÖ ¢9 Âl&}ßVžyßžw¿àáá  MOVE - MOVE 2 WORDSáññ ¢ ÂQ&}ß;žyßžw¿�tûýý OH ý @ ¢†ß,ž}ß„ž{¿r Ít    0 DEQUEN - REMO VE NEXT QUEUE ELEMENT (HEAD NODE)   * *¢`&Mßž|ß]žz¿K 1 2 2 Ù OH  2 9@ 9 ¢Q¤€¤�@&Ýß…žyßKžw¿9t C E E Ù $ DEQUEN - REMOVE NEXT QUEUE ELEMENT  E \ \ ¢.¤€¤�@&Ý&Mßažxß'žv¿ g h h Ù OH  h o@ o ¢¤€¤�@ßPžzßžx¿ x y y Ù & ENQUEB - INSERT BEF ORE QUEUE ELEMENT  y ‘ ‘ ¢Š¤€¤�@&=ß-žyß„žw¿ƒ Ítt › Ÿ Ÿ Ù $ ENQUEA - INSERT AFTER QUEUE ELEMENT Ÿ ¶ ¶ ¢e¤€¤�@&Ýßžyß_žw¿^ À Á Á Ù OH  Á È@ È ¢S¤€¤�@&Ý Hß…žxßLžv¿Kt Ó Õ Õ Ù $ DELQUE - DELETE THIS QUEUE ELEMENT  Õ ì ì ¢/¤€¤�@&Ý H&íß`žwß'žu¿& ø ù ù Í Í OH  ù @  „€„�ßPž{ßžy¿    Í Í 0 DELQUE - DELETE THIS  QUEUE ELEMENT (HEAD NODE)   & & „€„�&íß)žz߃žx¿‚tt / 2 2 Í Í & NEXTQUE- POINT TO NEXT QUEUE ELEMENT  2 J J „€„�&ýßžzß_žx¿^ S T T OH  T [@ [¿‡¿‡ß‡ž|ßPžz¿O ² ¼t b f f 0 STACK RELATIV E - COPY - STORE SINGLE REGISTER  f ƒ ƒ ¿_€¿^ß^ž{ß'žy¿& ‹ Œ Œ 0 STACK RELATIV E -8  COPY - LOAD SINGLE REGISTER  Œ © © ¿9¿8ß8ž{ßžy¿�t ± ³ ³0 OH  ³ º@ ºß*ž~߃ž|¿st ¿ Á Á0 ( GENECC - GENERATE ERR OR CORRECTION CODE Á Ú Ú&Íß ž}ßbž{¿R à á á0 OH  á è@ 脀߅ž}ßTž{¿Dt î ð ð0 ( STRECC - STORE ERR OR CORRECTION CODE ð  „€&­ßcž|ß2žz¿"   0 ( LODECC - LOAD ERR OR CORRECTION CODE  * *„€&½ßBž|ßžz¿ 1 2 2ÿÿ OH  2 9@ 9 ‡5‡ ¢™â™‚™„€ + kž{ ‚’â’„€ + kž{ßžh߃žf¿‚ttüü@0ü€ T [ [0 OH  [ b@ b  ßžyßkžw¿j l m m0  STRU - STORE TO USER SPACE m � �  \ß…žxßKžv¿Jt Œ Ž Ž0  LODU - LOAD FROM USER SPACE Ž ¢ ¢  \%ßdžxß*žv¿)p‰«  @pǰ@Pǯ¯p@®P@Ÿv Âq0@Ã¥p@äP@Ÿx  Í Í Ù Ù Ù å>?0"ÿÿ@  „€„�ßPž{ßžy¿    Í Í 0 DELQUE - DELETE THIS  QUEUE ELEMENT (HEAD NODE)   & & „€„�&íß)žz߃žx¿‚tt / 2 2 Í Í & NEXTQUE- POINT TO NEXT QUEUE ELEMENT  2 J J „€„�&ýßžzß_žx¿^ S T T OH  T [@ [¿‡¿‡ß‡ž|ßPžz¿O ² ¼t b f f 0 STACK RELATIV E - COPY - STORE SINGLE REGISTER  f ƒ ƒ ¿_€¿^ß^ž{ß'žy¿& ‹ Œ Œ 0 STACK RELATIV E -OVicEdDanoj é+¦›‚§A¦ *ÿ €¦”‚¡A¦™‚‹†Ž†•: žË‚˜C: žÆ# OC PZ2 P!‚_E‚…„ƒ ž‹# 0‚VE‚…„ƒ ž‚# 1 †L¢Œþ Ÿ‹ †G¢‰þŸ† †B¢…þŸ� è ¢—ÿ—C ž—žfÿ†-‚/Ãÿ�†-¦+‚(M †)†) †(: EžO  ‚…†: qBžOZ2¢þþ0¢ýÿý¢ýÿû¢üÿù¢úÿ÷ÿ‡òWƒö†èƒõ†çƒô†æ‚è‡ð‚ñ‡ï£ð¦× †×‚á†ÝÞÜž~‚Ö‡ãÿ†Ñƒå‡åƒå‡å¢Èà€€‚ ƒUœ@ WƒÔ†À¢¾ �‚½1ËŽ¹’»Á’¹¾Û¿ÒƒqÁž‡†±žY’±Á’¯†«žt¢Èÿº¢»ÿ¸‚­‡¹‚¬‡¸‚«‡·U¢®ÿ½Ÿ½ $6Å'†– † žƒ†’ÿ†œÞ•ž‡‚”‡¢ƒ¨‡¨ƒ¤‡¤ž‚ÿ†‰‚„Þ�%…Ÿe ðÿü ¼¿€ Š © é Á Ú‘’“ Ô § œ ¨ � [ î <' †í‚¦†ìü†ë‚_’ç) B)-†á%§à'ÞÞ †ß‚Ú)/‹Ú+=�׆ÔÞÕ‚Ö΃ÒL,0) ž‰ … † ‡ „ … ˆ † ž%§Â'ÞÀ, ž�¦Àƒ½Ã).ÞºžtÞ¹žZ¢Šª³.%€€‡°Þ¯€�‡­'Ÿ< £0 ¢ �1Až£IPâ²¢²€@„€+U½Þ¢ž‚â¬žŠ¢«€€+â¨À€ÄB+k»££+€€+À€ÄA+k»‚š„@¢–ÿ˜ŸW  Û Ü ñ  é}ð`þpÿØÿü0 0 5 5 éìÿú.0 LSI-4/95 TIMING TEST PROGRAM (A000)0 REAL-TIME-CLOCK SHOULD BE SET TO TTLF  0000.000 MICROSEC - I/O ERROR(0 LSI-4/95 TIMING PROGRAM....END PARAMETER ERROR DOCUMENTATION NOT FOUNDPP & LSI 4/95 NEW INSTRUCTION SETß…ž~ß„ž|¿ƒ œ � ®ÌÌ""@@OH@F@F¿‡¿‡ßVž|ßUžz¿T ² ¼MPP, STACK RELATIVE - CSKE - REG < MEM - NO SKIPPkk ¿b?�¿`ß/žzß.žx¿-tuu33, STACK RELATIVE - CSKE - REG > MEM - SKIP+1 u�� ¿=?� ¿:ß žyßžw¿š››"", STACK RELATIVE - CSKE - REG = MEM - SKIP+2 ›¶¶ ¿?�  ¿ß…žxß„žv¿ƒ œ � ®ÁÅÅ, STACK RELATIVE - CSME - 9 REG < MEM - NO SKIPÅàà ¿‰…¿‡ß]žzß\žx¿[ ² ¼éìì33, STACK RELATIVE - CSME - REG > MEM - SKIP+1 ì ¿b… ¿_ß5žyß4žw¿3"", STACK RELATIVE - CSME - REG = MEM - SKIP+2 -- ¿<…  ¿8ßžxß žv¿ 8990 STACK RELATIVE - COPYE - LOAD SINGLE REGISTER 9VV ¿ˆ¿ß…žzß„žx¿ƒ œ � ®_cc0 STACK RELATIVE - COPYE - STORE SINGLE REGISTER c€€ ¿‰‰¿‡ß[žzßZžx¿Y ² ¼‰ŒŒ2 STACK RELATIVE - COPYE - STORE DOUBLE REGISTERS Œªª ¿__‡¿]ß1žzß0žx¿/³´´0 STACK RELATIVE - COPYE - LOAD DOUBLE REGISTERS ´ÑÑ ¿8_†¿6ß žzß žx¿ÚÛÛ* STACK RELATIVE - ADDE - ADD TO REGISTER Ûõõ ¿Š¿ß…žzß„žx¿ƒ œ � ®þ2 STACK RELATIVE - SUBE - SUBTRACT FROM REGISTER    ¿‰‹¿‡ßZžzßYžx¿X ² ¼),, 6 STACK RELATIVE - EXCHE - EXCHANGE REGISTER WITH MEM ,LL ¿]�¿\ß/ž{ß.žy¿-TUU* STACK RELATIVE - ANDE - AND TO REGISTER Uoo ¿:Ž¿8ß žzß žx¿ xyy4 STACK RELATIVE - XORE - EXCLUSIVE OR TO REGISTER y˜˜ ¿�¿ß…žzß„žx¿ƒ œ � ®¡¥¥4 STACK RELATIVE - ORE - INCLUSIVE OR TO REGISTER ¥ÄÄ ¿‰?Ž¿‡ßYžzßXžx¿W ² ¼ÍÐÐ* STACK RELATIVE - ADDC - ADD WITH CARRY Ðêê ¿c‚¿aß3žzß2žx¿1óôô* STACK RELATIVE - SUBC - SUB WITH CARRY ô ¿??‚¿=ßžzßžx¿ ( PUSH - PUSH SINGLE REGISTER ONTO STACK 11 ¿¿ß…ž{ß„žy¿ƒ œ � ®9==& POP - POP SINGLE REGISTER FROM STACK=UU ¿ˆ¿‡ßaž{ß`žy¿_ ² ¼]``$ STACK RELATIVE - MUL  - MULTIPLY `ww ¿f_€¿dß>žzß=žx¿<€��" STACK RELATIVE - DIV - DIVIDE �—— ¿F?�¿Dßžzßžx¿ ¡¡4 STACK RELATIVE - CEA - COMPUTE EFFECTIVE ADDRESS ¡ÀÀ ¿„¿ß…žzß„žx¿ƒ œ � ®ÉÍÍ STACK RELATIVE - OHÍÜ@Ü ‡ˆ¿¿‡ßjž{ßižy¿h0 ¼äççÿÿ, STACK RELATIVE - IMSE - INCREMENT & SKIP ç ‡b¿Š_� ¿^ßAžxß@žv¿? ² * STACK RELATIVE - IMSE - INCREMENT ONLY )) ‡;¿c_�¿8ßžyßžw¿344* STACK RELATIVE - DMSE - DECREMENT ONLY 4NN ‡¿>�¿ß…žyß„žw¿ƒ œ � ®X\\, STACK RELATIVE - DMSE - DECREMENT & SKIP \ww ‡‹¿� ¿‡ß[žxßZžv¿Y0 ¼‚……™ Ÿ€ STACK RELATIVE - OH…”@”¿‹§m‡ŠŸ€™¿jß>žxß=žv¿< ²1Ÿ¢¢¼Ÿ€ STACK RELATIVE - JMPE - JUMP ¢·· ¿h§J‡g�¿Gßžxßžv¿ÂÃà STACK RELATIVE - OHÃÒ@Ò ¿M?‡¿.ßžzßžx¿� ®ÛÝÝ0 STACK RELATIVE - DBLADD - DOUBLE PRECISION ADD Ýúú ¿%?‡&‹¿ß…žxß„žv¿W œ �0 STACK RELATIVE - DBLSUB - DOUBLE PRECISION SUB %% ¿‹?‡&Š¿‡ßZžxßYžv¿, ² ¼033OH39@9¿w: ‚�‡‹‚‹‡‹)¿qßDžvßCžt¿0p1@FKK LCNTX - LOAD CONTEXT - CP = 0 K``¿P‚އd‚d‡d)\E¿Ißžußžs¿� ®hnqqOHqw@w¿9‚�‡M‚M‡M)\E¿2ßžußžs¿j…‡‡ SCNTX - SAVE CONTEXT - CP = 0‡›› ¿‚“‡)‚)‡))\E\5¥p0¿ ß…žqß„žo¿B œ �£­±±OH±·@·¿�‚‡Ž‚ޢЇˆ¿ˆßnžvßmžt¿+ ² Ä ¼ ƾÄÊÊ" LCNTX - LOAD CONTEXT - CP NOT = 0Êàà¿d‚�‡e¢b‚‹‡_\E¿^ßDžußCžs¿pèîòòOHòø@ø¿L‚u‡M‚Œ¢I‡G\E¿Fß,žuß+žs¿� ®  " SCNTX - SAVE CONTEXT - CP NOT = 0    ¿$‚M‡%¢"‚�‡\E\5*p0¿ßžq߃žo¿U �(266OH6<@<@ß…ž}ßsž{¿E œBDD€, CVTDBL - CONVERT TO DOUBLE PRECISION - NEG D__@& ßaž|ßOžz¿!fgg, CVTDBL - CONVERT TO DOUBLE PRECISION - POS g‚‚@& ß>ž|ß,žz¿� ®‰‹‹ OH ‹’@’â†ß/ž}ßž{¿r-˜šš. XTR - EXTRACT BIT FIELD - 1 BIT FROM CENTER š¶¶âbß ž|߃žz¿M �½¿¿. XTR - EXTRACT BIT FIELD - 4 BITS FROM CENTER¿ÛÛâ=>ß…ž|ß^žz¿( œâää 4 XTR - EXTRACT BIT FIELD - 16 BITS ACROSS BOUNDARY äâþß]ž|ß6žz¿   4 XTRS - EXTRACT SIGNED BIT FIELD - 1 BIT FROM CENTER **â‡ß6ž|ßžz¿‚- ®144 6 XTRS - EXTRACT SIGNED BIT FIELD - 4 BITS FROM CENTER 4TTâ]?ß ž|߃žz¿X �[]]" : XTRS - EXTRACT SIGNED BIT FIELD - 16 BITS ACROSS BOUNDARY]â2ÿß…ž|ßXžz¿- œ†ˆˆ INSR - INSERT BIT FIELD - 1 BITˆ��â ßgž|ß:žz¿¤¥¥. INSR - INSERT BIT FIELD - 4 BITS INTO CENTER ¥ÁÁâ‡;ßCž|ßžz¿‚- ®ÈËËÿÿ 2 INSR - INSERT BIT FIELD - 16 BITS ACROSS BOUNDARYËééâ_ûßž|߃žz¿Z �ðòò0 OH òù@ù‡†ß ž}ßtž{¿K0ÿ0 SIGNAL - SIGNAL SEMAPHORE‡l&ß…ž|ßYžz¿0 œ?0 WAIT - WAIT ON SEMAPHORE //‡P&-ßiž|ß=žz¿677 OH 7>@>¿‡¿‡ßZž|ß.žz¿ ² ¼EHH ENTER - ENTER PROCEDURE HZZ ¿k&]¿iß<žzßžx¿� ®ceeÿÿ OH el@l‡.‡‚އޢ�p„‡P„�\Eß$žt߃žr¿i �v Ä{ OH †@† ¿?‚‰‡‡¿=ßžzßožx¿U0 °�’’ RETURN - RETURN FROM PROCEDURE ’§§ ¿‚Їf&m¿ß…žyßMžw¿3 œ ±±´´ OH ´»@» ¢T ‡ßržzß:žx¿ "ÄÆÆ MOVE - MOVE 1 WORD ÆÖÖ ¢9 Âl&}ßVžyßžw¿àáá MOVE - MOVE 2 WORDSáññ ¢ ÂQ&}ß;žyßžw¿� ®ûýý OH ý @ ¢†ß,ž}ß„ž{¿r Í �   0 DEQUEN - REMOVE NEXT QUEUE ELEMENT (HEAD NODE)   * *¢`&Mßž|ß]žz¿K 1 2 2 Ù OH  2 9@ 9 ¢Q¤€¤�@&Ýß…ž; yßKžw¿9 œ C E E Ù$ DEQUEN - REMOVE NEXT QUEUE ELEMENT  E \ \ ¢.¤€¤�@&Ý&Mßažxß'žv¿ g h h Ù OH  h o@ o ¢¤€¤�@ßPžzßžx¿ x y y Ù& ENQUEB - INSERT BEFORE QUEUE ELEMENT  y ‘ ‘ ¢Š¤€¤�@&=ß-žyß„žw¿ƒ Í � ® › Ÿ Ÿ Ù$ ENQUEA - INSERT AFTER QUEUE ELEMENT Ÿ ¶ ¶ ¢e¤€¤�@&Ýßžyß_žw¿^ À Á Á Ù OH  Á È@ È ¢S¤€¤�@&Ý Hß…žxßLžv¿K œ Ó Õ Õ Ù$ DELQUE - DELETE THIS QUEUE ELEMENT  Õ ì ì ¢/¤€¤�@&Ý H&íß`žwß'žu¿& ø ù ù Í Í OH  ù @  „€„�ßPž{ßžy¿    Í Í0 DELQUE - DELETE THIS QUEUE ELEMENT (HEAD NODE)   & & „€„�&íß)žz߃žx¿‚ � ® / 2 2 Í Í& NEXTQUE- POINT TO NEXT QUEUE ELEMENT  2 J J  „€„�&ýßžzß_žx¿^ S T T OH  T [@ [¿‡¿‡ß‡ž|ßPžz¿O ² ¼ œ b f f0 STACK RELATIVE - COPY - STORE SINGLE REGISTER  f ƒ ƒ ¿_€¿^ß^ž{ß'žy¿& ‹ Œ Œ0 STACK RELATIVE - COPY - LOAD SINGLE REGISTER  Œ © © ¿9¿8ß8ž{ßžy¿� ® ± ³ ³0 OH  ³ º@ ºß*ž~߃ž|¿s � ¿ Á Á0( GENECC - GENERATE ERROR CORRECTION CODE Á Ú Ú&Íß ž}ßbž{¿R à á á0 OH  á è@ 脀߅ž}ßTž{¿D œ î ð ð0( STRECC - STORE ERROR CORRECTION CODE ð  „€&­ßcž|ß2žz¿"   0( LODECC - LOAD ERROR CORRECTION CODE  * *„€&½ßBž|ßžz¿ 1 2 2ÿÿ OH  2 9@ 9‡5‡ ¢™â™‚™„€ + kž{‚’â’„€ + kž{ßžh߃žf¿‚ � ®üü@0ü€ T [ [0 OH  [ b@ b  ßžyßkžw¿j l m m0 STRU - STORE TO USER SPACE m � �  \ß…žxßKžv¿J œ Œ Ž Ž0 LODU - LOAD FROM USER SPACE Ž ¢ ¢  \%ßdžxß*žv¿)p‰« @pǰ@Pǯ¯p@®P@Ÿv Âq0@Ã¥p@äP@Ÿx  Í Í Ù Ù Ù å>?0"mE7E3E5E3--E2E0 ^OH  ù @  „€„�ßPž{ßžy¿    Í Í0 DELQUE - DELETE THIS QUEUE ELEMENT (HEAD NODE)  ’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I< ’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I= ’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I> ’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I? ’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I@ ’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’IA ’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’IB ’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’IC ’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’ID ’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’IE ’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’IF ’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’IG ’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’IH ’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’II ’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’IJ ’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’IK ’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’IL ’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I