C     MAIN PROGRAM
      INTEGER LUNIT
C     ALLOW 5000 UNDERFLOWS.
C     CALL TRAPS(0,0,5001,0,0)
C
C     OUTPUT UNIT NUMBER
C
      LUNIT = 6
C
      CALL SSITS(LUNIT)
      STOP
      END
      SUBROUTINE SSITS(LUNIT)
C     LUNIT IS THE OUTPUT UNIT NUMBER
C
C     TESTS
C        SSICO,SSIFA,SSISL,SSIDI,SSPCO,SSPFA,SSPSL,SSPDI
C
C     LINPACK. THIS VERSION DATED 08/14/78 .
C     CLEVE MOLER, UNIVERSITY OF NEW MEXICO, ARGONNE NATIONAL LAB.
C
C     SUBROUTINES AND FUNCTIONS
C
C     LINPACK SSICO,SSISL,SSIDI,SSPCO,SSPSL,SSPDI
C     EXTERNAL SSIXX,SMACH
C     BLAS SAXPY,SSWAP,SASUM,SCOPY
C     FORTRAN ABS,AMAX1,FLOAT,IABS
C
C     INTERNAL VARIABLES
C
      REAL A(15,15),AINV(15,15),ASAVE(15,15),AJK,AJKP1
      REAL AP(120),B(15),X(15),XEXACT(15)
      REAL XP(15),T,Z(15)
      REAL ANORM,AINORM,COND,COND1,DET(2),DETP(2)
      REAL EN,ENORM,EPS,FNORM,ONEPX,Q(6),QS(6),RCOND
      REAL RCONDP,RNORM,S,SASUM,SMACH,XNORM
      INTEGER I,INERT(3),INERTP(3),IQ(6),J,JB
      INTEGER K,KASE,KSING,KM1,KOUNT,KPFAIL,KPVT(15),KPVTP(15)
      INTEGER KS,KSTEP,KSUSP(6),LDA,LUNIT,N,NPRINT
      LOGICAL KPF
C
      LDA = 15
C
C     WRITE MATRIX AND SOLUTIONS IF  N .LE. NPRINT
C
      NPRINT = 3
C
      WRITE (LUNIT,540)
      WRITE (LUNIT,950)
C
      DO 10 I = 1, 6
         KSUSP(I) = 0
   10 CONTINUE
      KSING = 0
      KPFAIL = 0
C
C     SET EPS TO ROUNDING UNIT FOR REAL ARITHMETIC
C
      EPS = SMACH(1)
      WRITE (LUNIT,550) EPS
      WRITE (LUNIT,530)
C
C     START MAIN LOOP
C
      KASE = 1
   20 CONTINUE
C
C        GENERATE TEST MATRIX
C
         CALL SSIXX(A,LDA,N,KASE,LUNIT)
C
C        N = 0 SIGNALS NO MORE TEST MATRICES
C
C     ...EXIT
         IF (N .LE. 0) GO TO 520
         ANORM = 0.0E0
         DO 30 J = 1, N
            ANORM = AMAX1(ANORM,SASUM(N,A(1,J),1))
   30    CONTINUE
         WRITE (LUNIT,700) ANORM
C
         IF (N .GT. NPRINT) GO TO 50
            WRITE (LUNIT,530)
            DO 40 I = 1, N
               WRITE (LUNIT,740) (A(I,J), J = 1, N)
   40       CONTINUE
            WRITE (LUNIT,530)
   50    CONTINUE
C
C        GENERATE EXACT SOLUTION
C
         XEXACT(1) = 1.0E0
         IF (N .GE. 2) XEXACT(2) = 0.0E0
         IF (N .LE. 2) GO TO 70
            DO 60 I = 3, N
               XEXACT(I) = -XEXACT(I-2)
   60       CONTINUE
   70    CONTINUE
C
C        SAVE MATRIX AND GENERATE R.H.S.
C
         DO 90 I = 1, N
            B(I) = 0.0E0
            DO 80 J = 1, N
               ASAVE(I,J) = A(I,J)
               B(I) = B(I) + A(I,J)*XEXACT(J)
   80       CONTINUE
            X(I) = B(I)
            XP(I) = X(I)
   90    CONTINUE
C
C        FACTOR AND ESTIMATE CONDITION
C
         RCOND = -1.0E0
         CALL SSICO(A,LDA,N,KPVT,RCOND,Z)
         WRITE (LUNIT,820) (KPVT(I), I = 1, N)
C
C        OUTPUT NULL VECTOR
C
         IF (N .GT. NPRINT) GO TO 110
            WRITE (LUNIT,760)
            DO 100 I = 1, N
               WRITE (LUNIT,770) Z(I)
  100       CONTINUE
            WRITE (LUNIT,530)
  110    CONTINUE
C
C        FACTOR PACKED FORM AND COMPARE
C
         KPF = .FALSE.
         K = 0
         DO 130 J = 1, N
            DO 120 I = 1, J
               K = K + 1
               AP(K) = ASAVE(I,J)
  120       CONTINUE
  130    CONTINUE
         RCONDP = -1.0E0
         CALL SSPCO(AP,N,KPVTP,RCONDP,Z)
         IF (RCONDP .EQ. RCOND) GO TO 140
            WRITE (LUNIT,840)
            WRITE (LUNIT,880) RCOND,RCONDP
            KPF = .TRUE.
  140    CONTINUE
         K = 0
         KOUNT = 0
         DO 160 J = 1, N
            DO 150 I = 1, J
               K = K + 1
               IF (AP(K) .NE. A(I,J)) KOUNT = KOUNT + 1
  150       CONTINUE
  160    CONTINUE
         IF (KOUNT .EQ. 0) GO TO 170
            WRITE (LUNIT,840)
            WRITE (LUNIT,890) KOUNT
            KPF = .TRUE.
  170    CONTINUE
C
C        TEST FOR SINGULARITY
C
         IF (RCOND .GT. 0.0E0) GO TO 180
            WRITE (LUNIT,750) RCOND
            KSING = KSING + 1
            CALL SSIDI(A,LDA,N,KPVT,DET,INERT,Z,110)
            WRITE (LUNIT,790) DET(1)
            WRITE (LUNIT,810) INERT
         GO TO 510
  180    CONTINUE
            COND = 1.0E0/RCOND
            WRITE (LUNIT,570) COND
            ONEPX = 1.0E0 + RCOND
            IF (ONEPX .EQ. 1.0E0) WRITE (LUNIT,560)
C
C           COMPUTE INVERSE, DETERMINANT, INERTIA, TRUE CONDITION
C
            DO 200 J = 1, N
               DO 190 I = 1, J
                  AINV(I,J) = A(I,J)
  190          CONTINUE
  200       CONTINUE
            CALL SSIDI(AINV,LDA,N,KPVT,DET,INERT,Z,111)
            AINORM = 0.0E0
            DO 220 J = 1, N
               DO 210 I = J, N
                  AINV(I,J) = AINV(J,I)
  210          CONTINUE
               AINORM = AMAX1(AINORM,SASUM(N,AINV(1,J),1))
  220       CONTINUE
            COND1 = ANORM*AINORM
            WRITE (LUNIT,580) COND1
            WRITE (LUNIT,790) DET(1)
            WRITE (LUNIT,800) DET(2)
            WRITE (LUNIT,810) INERT
C
C           SOLVE A*X = B
C
            CALL SSISL(A,LDA,N,KPVT,X)
C
            IF (N .GT. NPRINT) GO TO 240
               WRITE (LUNIT,590)
               DO 230 I = 1, N
                  WRITE (LUNIT,780) X(I)
  230          CONTINUE
               WRITE (LUNIT,530)
  240       CONTINUE
C
C           MORE PACKED COMPARE
C
            CALL SSPSL(AP,N,KPVTP,XP)
            KOUNT = 0
            DO 250 I = 1, N
               IF (XP(I) .NE. X(I)) KOUNT = KOUNT + 1
  250       CONTINUE
            IF (KOUNT .EQ. 0) GO TO 260
               WRITE (LUNIT,840)
               WRITE (LUNIT,900) KOUNT
               KPF = .TRUE.
  260       CONTINUE
            CALL SSPDI(AP,N,KPVTP,DETP,INERTP,Z,111)
            IF (DETP(1) .EQ. DET(1) .AND. DETP(2) .EQ. DET(2))
     *         GO TO 270
               WRITE (LUNIT,840)
               WRITE (LUNIT,910) DETP
               KPF = .TRUE.
  270       CONTINUE
            KOUNT = 0
            K = 0
            DO 290 J = 1, N
               DO 280 I = 1, J
                  K = K + 1
                  IF (AP(K) .NE. AINV(I,J)) KOUNT = KOUNT + 1
  280          CONTINUE
  290       CONTINUE
            IF (KOUNT .EQ. 0) GO TO 300
               WRITE (LUNIT,840)
               WRITE (LUNIT,920) KOUNT
               KPF = .TRUE.
  300       CONTINUE
C
C           RECONSTRUCT  A  FROM FACTORS.
C
            K = 1
  310       IF (K .GT. N) GO TO 400
               KM1 = K - 1
               IF (KPVT(K) .LT. 0) GO TO 340
C
C                 1 BY 1
C
                  IF (KM1 .LT. 1) GO TO 330
                  DO 320 JB = 1, KM1
                     J = K - JB
                     AJK = A(K,K)*A(J,K)
                     T = AJK
                     CALL SAXPY(J,T,A(1,K),1,A(1,J),1)
                     A(J,K) = -AJK
  320             CONTINUE
  330             CONTINUE
                  KSTEP = 1
               GO TO 370
  340          CONTINUE
C
C                 2 BY 2
C
                  IF (KM1 .LT. 1) GO TO 360
                  DO 350 JB = 1, KM1
                     J = K - JB
                     AJK = A(K,K)*A(J,K) + A(K,K+1)*A(J,K+1)
                     AJKP1 = A(K,K+1)*A(J,K) + A(K+1,K+1)*A(J,K+1)
                     T = AJK
                     CALL SAXPY(J,T,A(1,K),1,A(1,J),1)
                     T = AJKP1
                     CALL SAXPY(J,T,A(1,K+1),1,A(1,J),1)
                     A(J,K) = -AJK
                     A(J,K+1) = -AJKP1
  350             CONTINUE
  360             CONTINUE
                  KSTEP = 2
  370          CONTINUE
C
C              SWAP
C
               KS = IABS(KPVT(K))
               IF (KS .EQ. K) GO TO 390
                  CALL SSWAP(KS,A(1,KS),1,A(1,K),1)
                  DO 380 JB = KS, K
                     J = K + KS - JB
                     T = A(J,K)
                     A(J,K) = A(KS,J)
                     A(KS,J) = T
  380             CONTINUE
                  IF (KSTEP .EQ. 2)
     *               CALL SSWAP(1,A(KS,K+1),1,A(K,K+1),1)
  390          CONTINUE
               K = K + KSTEP
            GO TO 310
  400       CONTINUE
            DO 420 J = 1, N
               DO 410 I = J, N
                  A(I,J) = A(J,I)
  410          CONTINUE
  420       CONTINUE
C
C           COMPUTE ERRORS AND RESIDUALS
C              E  =  X - XEXACT
C              R  =  B - A*X
C              F  =  A - U*D*TRANS(U)
C
            XNORM = SASUM(N,X,1)
            ENORM = 0.0E0
            FNORM = 0.0E0
            DO 440 J = 1, N
               ENORM = ENORM + ABS(X(J)-XEXACT(J))
               T = -X(J)
               CALL SAXPY(N,T,ASAVE(1,J),1,B,1)
               S = 0.0E0
               DO 430 I = 1, J
                  S = S + ABS(ASAVE(I,J)-A(I,J))
  430          CONTINUE
               IF (S .GT. FNORM) FNORM = S
  440       CONTINUE
            RNORM = SASUM(N,B,1)
C
C           A*INV(A) - I
C
            AINORM = 0.0E0
            DO 470 J = 1, N
               DO 450 I = 1, N
                  B(I) = 0.0E0
  450          CONTINUE
               DO 460 K = 1, N
                  T = AINV(K,J)
                  CALL SAXPY(N,T,ASAVE(1,K),1,B,1)
  460          CONTINUE
               B(J) = B(J) - 1.0E0
               AINORM = AMAX1(AINORM,SASUM(N,B,1))
  470       CONTINUE
C
            WRITE (LUNIT,600) ENORM
            WRITE (LUNIT,610) RNORM
            WRITE (LUNIT,710) FNORM
            WRITE (LUNIT,720) AINORM
C
C           COMPUTE TEST RATIOS
C
            Q(1) = COND/COND1
            Q(2) = COND1/COND
            Q(3) = ENORM/(EPS*COND*XNORM)
            Q(4) = RNORM/(EPS*ANORM*XNORM)
            Q(5) = FNORM/(EPS*ANORM)
            Q(6) = AINORM/(EPS*COND)
            WRITE (LUNIT,530)
            WRITE (LUNIT,620)
            WRITE (LUNIT,530)
            WRITE (LUNIT,670)
            WRITE (LUNIT,680)
            WRITE (LUNIT,690)
            WRITE (LUNIT,530)
            WRITE (LUNIT,730) (Q(I), I = 1, 6)
            WRITE (LUNIT,530)
C
C           LOOK FOR SUSPICIOUS RATIOS
C
            QS(1) = 1.0E0 + 4.0E0*EPS
            QS(2) = 10.0E0
            EN = FLOAT(N)
            IF (N .EQ. 1) EN = 2.0E0
            DO 480 I = 3, 6
               QS(I) = EN
  480       CONTINUE
            KOUNT = 0
            DO 500 I = 1, 6
               IQ(I) = 0
               IF (Q(I) .LE. QS(I)) GO TO 490
                  IQ(I) = 1
                  KSUSP(I) = KSUSP(I) + 1
                  KOUNT = KOUNT + 1
  490          CONTINUE
  500       CONTINUE
            IF (KOUNT .EQ. 0) WRITE (LUNIT,930)
            IF (KOUNT .NE. 0) WRITE (LUNIT,940) (IQ(I), I = 1, 6)
            WRITE (LUNIT,530)
  510    CONTINUE
C
         IF (.NOT.KPF) WRITE (LUNIT,830)
         IF (KPF) KPFAIL = KPFAIL + 1
         WRITE (LUNIT,630)
         KASE = KASE + 1
      GO TO 20
  520 CONTINUE
C
C     FINISH MAIN LOOP
C
C     SUMMARY
C
      WRITE (LUNIT,640)
      KASE = KASE - 1
      WRITE (LUNIT,650) KASE
      WRITE (LUNIT,860) KSING
      WRITE (LUNIT,850) KPFAIL
      WRITE (LUNIT,660) KSUSP
      WRITE (LUNIT,870)
      RETURN
C
C     MOST FORMATS, ALSO SOME IN SSIXX
C
  530 FORMAT (1H )
  540 FORMAT (29H1LINPACK TESTER, SSI**, SSP**)
  550 FORMAT ( / 14H EPSILON     =, 1PE13.5)
  560 FORMAT ( / 16H MAYBE SINGULAR. /)
  570 FORMAT (14H COND        =, 1PE13.5)
  580 FORMAT (14H ACTUAL COND =, 1PE13.5)
  590 FORMAT ( / 4H X =)
  600 FORMAT (14H ERROR NORM  =, 1P2E13.5)
  610 FORMAT (14H RESID NORM  =, 1P2E13.5)
  620 FORMAT (26H TEST RATIOS.. E = EPSILON)
  630 FORMAT ( / 14H ************* /)
  640 FORMAT (8H1SUMMARY)
  650 FORMAT (18H NUMBER OF TESTS =, I4)
  660 FORMAT ( / 30H NUMBER OF SUSPICIOUS RATIOS =, 6I4)
  670 FORMAT (30H     COND     ACTUAL    ERROR ,
     *        30H    RESID   A-U*D*UT  A*AI - I)
  680 FORMAT (6(10H   -------))
  690 FORMAT (30H    ACTUAL     COND   E*COND*X,
     *        30H    E*A*X      E*A     E*COND )
  700 FORMAT (14H NORM(A)     =, 1PE13.5)
  710 FORMAT (14H NORM(A-UDUT)=, 1PE13.5)
  720 FORMAT (14H NORM(A*AI-I)=, 1PE13.5)
  730 FORMAT (6(1X, F9.4))
  740 FORMAT (1H , 6G11.4)
  750 FORMAT (14H 1/COND      =, 1PE13.5)
  760 FORMAT ( / 7H NULL =)
  770 FORMAT (2G14.6)
  780 FORMAT (2G14.6)
  790 FORMAT (14H DET FRACT   =, F9.5)
  800 FORMAT (14H DET EXPON   =, F9.0)
  810 FORMAT (14H INERTIA     =, 3I3 / 14X, 9H  +  -  0)
  820 FORMAT (14H KPVT        =, 15I3)
  830 FORMAT ( / 22H PACKED ROUTINES AGREE)
  840 FORMAT ( / 30H PACKED ROUTINES DO NOT AGREE,)
  850 FORMAT (28H NUMBER OF PACKED FAILURES =, I4)
  860 FORMAT (23H NUMBER OF ZERO PIVOT =, I4)
  870 FORMAT ( / 12H END OF TEST)
  880 FORMAT (8H RCOND =, 1P2E13.5)
  890 FORMAT (12H KOUNT(FA) =, I4)
  900 FORMAT (12H KOUNT(SL) =, I4)
  910 FORMAT (8H DET   =, F9.5, F9.0)
  920 FORMAT (12H KOUNT(DI) =, I4)
  930 FORMAT (21H NO SUSPICIOUS RATIOS)
  940 FORMAT (I8, 5I10 / 7X, 28H1 INDICATES SUSPICIOUS RATIO)
  950 FORMAT (29H THIS VERSION DATED 08/14/78.)
      END
      SUBROUTINE SSIXX(A,LDA,N,KASE,LUNIT)
      INTEGER LDA,N,KASE,LUNIT
      REAL A(LDA,1)
C
C     GENERATES REAL SYMMETRIC INDEFINITE TEST MATRICES
C
C     EXTERNAL SMACH
C     FORTRAN ABS,FLOAT,IABS
      REAL T
      REAL TINY,HUGE,SMACH
      INTEGER I,J
C
      GO TO (10, 10, 10, 50, 50, 70, 70, 70, 110, 150, 190, 230, 250,
     *       290, 330, 330, 380, 430, 480), KASE
C
C     KASE 1, 2 AND 3
C
   10 CONTINUE
         N = 5*KASE
         WRITE (LUNIT,20) KASE,N
   20    FORMAT (5H KASE, I3, 3X, 13HREAL HILBERT  / 4H N =, I4)
         T = 1.0E0
         T = SIGN(1.0E0,T)
         DO 40 J = 1, N
            DO 30 I = 1, J
               A(I,J) = T**(I - J)/FLOAT(I+J-1)
               A(J,I) = A(I,J)
C              FOR NON-C0MPLEX MATRICES, A(I,J) = 1.0/FLOAT(I+J-1)
   30       CONTINUE
   40    CONTINUE
      GO TO 490
C
C     KASE 4 AND 5
C
   50 CONTINUE
         N = 1
         WRITE (LUNIT,60) KASE,N
   60    FORMAT (5H KASE, I3, 3X, 16HMONOELEMENTAL    / 4H N =, I4)
         IF (KASE .EQ. 4) A(1,1) = 3.0E0
         IF (KASE .EQ. 5) A(1,1) = 0.0E0
      GO TO 490
C
C     KASE 6, 7 AND 8
C
   70 CONTINUE
         N = 15
         WRITE (LUNIT,80) KASE,N
   80    FORMAT (5H KASE, I3, 3X, 16HTRIDIAGONAL      / 4H N =, I4)
         T = 1.0E0
         IF (KASE .EQ. 7) T = 3.0E0
         IF (KASE .EQ. 8) T = 100.0E0
         DO 100 J = 1, N
            DO 90 I = 1, J
               A(I,J) = 0.0E0
               IF (I .EQ. J) A(I,I) = 4.0E0
               IF (I .EQ. J - 1) A(I,J) = T
               A(J,I) = A(I,J)
   90       CONTINUE
  100    CONTINUE
      GO TO 490
C
C     KASE 9
C
  110 CONTINUE
         N = 5
         WRITE (LUNIT,120) KASE,N
  120    FORMAT (5H KASE, I3, 3X, 16HPENTADIAGONAL    / 4H N =, I4)
         DO 140 J = 1, N
            DO 130 I = 1, J
               A(I,J) = 0.0E0
               IF (I .GE. J - 2)
     *            A(I,J) = (5.0E0 - FLOAT(IABS(I-J)))**(10 - I - J)
               A(J,I) = A(I,J)
  130       CONTINUE
  140    CONTINUE
      GO TO 490
C
C     KASE 10
C
  150 CONTINUE
         N = 6
         WRITE (LUNIT,160) KASE,N
  160    FORMAT (5H KASE, I3, 3X, 16HTRIDIAG INVERSE  / 4H N =, I4)
         DO 180 J = 1, N
            DO 170 I = 1, J
               A(I,J) = FLOAT(N+1-J)
               A(J,I) = A(I,J)
  170       CONTINUE
  180    CONTINUE
      GO TO 490
C
C     KASE 11
C
  190 CONTINUE
         N = 15
         WRITE (LUNIT,200) KASE,N
  200    FORMAT (5H KASE, I3, 3X, 16HZERO DIAGONAL    / 4H N =, I4)
         DO 220 J = 1, N
            DO 210 I = 1, J
               A(I,J) = 0.0E0
               IF (I .EQ. J - 1) A(I,J) = 1.0E0
               A(J,I) = A(I,J)
  210       CONTINUE
  220    CONTINUE
      GO TO 490
C
C     KASE 12
C
  230 CONTINUE
         N = 2
         WRITE (LUNIT,240) KASE,N
  240    FORMAT (5H KASE, I3, 3X, 16HTWO BY TWO       / 4H N =, I4)
         A(1,1) = 4.0E0
         A(1,2) = 1.0E0
         A(2,1) = A(1,2)
         A(2,2) = 0.0E0
      GO TO 490
C
C     KASE 13
C
  250 CONTINUE
         N = 6
         WRITE (LUNIT,260) KASE,N
  260    FORMAT (5H KASE, I3, 3X, 16H ZERO MATRIX     / 4H N =, I4)
         DO 280 J = 1, N
            DO 270 I = 1, N
               A(I,J) = 0.0E0
  270       CONTINUE
  280    CONTINUE
      GO TO 490
C
C     KASE 14
C
  290 CONTINUE
         N = 3
         WRITE (LUNIT,300) KASE,N
  300    FORMAT (5H KASE, I3, 3X, 16HINERTIA = 1,1,1  / 4H N =, I4)
         DO 320 I = 1, N
            DO 310 J = 1, N
               A(I,J) = 0.0E0
  310       CONTINUE
  320    CONTINUE
         A(1,3) = 1.0E0
         A(3,1) = 1.0E0
      GO TO 490
C
C     KASE 15 AND 16
C
  330 CONTINUE
         N = 15
         WRITE (LUNIT,340) KASE,N
  340    FORMAT (5H KASE, I3, 3X, 16H                 / 4H N =, I4)
         DO 370 J = 1, N
            DO 360 I = 1, J
               A(I,J) = -1.0E0
               A(J,I) = A(I,J)
               IF (I .NE. J) GO TO 350
                  IF (KASE .EQ. 15) A(I,I) = 26.0E0
                  IF (KASE .EQ. 16) A(I,I) = FLOAT(I)
  350          CONTINUE
  360       CONTINUE
  370    CONTINUE
      GO TO 490
C
C     KASE 17
C
  380 CONTINUE
         N = 5
         WRITE (LUNIT,390) KASE,N
  390    FORMAT (5H KASE, I3, 3X, 16HNEAR UNDERFLOW   / 4H N =, I4)
         TINY = SMACH(2)
         WRITE (LUNIT,400) TINY
  400    FORMAT (14H TINY        =, 1PE13.5)
         DO 420 J = 1, N
            DO 410 I = 1, J
               A(I,J) = TINY*(FLOAT(IABS(I-J))/FLOAT(I+J))
               A(J,I) = A(I,J)
  410       CONTINUE
  420    CONTINUE
      GO TO 490
C
C     KASE 18
C
  430 CONTINUE
         N = 5
         WRITE (LUNIT,440) KASE,N
  440    FORMAT (5H KASE, I3, 3X, 16HNEAR OVERFLOW    / 4H N =, I4)
         HUGE = SMACH(3)
         WRITE (LUNIT,450) HUGE
  450    FORMAT (14H HUGE        =, 1PE13.5)
         DO 470 J = 1, N
            DO 460 I = 1, J
               A(I,J) = HUGE*(FLOAT(IABS(I-J))/FLOAT(I+J))
               A(J,I) = A(I,J)
  460       CONTINUE
  470    CONTINUE
      GO TO 490
C
  480 CONTINUE
         N = 0
  490 CONTINUE
      RETURN
C
      END
