# JSColumn

## Overview

The `JSColumn` is a scripting object that represents a column in a data source, accessible through root objects like `datasources` and `databaseManager`. It provides methods for retrieving and managing metadata, properties, and flags associated with the column.

The object allows developers to interact with column-specific attributes such as data provider IDs, SQL names, types, lengths, and sequence configurations. It supports checking column flags, including primary key (`PK_COLUMN`), UUID, or tenant-specific columns, and retrieving the column’s row identifier type. Additionally, it provides access to design-time configurations like default formats, foreign key references, titles, and descriptions.

By enabling advanced operations such as quoting SQL identifiers and retrieving raw JDBC types, `JSColumn` ensures integration with the underlying database schema while maintaining scripting simplicity within the Servoy environment.

## Constants Summarized

| Type                                                                         | Name                                         | Summary                                                                   |
| ---------------------------------------------------------------------------- | -------------------------------------------- | ------------------------------------------------------------------------- |
| [Number](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/number) | [DATABASE\_IDENTITY](#database_identity)     | Constant used when setting or getting the sequence type of columns.       |
| [Number](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/number) | [DATABASE\_SEQUENCE](#database_sequence)     | Constant used when setting or getting the sequence type of columns.       |
| [Number](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/number) | [DATETIME](#datetime)                        | Constant used when setting or getting the type of columns.                |
| [Number](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/number) | [EXCLUDED\_COLUMN](#excluded_column)         | Constant used when setting or getting the flags of columns.               |
| [Number](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/number) | [INTEGER](#integer)                          | Constant used when setting or getting the type of columns.                |
| [Number](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/number) | [MEDIA](#media)                              | Constant used when setting or getting the type of columns.                |
| [Number](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/number) | [NATIVE\_COLUMN](#native_column)             | Constant used when setting or getting the flags of columns.               |
| [Number](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/number) | [NONE](#none)                                | Constant for column information indicating unset values.                  |
| [Number](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/number) | [NO\_DATA\_LOG\_COLUMN](#no_data_log_column) | Constant used when setting or getting the flags of columns.               |
| [Number](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/number) | [NUMBER](#number)                            | Constant used when setting or getting the type of columns.                |
| [Number](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/number) | [PK\_COLUMN](#pk_column)                     | Constant used when setting or getting the row identifier type of columns. |
| [Number](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/number) | [ROWID\_COLUMN](#rowid_column)               | Constant used when setting or getting the row identifier type of columns. |
| [Number](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/number) | [TENANT\_COLUMN](#tenant_column)             | Constant used when setting or getting the flags of columns.               |
| [Number](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/number) | [TEXT](#text)                                | Constant used when setting or getting the type of columns.                |
| [Number](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/number) | [UUID\_COLUMN](#uuid_column)                 | Constant used when setting or getting the flags of columns.               |
| [Number](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/number) | [UUID\_GENERATOR](#uuid_generator)           | Constant used when setting or getting the sequence type of columns.       |

## Methods Summarized

| Type                                                                                     | Name                                            | Summary                                                                                                                     |
| ---------------------------------------------------------------------------------------- | ----------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------- |
| [Boolean](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/boolean)           | [getAllowNull()](#getallownull)                 | Get the allow-null flag of the column.                                                                                      |
| [String](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/string)             | [getDataProviderID()](#getdataproviderid)       | Get the data provider id for this column (which is the same as name if not explicitly defined otherwise).                   |
| [String](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/string)             | [getDefaultFormat()](#getdefaultformat)         | Get the default format of the column.                                                                                       |
| [String](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/string)             | [getDescription()](#getdescription)             | Get the description property of the column.                                                                                 |
| [String](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/string)             | [getForeignType()](#getforeigntype)             | Get the foreign type of the column.                                                                                         |
| [Number](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/number)             | [getLength()](#getlength)                       | Get the length of the column as reported by the JDBC driver.                                                                |
| [String](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/string)             | [getName()](#getname)                           | Get the name of the column as used by Servoy.                                                                               |
| [String](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/string)             | [getQualifiedName()](#getqualifiedname)         | Get the qualified name (including table name) of the column as known by the database.                                       |
| [String](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/string)             | [getQuotedSQLName()](#getquotedsqlname)         | Returns a quoted version of the column name, if necessary, as defined by the actual database used.                          |
| [String](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/string)             | [getRawTitle()](#getrawtitle)                   | Get the raw title property of the column.                                                                                   |
| [Number](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/number)             | [getRowIdentifierType()](#getrowidentifiertype) | Get the row identifier type of the column.                                                                                  |
| [String](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/string)             | [getSQLName()](#getsqlname)                     | Get the name of the column as known by the database.                                                                        |
| [Number](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/number)             | [getSQLType()](#getsqltype)                     | Get the raw JDBC type of the column, which allows to check database specific types, like sting/byte column type variations. |
| [Number](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/number)             | [getScale()](#getscale)                         | Get the scale of the column as reported by the JDBC driver.                                                                 |
| [Number](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/number)             | [getSequenceType()](#getsequencetype)           | Get the sequence type of the column.                                                                                        |
| [JSTable](https://docs.servoy.com/reference/servoycore/dev-api/database-manager/jstable) | [getTable()](#gettable)                         | Get the JSTable of this column.                                                                                             |
| [String](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/string)             | [getTitle()](#gettitle)                         | Get the title property of the column.                                                                                       |
| [Number](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/number)             | [getType()](#gettype)                           | Get the JDBC type of the column.                                                                                            |
| [String](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/string)             | [getTypeAsString()](#gettypeasstring)           | Get the name JDBC type of the column.                                                                                       |
| [Boolean](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/boolean)           | [hasFlag(flag)](#hasflag-flag)                  | Check a flag of the column.                                                                                                 |

## Constants Detailed

### DATABASE\_IDENTITY

Constant used when setting or getting the sequence type of columns.

**Type**\
[Number](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/number)

**Sample**

```js
var table = databaseManager.getTable('db:/example_data/orders')
var column = table.getColumn('customerid')
switch (column.getSequenceType())
{
case JSColumn.NONE:
	// handle column with no sequence
break;

case JSColumn.UUID_GENERATOR:
	// handle uuid generated column
break;
}
```

### DATABASE\_SEQUENCE

Constant used when setting or getting the sequence type of columns.

**Type**\
[Number](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/number)

**Sample**

```js
var table = databaseManager.getTable('db:/example_data/orders')
var column = table.getColumn('customerid')
switch (column.getSequenceType())
{
case JSColumn.NONE:
	// handle column with no sequence
break;

case JSColumn.UUID_GENERATOR:
	// handle uuid generated column
break;
}
```

### DATETIME

Constant used when setting or getting the type of columns.

**Type**\
[Number](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/number)

**Sample**

```js
var table = databaseManager.getTable('db:/example_data/orders')
var column = table.getColumn('customerid')
switch (column.getType())
{
case JSColumn.TEXT:
	// handle text column
break;

case JSColumn.NUMBER:
case JSColumn.INTEGER:
	// handle numerical column
break;
}
```

### EXCLUDED\_COLUMN

Constant used when setting or getting the flags of columns.\
This flag identifies columns that are skipped in the sql.

**Type**\
[Number](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/number)

**Sample**

```js
var table = databaseManager.getTable('db:/example_data/orders')
var column = table.getColumn('customerid')
if (column.hasFlag(JSColumn.UUID_COLUMN))
{
	// handle uuid column
}
```

### INTEGER

Constant used when setting or getting the type of columns.

**Type**\
[Number](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/number)

**Sample**

```js
var table = databaseManager.getTable('db:/example_data/orders')
var column = table.getColumn('customerid')
switch (column.getType())
{
case JSColumn.TEXT:
	// handle text column
break;

case JSColumn.NUMBER:
case JSColumn.INTEGER:
	// handle numerical column
break;
}
```

### MEDIA

Constant used when setting or getting the type of columns.

**Type**\
[Number](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/number)

**Sample**

```js
var table = databaseManager.getTable('db:/example_data/orders')
var column = table.getColumn('customerid')
switch (column.getType())
{
case JSColumn.TEXT:
	// handle text column
break;

case JSColumn.NUMBER:
case JSColumn.INTEGER:
	// handle numerical column
break;
}
```

### NATIVE\_COLUMN

Constant used when setting or getting the flags of columns.\
This flag identifies columns that are marked as a native type column (for example uniqueidentifier).

**Type**\
[Number](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/number)

**Sample**

```js
var table = databaseManager.getTable('db:/example_data/orders')
var column = table.getColumn('customerid')
if (column.hasFlag(JSColumn.UUID_COLUMN))
{
	// handle uuid column
}
```

### NONE

Constant for column information indicating unset values.

**Type**\
[Number](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/number)

**Sample**

```js
var table = databaseManager.getTable('db:/example_data/orders')
var column = table.getColumn('customerid')
switch (column.getSequenceType())
{
case JSColumn.NONE:
	// handle column with no sequence
break;

case JSColumn.UUID_GENERATOR:
	// handle uuid generated column
break;
}
```

### NO\_DATA\_LOG\_COLUMN

Constant used when setting or getting the flags of columns.\
This flag indicates columns whose data is not stored in the log table.

**Type**\
[Number](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/number)

**Sample**

```js
var table = databaseManager.getTable('db:/example_data/orders')
var column = table.getColumn('customerid')
if (column.hasFlag(JSColumn.UUID_COLUMN))
{
	// handle uuid column
}
```

### NUMBER

Constant used when setting or getting the type of columns.

**Type**\
[Number](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/number)

**Sample**

```js
var table = databaseManager.getTable('db:/example_data/orders')
var column = table.getColumn('customerid')
switch (column.getType())
{
case JSColumn.TEXT:
	// handle text column
break;

case JSColumn.NUMBER:
case JSColumn.INTEGER:
	// handle numerical column
break;
}
```

### PK\_COLUMN

Constant used when setting or getting the row identifier type of columns.\
This value identifies columns that are defined as primary key in the database.

**Type**\
[Number](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/number)

**Sample**

```js
var table = databaseManager.getTable('db:/example_data/orders')
var column = table.getColumn('customerid')
switch (column.getRowIdentifierType())
{
case JSColumn.NONE:
	// handle normal column
break;

case JSColumn.PK_COLUMN:
	// handle database pk column
break;

case JSColumn.ROWID_COLUMN:
	// handle developer defined pk column
break;
}
```

### ROWID\_COLUMN

Constant used when setting or getting the row identifier type of columns.\
This value identifies columns that are defined as primary key by the developer (but not in the database).

**Type**\
[Number](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/number)

**Sample**

```js
var table = databaseManager.getTable('db:/example_data/orders')
var column = table.getColumn('customerid')
switch (column.getRowIdentifierType())
{
case JSColumn.NONE:
	// handle normal column
break;

case JSColumn.PK_COLUMN:
	// handle database pk column
break;

case JSColumn.ROWID_COLUMN:
	// handle developer defined pk column
break;
}
```

### TENANT\_COLUMN

Constant used when setting or getting the flags of columns.\
This flag identifies columns that are marked as a tenant column.

**Type**\
[Number](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/number)

**Sample**

```js
var table = databaseManager.getTable('db:/example_data/orders')
var column = table.getColumn('customerid')
if (column.hasFlag(JSColumn.UUID_COLUMN))
{
	// handle uuid column
}
```

### TEXT

Constant used when setting or getting the type of columns.

**Type**\
[Number](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/number)

**Sample**

```js
var table = databaseManager.getTable('db:/example_data/orders')
var column = table.getColumn('customerid')
switch (column.getType())
{
case JSColumn.TEXT:
	// handle text column
break;

case JSColumn.NUMBER:
case JSColumn.INTEGER:
	// handle numerical column
break;
}
```

### UUID\_COLUMN

Constant used when setting or getting the flags of columns.\
This flag identifies columns whose values are treated as UUID.

**Type**\
[Number](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/number)

**Sample**

```js
var table = databaseManager.getTable('db:/example_data/orders')
var column = table.getColumn('customerid')
if (column.hasFlag(JSColumn.UUID_COLUMN))
{
	// handle uuid column
}
```

### UUID\_GENERATOR

Constant used when setting or getting the sequence type of columns.

**Type**\
[Number](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/number)

**Sample**

```js
var table = databaseManager.getTable('db:/example_data/orders')
var column = table.getColumn('customerid')
switch (column.getSequenceType())
{
case JSColumn.NONE:
	// handle column with no sequence
break;

case JSColumn.UUID_GENERATOR:
	// handle uuid generated column
break;
}
```

## Methods Detailed

### getAllowNull()

Get the allow-null flag of the column.

**Returns:** [Boolean](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/boolean) boolean allow-null flag.

**Sample**

```js
var table = databaseManager.getTable('db:/example_data/orders')
var column = table.getColumn('customerid')
if (!column.getAllowNull())
{
	 // column cannot be null
}
```

### getDataProviderID()

Get the data provider id for this column (which is the same as name if not explicitly defined otherwise).

**Returns:** [String](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/string) String dataprovider id.

**Sample**

```js
var table = databaseManager.getTable('db:/example_data/orders')
var column = table.getColumn('customerid')
var dataProviderId = column.getDataProviderID()
```

### getDefaultFormat()

Get the default format of the column.

**Returns:** [String](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/string) String column default format.

**Sample**

```js
var table = databaseManager.getTable('db:/example_data/orders')
var column = table.getColumn('customerid')
var format = column.getDefaultFormat()
```

### getDescription()

Get the description property of the column.

**Returns:** [String](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/string) String column description.

**Sample**

```js
var table = databaseManager.getTable('db:/example_data/orders')
var column = table.getColumn('customername')
var desc = column.getDescription()
```

### getForeignType()

Get the foreign type of the column.\
The foreign type can be defined design time as a foreign key reference to another table.

**Returns:** [String](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/string) String foreign type.

**Sample**

```js
var table = databaseManager.getTable('db:/example_data/orders')
var column = table.getColumn('customerid')
var foreignType = column.getForeignType()
if (foreignType != null)
{
	var fkTable = databaseManager.getTable('example_data', foreignType)
}
```

### getLength()

Get the length of the column as reported by the JDBC driver.

**Returns:** [Number](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/number) int column length.

**Sample**

```js
var table = databaseManager.getTable('db:/example_data/orders')
var column = table.getColumn('customername')
if (column.getLength() < 10)
{
	 // handle short column
}
```

### getName()

Get the name of the column as used by Servoy.

**Returns:** [String](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/string) String column name

**Sample**

```js
var table = databaseManager.getTable('db:/example_data/orders')
var column = table.getColumn('customerid')
var colName = column.getName()
```

### getQualifiedName()

Get the qualified name (including table name) of the column as known by the database.\
The name is quoted, if necessary, as defined by the actual database used.

**Returns:** [String](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/string) String qualified column name.

**Sample**

```js
var table = databaseManager.getTable('db:/example_data/orders')
var column = table.getColumn('customerid')
var qualifiedSqlName = column.getQualifiedName()
```

### getQuotedSQLName()

Returns a quoted version of the column name, if necessary, as defined by the actual database used.

**Returns:** [String](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/string) column name, quoted if needed.

**Sample**

```js
//use with the raw SQL plugin:
//if the table name contains characters that are illegal in sql, the table name will be quoted
var jsTable = databaseManager.getTable('udm', 'campaigns')
var quotedTableName = jsTable.getQuotedSQLName()
var jsColumn = jsTable.getColumn('active')
var quotedColumnName = jsColumn.getQuotedSQLName()
plugins.rawSQL.executeSQL('udm',  quotedTableName,  'select * from ' + quotedTableName + ' where ' + quotedColumnName + ' = ?', [1])
```

### getRawTitle()

Get the raw title property of the column.

**Returns:** [String](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/string) String column title.

**Sample**

```js
var table = databaseManager.getTable('db:/example_data/orders')
var column = table.getColumn('customername')
var title = column.getRawTitle()
```

### getRowIdentifierType()

Get the row identifier type of the column.\
The sequence type is one of:\
&#x20;\- JSColumn.PK\_COLUMN\
&#x20;\- JSColumn.ROWID\_COLUMN\
&#x20;\- JSColumn.NONE

**Returns:** [Number](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/number) int row identifier type.

**Sample**

```js
var table = databaseManager.getTable('db:/example_data/orders')
var column = table.getColumn('customerid')
switch (column.getRowIdentifierType())
{
case JSColumn.NONE:
	// handle normal column
break;

case JSColumn.PK_COLUMN:
	// handle database pk column
break;

case JSColumn.ROWID_COLUMN:
	// handle developer defined pk column
break;
}
```

### getSQLName()

Get the name of the column as known by the database.

**Returns:** [String](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/string) String sql name

**Sample**

```js
var table = databaseManager.getTable('db:/example_data/orders')
var column = table.getColumn('customerid')
var sqlName = column.getSQLName()
```

### getSQLType()

Get the raw JDBC type of the column, which allows to check database specific types, like sting/byte column type variations.

**Returns:** [Number](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/number) int sql type.

**Sample**

```js
var table = databaseManager.getTable('db:/example_data/orders')
var column = table.getColumn('customerid')
var sqlType = column.getSQLType();
```

### getScale()

Get the scale of the column as reported by the JDBC driver.

**Returns:** [Number](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/number) int column scale.

**Sample**

```js
var table = databaseManager.getTable('db:/example_data/orders')
var column = table.getColumn('customername')
var scale = column.getScale()
```

### getSequenceType()

Get the sequence type of the column.\
The sequence type is one of:\
&#x20;\- JSColumn.NONE\
&#x20;\- JSColumn.SERVOY\_SEQUENCE\
&#x20;\- JSColumn.DATABASE\_SEQUENCE\
&#x20;\- JSColumn.DATABASE\_IDENTITY\
&#x20;\- JSColumn.UUID\_GENERATOR;

**Returns:** [Number](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/number) int sequence type.

**Sample**

```js
var table = databaseManager.getTable('db:/example_data/orders')
var column = table.getColumn('customerid')
switch (column.getSequenceType())
{
case JSColumn.NONE:
	// handle column with no sequence
break;

case JSColumn.UUID_GENERATOR:
	// handle uuid generated column
break;
}
```

### getTable()

Get the JSTable of this column.

**Returns:** [JSTable](https://docs.servoy.com/reference/servoycore/dev-api/database-manager/jstable) table The JSTable of this column.

### getTitle()

Get the title property of the column. If title is null will return column name.

**Returns:** [String](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/string) String column title.

**Sample**

```js
var table = databaseManager.getTable('db:/example_data/orders')
var column = table.getColumn('customername')
var title = column.getTitle()
```

### getType()

Get the JDBC type of the column.\
The type reported by the JDBC driver will be mapped to one of:\
&#x20;\- JSColumn.DATETIME\
&#x20;\- JSColumn.TEXT\
&#x20;\- JSColumn.NUMBER\
&#x20;\- JSColumn.INTEGER\
&#x20;\- JSColumn.MEDIA

**Returns:** [Number](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/number) int sql type.

**Sample**

```js
var table = databaseManager.getTable('db:/example_data/orders')
var column = table.getColumn('customerid')
switch (column.getType())
{
case JSColumn.TEXT:
	// handle text column
break;

case JSColumn.NUMBER:
case JSColumn.INTEGER:
	// handle numerical column
break;
}
```

### getTypeAsString()

Get the name JDBC type of the column.\
The same mapping as defined in JSColumn.getType() is applied.

**Returns:** [String](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/string) String sql name.

**Sample**

```js
var table = databaseManager.getTable('db:/example_data/orders')
var column = table.getColumn('customerid')
var typeName = column.getTypeAsString()
```

### hasFlag(flag)

Check a flag of the column.\
The flags are a bit pattern consisting of 1 or more of the following bits:\
&#x20;\- JSColumn.UUID\_COLUMN\
&#x20;\- JSColumn.EXCLUDED\_COLUMN\
&#x20;\- JSColumn.TENANT\_COLUMN\
&#x20;\- JSColumn.NATIVE\_COLUMN

**Parameters**

* [Number](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/number) **flag** ;

**Returns:** [Boolean](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/boolean) boolean whether flag is set.

**Sample**

```js
var table = databaseManager.getTable('db:/example_data/orders')
var column = table.getColumn('customerid')
if (column.hasFlag(JSColumn.UUID_COLUMN))
{
	// handle uuid column
}
```

***
