syconvf_rook(3)

NAME
syconvf_rook - syconvf_rook: convert to/from hetrf_rook to hetrf_rk format

SYNOPSIS

  Functions
subroutine csyconvf_rook (uplo, way, n, a, lda, e, ipiv, info)
CSYCONVF_ROOK
subroutine dsyconvf_rook (uplo, way, n, a, lda, e, ipiv, info)
DSYCONVF_ROOK
subroutine ssyconvf_rook (uplo, way, n, a, lda, e, ipiv, info)
SSYCONVF_ROOK
subroutine zsyconvf_rook (uplo, way, n, a, lda, e, ipiv, info)
ZSYCONVF_ROOK

Detailed Description

Function Documentation

  subroutine csyconvf_rook (character uplo, character way, integer n, complex, dimension( lda, * ) a, integer lda, complex, dimension( * ) e, integer, dimension( * ) ipiv, integer info)

CSYCONVF_ROOK

Purpose:

    !> If parameter WAY = 'C':
    !> CSYCONVF_ROOK converts the factorization output format used in
    !> CSYTRF_ROOK provided on entry in parameter A into the factorization
    !> output format used in CSYTRF_RK (or CSYTRF_BK) that is stored
    !> on exit in parameters A and E. IPIV format for CSYTRF_ROOK and
    !> CSYTRF_RK (or CSYTRF_BK) is the same and is not converted.
    !>
    !> If parameter WAY = 'R':
    !> CSYCONVF_ROOK performs the conversion in reverse direction, i.e.
    !> converts the factorization output format used in CSYTRF_RK
    !> (or CSYTRF_BK) provided on entry in parameters A and E into
    !> the factorization output format used in CSYTRF_ROOK that is stored
    !> on exit in parameter A. IPIV format for CSYTRF_ROOK and
    !> CSYTRF_RK (or CSYTRF_BK) is the same and is not converted.
    !>
    !> CSYCONVF_ROOK can also convert in Hermitian matrix case, i.e. between
    !> formats used in CHETRF_ROOK and CHETRF_RK (or CHETRF_BK).
    !>

Parameters
    UPLO

    !>          UPLO is CHARACTER*1
    !>          Specifies whether the details of the factorization are
    !>          stored as an upper or lower triangular matrix A.
    !>          = 'U':  Upper triangular
    !>          = 'L':  Lower triangular
    !>

    WAY

    !>          WAY is CHARACTER*1
    !>          = 'C': Convert
    !>          = 'R': Revert
    !>

    N

    !>          N is INTEGER
    !>          The order of the matrix A.  N >= 0.
    !>

    A

    !>          A is COMPLEX array, dimension (LDA,N)
    !>
    !>          1) If WAY ='C':
    !>
    !>          On entry, contains factorization details in format used in
    !>          CSYTRF_ROOK:
    !>            a) all elements of the symmetric block diagonal
    !>               matrix D on the diagonal of A and on superdiagonal
    !>               (or subdiagonal) of A, and
    !>            b) If UPLO = 'U': multipliers used to obtain factor U
    !>               in the superdiagonal part of A.
    !>               If UPLO = 'L': multipliers used to obtain factor L
    !>               in the superdiagonal part of A.
    !>
    !>          On exit, contains factorization details in format used in
    !>          CSYTRF_RK or CSYTRF_BK:
    !>            a) ONLY diagonal elements of the symmetric block diagonal
    !>               matrix D on the diagonal of A, i.e. D(k,k) = A(k,k);
    !>               (superdiagonal (or subdiagonal) elements of D
    !>                are stored on exit in array E), and
    !>            b) If UPLO = 'U': factor U in the superdiagonal part of A.
    !>               If UPLO = 'L': factor L in the subdiagonal part of A.
    !>
    !>          2) If WAY = 'R':
    !>
    !>          On entry, contains factorization details in format used in
    !>          CSYTRF_RK or CSYTRF_BK:
    !>            a) ONLY diagonal elements of the symmetric block diagonal
    !>               matrix D on the diagonal of A, i.e. D(k,k) = A(k,k);
    !>               (superdiagonal (or subdiagonal) elements of D
    !>                are stored on exit in array E), and
    !>            b) If UPLO = 'U': factor U in the superdiagonal part of A.
    !>               If UPLO = 'L': factor L in the subdiagonal part of A.
    !>
    !>          On exit, contains factorization details in format used in
    !>          CSYTRF_ROOK:
    !>            a) all elements of the symmetric block diagonal
    !>               matrix D on the diagonal of A and on superdiagonal
    !>               (or subdiagonal) of A, and
    !>            b) If UPLO = 'U': multipliers used to obtain factor U
    !>               in the superdiagonal part of A.
    !>               If UPLO = 'L': multipliers used to obtain factor L
    !>               in the superdiagonal part of A.
    !>

    LDA

    !>          LDA is INTEGER
    !>          The leading dimension of the array A.  LDA >= max(1,N).
    !>

    E

    !>          E is COMPLEX array, dimension (N)
    !>
    !>          1) If WAY ='C':
    !>
    !>          On entry, just a workspace.
    !>
    !>          On exit, contains the superdiagonal (or subdiagonal)
    !>          elements of the symmetric block diagonal matrix D
    !>          with 1-by-1 or 2-by-2 diagonal blocks, where
    !>          If UPLO = 'U': E(i) = D(i-1,i), i=2:N, E(1) is set to 0;
    !>          If UPLO = 'L': E(i) = D(i+1,i), i=1:N-1, E(N) is set to 0.
    !>
    !>          2) If WAY = 'R':
    !>
    !>          On entry, contains the superdiagonal (or subdiagonal)
    !>          elements of the symmetric block diagonal matrix D
    !>          with 1-by-1 or 2-by-2 diagonal blocks, where
    !>          If UPLO = 'U': E(i) = D(i-1,i),i=2:N, E(1) not referenced;
    !>          If UPLO = 'L': E(i) = D(i+1,i),i=1:N-1, E(N) not referenced.
    !>
    !>          On exit, is not changed
    !>

    IPIV

    !>          IPIV is INTEGER array, dimension (N)
    !>          On entry, details of the interchanges and the block
    !>          structure of D as determined:
    !>          1) by CSYTRF_ROOK, if WAY ='C';
    !>          2) by CSYTRF_RK (or CSYTRF_BK), if WAY ='R'.
    !>          The IPIV format is the same for all these routines.
    !>
    !>          On exit, is not changed.
    !>

    INFO

    !>          INFO is INTEGER
    !>          = 0:  successful exit
    !>          < 0:  if INFO = -i, the i-th argument had an illegal value
    !>

Author
    Univ. of Tennessee

    Univ. of California Berkeley

    Univ. of Colorado Denver

    NAG Ltd.

Contributors:

    !>
    !>  November 2017,  Igor Kozachenko,
    !>                  Computer Science Division,
    !>                  University of California, Berkeley
    !>
    !>

Definition at line 199 of file csyconvf_rook.f.

  subroutine dsyconvf_rook (character uplo, character way, integer n, double precision, dimension( lda, * ) a, integer lda, double precision, dimension( * ) e, integer, dimension( * ) ipiv, integer info)

DSYCONVF_ROOK

Purpose:

    !> If parameter WAY = 'C':
    !> DSYCONVF_ROOK converts the factorization output format used in
    !> DSYTRF_ROOK provided on entry in parameter A into the factorization
    !> output format used in DSYTRF_RK (or DSYTRF_BK) that is stored
    !> on exit in parameters A and E. IPIV format for DSYTRF_ROOK and
    !> DSYTRF_RK (or DSYTRF_BK) is the same and is not converted.
    !>
    !> If parameter WAY = 'R':
    !> DSYCONVF_ROOK performs the conversion in reverse direction, i.e.
    !> converts the factorization output format used in DSYTRF_RK
    !> (or DSYTRF_BK) provided on entry in parameters A and E into
    !> the factorization output format used in DSYTRF_ROOK that is stored
    !> on exit in parameter A. IPIV format for DSYTRF_ROOK and
    !> DSYTRF_RK (or DSYTRF_BK) is the same and is not converted.
    !>

Parameters
    UPLO

    !>          UPLO is CHARACTER*1
    !>          Specifies whether the details of the factorization are
    !>          stored as an upper or lower triangular matrix A.
    !>          = 'U':  Upper triangular
    !>          = 'L':  Lower triangular
    !>

    WAY

    !>          WAY is CHARACTER*1
    !>          = 'C': Convert
    !>          = 'R': Revert
    !>

    N

    !>          N is INTEGER
    !>          The order of the matrix A.  N >= 0.
    !>

    A

    !>          A is DOUBLE PRECISION array, dimension (LDA,N)
    !>
    !>          1) If WAY ='C':
    !>
    !>          On entry, contains factorization details in format used in
    !>          DSYTRF_ROOK:
    !>            a) all elements of the symmetric block diagonal
    !>               matrix D on the diagonal of A and on superdiagonal
    !>               (or subdiagonal) of A, and
    !>            b) If UPLO = 'U': multipliers used to obtain factor U
    !>               in the superdiagonal part of A.
    !>               If UPLO = 'L': multipliers used to obtain factor L
    !>               in the superdiagonal part of A.
    !>
    !>          On exit, contains factorization details in format used in
    !>          DSYTRF_RK or DSYTRF_BK:
    !>            a) ONLY diagonal elements of the symmetric block diagonal
    !>               matrix D on the diagonal of A, i.e. D(k,k) = A(k,k);
    !>               (superdiagonal (or subdiagonal) elements of D
    !>                are stored on exit in array E), and
    !>            b) If UPLO = 'U': factor U in the superdiagonal part of A.
    !>               If UPLO = 'L': factor L in the subdiagonal part of A.
    !>
    !>          2) If WAY = 'R':
    !>
    !>          On entry, contains factorization details in format used in
    !>          DSYTRF_RK or DSYTRF_BK:
    !>            a) ONLY diagonal elements of the symmetric block diagonal
    !>               matrix D on the diagonal of A, i.e. D(k,k) = A(k,k);
    !>               (superdiagonal (or subdiagonal) elements of D
    !>                are stored on exit in array E), and
    !>            b) If UPLO = 'U': factor U in the superdiagonal part of A.
    !>               If UPLO = 'L': factor L in the subdiagonal part of A.
    !>
    !>          On exit, contains factorization details in format used in
    !>          DSYTRF_ROOK:
    !>            a) all elements of the symmetric block diagonal
    !>               matrix D on the diagonal of A and on superdiagonal
    !>               (or subdiagonal) of A, and
    !>            b) If UPLO = 'U': multipliers used to obtain factor U
    !>               in the superdiagonal part of A.
    !>               If UPLO = 'L': multipliers used to obtain factor L
    !>               in the superdiagonal part of A.
    !>

    LDA

    !>          LDA is INTEGER
    !>          The leading dimension of the array A.  LDA >= max(1,N).
    !>

    E

    !>          E is DOUBLE PRECISION array, dimension (N)
    !>
    !>          1) If WAY ='C':
    !>
    !>          On entry, just a workspace.
    !>
    !>          On exit, contains the superdiagonal (or subdiagonal)
    !>          elements of the symmetric block diagonal matrix D
    !>          with 1-by-1 or 2-by-2 diagonal blocks, where
    !>          If UPLO = 'U': E(i) = D(i-1,i), i=2:N, E(1) is set to 0;
    !>          If UPLO = 'L': E(i) = D(i+1,i), i=1:N-1, E(N) is set to 0.
    !>
    !>          2) If WAY = 'R':
    !>
    !>          On entry, contains the superdiagonal (or subdiagonal)
    !>          elements of the symmetric block diagonal matrix D
    !>          with 1-by-1 or 2-by-2 diagonal blocks, where
    !>          If UPLO = 'U': E(i) = D(i-1,i),i=2:N, E(1) not referenced;
    !>          If UPLO = 'L': E(i) = D(i+1,i),i=1:N-1, E(N) not referenced.
    !>
    !>          On exit, is not changed
    !>

    IPIV

    !>          IPIV is INTEGER array, dimension (N)
    !>          On entry, details of the interchanges and the block
    !>          structure of D as determined:
    !>          1) by DSYTRF_ROOK, if WAY ='C';
    !>          2) by DSYTRF_RK (or DSYTRF_BK), if WAY ='R'.
    !>          The IPIV format is the same for all these routines.
    !>
    !>          On exit, is not changed.
    !>

    INFO

    !>          INFO is INTEGER
    !>          = 0:  successful exit
    !>          < 0:  if INFO = -i, the i-th argument had an illegal value
    !>

Author
    Univ. of Tennessee

    Univ. of California Berkeley

    Univ. of Colorado Denver

    NAG Ltd.

Contributors:

    !>
    !>  November 2017,  Igor Kozachenko,
    !>                  Computer Science Division,
    !>                  University of California, Berkeley
    !>
    !>

Definition at line 196 of file dsyconvf_rook.f.

  subroutine ssyconvf_rook (character uplo, character way, integer n, real, dimension( lda, * ) a, integer lda, real, dimension( * ) e, integer, dimension( * ) ipiv, integer info)

SSYCONVF_ROOK

Purpose:

    !> If parameter WAY = 'C':
    !> SSYCONVF_ROOK converts the factorization output format used in
    !> SSYTRF_ROOK provided on entry in parameter A into the factorization
    !> output format used in SSYTRF_RK (or SSYTRF_BK) that is stored
    !> on exit in parameters A and E. IPIV format for SSYTRF_ROOK and
    !> SSYTRF_RK (or SSYTRF_BK) is the same and is not converted.
    !>
    !> If parameter WAY = 'R':
    !> SSYCONVF_ROOK performs the conversion in reverse direction, i.e.
    !> converts the factorization output format used in SSYTRF_RK
    !> (or SSYTRF_BK) provided on entry in parameters A and E into
    !> the factorization output format used in SSYTRF_ROOK that is stored
    !> on exit in parameter A. IPIV format for SSYTRF_ROOK and
    !> SSYTRF_RK (or SSYTRF_BK) is the same and is not converted.
    !>

Parameters
    UPLO

    !>          UPLO is CHARACTER*1
    !>          Specifies whether the details of the factorization are
    !>          stored as an upper or lower triangular matrix A.
    !>          = 'U':  Upper triangular
    !>          = 'L':  Lower triangular
    !>

    WAY

    !>          WAY is CHARACTER*1
    !>          = 'C': Convert
    !>          = 'R': Revert
    !>

    N

    !>          N is INTEGER
    !>          The order of the matrix A.  N >= 0.
    !>

    A

    !>          A is REAL array, dimension (LDA,N)
    !>
    !>          1) If WAY ='C':
    !>
    !>          On entry, contains factorization details in format used in
    !>          SSYTRF_ROOK:
    !>            a) all elements of the symmetric block diagonal
    !>               matrix D on the diagonal of A and on superdiagonal
    !>               (or subdiagonal) of A, and
    !>            b) If UPLO = 'U': multipliers used to obtain factor U
    !>               in the superdiagonal part of A.
    !>               If UPLO = 'L': multipliers used to obtain factor L
    !>               in the superdiagonal part of A.
    !>
    !>          On exit, contains factorization details in format used in
    !>          SSYTRF_RK or SSYTRF_BK:
    !>            a) ONLY diagonal elements of the symmetric block diagonal
    !>               matrix D on the diagonal of A, i.e. D(k,k) = A(k,k);
    !>               (superdiagonal (or subdiagonal) elements of D
    !>                are stored on exit in array E), and
    !>            b) If UPLO = 'U': factor U in the superdiagonal part of A.
    !>               If UPLO = 'L': factor L in the subdiagonal part of A.
    !>
    !>          2) If WAY = 'R':
    !>
    !>          On entry, contains factorization details in format used in
    !>          SSYTRF_RK or SSYTRF_BK:
    !>            a) ONLY diagonal elements of the symmetric block diagonal
    !>               matrix D on the diagonal of A, i.e. D(k,k) = A(k,k);
    !>               (superdiagonal (or subdiagonal) elements of D
    !>                are stored on exit in array E), and
    !>            b) If UPLO = 'U': factor U in the superdiagonal part of A.
    !>               If UPLO = 'L': factor L in the subdiagonal part of A.
    !>
    !>          On exit, contains factorization details in format used in
    !>          SSYTRF_ROOK:
    !>            a) all elements of the symmetric block diagonal
    !>               matrix D on the diagonal of A and on superdiagonal
    !>               (or subdiagonal) of A, and
    !>            b) If UPLO = 'U': multipliers used to obtain factor U
    !>               in the superdiagonal part of A.
    !>               If UPLO = 'L': multipliers used to obtain factor L
    !>               in the superdiagonal part of A.
    !>

    LDA

    !>          LDA is INTEGER
    !>          The leading dimension of the array A.  LDA >= max(1,N).
    !>

    E

    !>          E is REAL array, dimension (N)
    !>
    !>          1) If WAY ='C':
    !>
    !>          On entry, just a workspace.
    !>
    !>          On exit, contains the superdiagonal (or subdiagonal)
    !>          elements of the symmetric block diagonal matrix D
    !>          with 1-by-1 or 2-by-2 diagonal blocks, where
    !>          If UPLO = 'U': E(i) = D(i-1,i), i=2:N, E(1) is set to 0;
    !>          If UPLO = 'L': E(i) = D(i+1,i), i=1:N-1, E(N) is set to 0.
    !>
    !>          2) If WAY = 'R':
    !>
    !>          On entry, contains the superdiagonal (or subdiagonal)
    !>          elements of the symmetric block diagonal matrix D
    !>          with 1-by-1 or 2-by-2 diagonal blocks, where
    !>          If UPLO = 'U': E(i) = D(i-1,i),i=2:N, E(1) not referenced;
    !>          If UPLO = 'L': E(i) = D(i+1,i),i=1:N-1, E(N) not referenced.
    !>
    !>          On exit, is not changed
    !>

    IPIV

    !>          IPIV is INTEGER array, dimension (N)
    !>          On entry, details of the interchanges and the block
    !>          structure of D as determined:
    !>          1) by SSYTRF_ROOK, if WAY ='C';
    !>          2) by SSYTRF_RK (or SSYTRF_BK), if WAY ='R'.
    !>          The IPIV format is the same for all these routines.
    !>
    !>          On exit, is not changed.
    !>

    INFO

    !>          INFO is INTEGER
    !>          = 0:  successful exit
    !>          < 0:  if INFO = -i, the i-th argument had an illegal value
    !>

Author
    Univ. of Tennessee

    Univ. of California Berkeley

    Univ. of Colorado Denver

    NAG Ltd.

Contributors:

    !>
    !>  November 2017,  Igor Kozachenko,
    !>                  Computer Science Division,
    !>                  University of California, Berkeley
    !>
    !>

Definition at line 196 of file ssyconvf_rook.f.

  subroutine zsyconvf_rook (character uplo, character way, integer n, complex*16, dimension( lda, * ) a, integer lda, complex*16, dimension( * ) e, integer, dimension( * ) ipiv, integer info)

ZSYCONVF_ROOK

Purpose:

    !> If parameter WAY = 'C':
    !> ZSYCONVF_ROOK converts the factorization output format used in
    !> ZSYTRF_ROOK provided on entry in parameter A into the factorization
    !> output format used in ZSYTRF_RK (or ZSYTRF_BK) that is stored
    !> on exit in parameters A and E. IPIV format for ZSYTRF_ROOK and
    !> ZSYTRF_RK (or ZSYTRF_BK) is the same and is not converted.
    !>
    !> If parameter WAY = 'R':
    !> ZSYCONVF_ROOK performs the conversion in reverse direction, i.e.
    !> converts the factorization output format used in ZSYTRF_RK
    !> (or ZSYTRF_BK) provided on entry in parameters A and E into
    !> the factorization output format used in ZSYTRF_ROOK that is stored
    !> on exit in parameter A. IPIV format for ZSYTRF_ROOK and
    !> ZSYTRF_RK (or ZSYTRF_BK) is the same and is not converted.
    !>
    !> ZSYCONVF_ROOK can also convert in Hermitian matrix case, i.e. between
    !> formats used in ZHETRF_ROOK and ZHETRF_RK (or ZHETRF_BK).
    !>

Parameters
    UPLO

    !>          UPLO is CHARACTER*1
    !>          Specifies whether the details of the factorization are
    !>          stored as an upper or lower triangular matrix A.
    !>          = 'U':  Upper triangular
    !>          = 'L':  Lower triangular
    !>

    WAY

    !>          WAY is CHARACTER*1
    !>          = 'C': Convert
    !>          = 'R': Revert
    !>

    N

    !>          N is INTEGER
    !>          The order of the matrix A.  N >= 0.
    !>

    A

    !>          A is COMPLEX*16 array, dimension (LDA,N)
    !>
    !>          1) If WAY ='C':
    !>
    !>          On entry, contains factorization details in format used in
    !>          ZSYTRF_ROOK:
    !>            a) all elements of the symmetric block diagonal
    !>               matrix D on the diagonal of A and on superdiagonal
    !>               (or subdiagonal) of A, and
    !>            b) If UPLO = 'U': multipliers used to obtain factor U
    !>               in the superdiagonal part of A.
    !>               If UPLO = 'L': multipliers used to obtain factor L
    !>               in the superdiagonal part of A.
    !>
    !>          On exit, contains factorization details in format used in
    !>          ZSYTRF_RK or ZSYTRF_BK:
    !>            a) ONLY diagonal elements of the symmetric block diagonal
    !>               matrix D on the diagonal of A, i.e. D(k,k) = A(k,k);
    !>               (superdiagonal (or subdiagonal) elements of D
    !>                are stored on exit in array E), and
    !>            b) If UPLO = 'U': factor U in the superdiagonal part of A.
    !>               If UPLO = 'L': factor L in the subdiagonal part of A.
    !>
    !>          2) If WAY = 'R':
    !>
    !>          On entry, contains factorization details in format used in
    !>          ZSYTRF_RK or ZSYTRF_BK:
    !>            a) ONLY diagonal elements of the symmetric block diagonal
    !>               matrix D on the diagonal of A, i.e. D(k,k) = A(k,k);
    !>               (superdiagonal (or subdiagonal) elements of D
    !>                are stored on exit in array E), and
    !>            b) If UPLO = 'U': factor U in the superdiagonal part of A.
    !>               If UPLO = 'L': factor L in the subdiagonal part of A.
    !>
    !>          On exit, contains factorization details in format used in
    !>          ZSYTRF_ROOK:
    !>            a) all elements of the symmetric block diagonal
    !>               matrix D on the diagonal of A and on superdiagonal
    !>               (or subdiagonal) of A, and
    !>            b) If UPLO = 'U': multipliers used to obtain factor U
    !>               in the superdiagonal part of A.
    !>               If UPLO = 'L': multipliers used to obtain factor L
    !>               in the superdiagonal part of A.
    !>

    LDA

    !>          LDA is INTEGER
    !>          The leading dimension of the array A.  LDA >= max(1,N).
    !>

    E

    !>          E is COMPLEX*16 array, dimension (N)
    !>
    !>          1) If WAY ='C':
    !>
    !>          On entry, just a workspace.
    !>
    !>          On exit, contains the superdiagonal (or subdiagonal)
    !>          elements of the symmetric block diagonal matrix D
    !>          with 1-by-1 or 2-by-2 diagonal blocks, where
    !>          If UPLO = 'U': E(i) = D(i-1,i), i=2:N, E(1) is set to 0;
    !>          If UPLO = 'L': E(i) = D(i+1,i), i=1:N-1, E(N) is set to 0.
    !>
    !>          2) If WAY = 'R':
    !>
    !>          On entry, contains the superdiagonal (or subdiagonal)
    !>          elements of the symmetric block diagonal matrix D
    !>          with 1-by-1 or 2-by-2 diagonal blocks, where
    !>          If UPLO = 'U': E(i) = D(i-1,i),i=2:N, E(1) not referenced;
    !>          If UPLO = 'L': E(i) = D(i+1,i),i=1:N-1, E(N) not referenced.
    !>
    !>          On exit, is not changed
    !>

    IPIV

    !>          IPIV is INTEGER array, dimension (N)
    !>          On entry, details of the interchanges and the block
    !>          structure of D as determined:
    !>          1) by ZSYTRF_ROOK, if WAY ='C';
    !>          2) by ZSYTRF_RK (or ZSYTRF_BK), if WAY ='R'.
    !>          The IPIV format is the same for all these routines.
    !>
    !>          On exit, is not changed.
    !>

    INFO

    !>          INFO is INTEGER
    !>          = 0:  successful exit
    !>          < 0:  if INFO = -i, the i-th argument had an illegal value
    !>

Author
    Univ. of Tennessee

    Univ. of California Berkeley

    Univ. of Colorado Denver

    NAG Ltd.

Contributors:

    !>
    !>  November 2017,  Igor Kozachenko,
    !>                  Computer Science Division,
    !>                  University of California, Berkeley
    !>
    !>

Definition at line 199 of file zsyconvf_rook.f.

Author

Generated automatically by Doxygen for LAPACK from the source code.