# Contributor Network

Browse, publish, favorite, comment on, and view lineage for shared cheatsheets, Lean 4 solver templates, and model references. Benchmark data is available for platform-benchmarked items. Items are scoped to a competition.

Call Contributor Network endpoints for a competition only when its `capabilities.contributorNetwork` is `true`.

Each item may carry a human-shareable `publicCode`: `{competitionPrefix}-{6-digit number}` for cheatsheets and model references, such as `EQT01-000042` or `MAC01-000042`; solver templates insert an `S` or `M` track letter, such as `EQT01-S00042`.

Track and model values for solver-template items are IDs from the competition's `submissionSpec.catalog.tracks[].id` and `submissionSpec.catalog.models[].id`.

## List items

```http
GET /api/public/v1/contributor-network/items
```

**Scope**: `contributor-network.read`. This endpoint is cursor-paginated.

Lists visible Contributor Network items. The list view omits `content`, `solverCode`, `modelName`, `commitHash`, and `parent`; call [Get an item](#get-an-item) for the full payload.

### Query parameters

| Parameter       | Type    | Required | Description                                                                 |
| :-------------- | :------ | :------: | :-------------------------------------------------------------------------- |
| `competitionId` | string  | No       | Restrict to one competition.                                                |
| `kind`          | string  | No       | `cheatsheet`, `solver-template`, or `model-reference`.                      |
| `track`         | string  | No       | Track ID filter, such as `solo` or `marathon`. Applies when `kind=solver-template`. |
| `search`        | string  | No       | Substring match on title and author display name.                           |
| `publicCode`    | string  | No       | Exact lookup by shareable code. Returns a single-item page or empty page.   |
| `sort`          | string  | No       | `newest` (default) or `earliest`.                                           |
| `cursor`        | string  | No       | Opaque cursor from the previous `nextCursor`. Ignored with `publicCode`.    |
| `limit`         | integer | No       | Page size. Default `25`, maximum `100`.                                     |

### Response fields

| Field        | Type          | Description                          |
| :----------- | :------------ | :----------------------------------- |
| `items[]`    | [ContributorNetworkItemSummary](#contributor-network-item-summary-fields)[] | Contributor Network item summaries.  |
| `nextCursor` | string \| null | Cursor for the next page, or `null`. |

### Contributor Network item summary fields

| Field                | Type           | Description                                                  |
| :------------------- | :------------- | :----------------------------------------------------------- |
| `id`                 | string         | Contributor Network item ID.                                |
| `publicCode`         | string \| null | Human-shareable code.                                       |
| `competitionId`      | string         | Competition slug.                                            |
| `kind`               | string         | `cheatsheet`, `solver-template`, or `model-reference`.        |
| `title`              | string         | Item title.                                                  |
| `remark`             | string \| null | Short note shown on the item card.                           |
| `author`             | [Author](#author-fields) | Item author.                                      |
| `track`              | string \| null | Solver-template track ID; `null` otherwise.                  |
| `modelId`            | string \| null | Solver-template model ID; `null` otherwise.                  |
| `favoriteCount`      | integer        | Number of favorites.                                         |
| `viewerHasFavorited` | boolean        | Whether the calling account has favorited the item.          |
| `publishedAt`        | string         | ISO 8601 UTC publish timestamp.                              |

### Contributor Network item fields

`ContributorNetworkItem` includes all [ContributorNetworkItemSummary](#contributor-network-item-summary-fields) fields plus the matching kind-specific payload and parent:

| Field        | Type           | Description                                                  |
| :----------- | :------------- | :----------------------------------------------------------- |
| `content`            | string         | Cheatsheet body. Present for `kind=cheatsheet`.              |
| `solverCode`         | string         | Lean source. Present for `kind=solver-template`.             |
| `modelName`          | string         | Hugging Face model name. Present for `kind=model-reference`. |
| `commitHash`         | string         | Model commit SHA. Present for `kind=model-reference`.        |
| `parent`             | [ContributorNetworkParent](#contributor-network-parent-fields) \| null | Parent item this item was forked from, or `null`. |

### Author fields

| Field         | Type   | Description                 |
| :------------ | :----- | :-------------------------- |
| `sairId`      | string | SAIR ID of the author.      |
| `displayName` | string | Display name of the author. |

### Contributor Network parent fields

| Field        | Type           | Description           |
| :----------- | :------------- | :-------------------- |
| `id`         | string         | Parent item ID.       |
| `publicCode` | string \| null | Human-shareable code. |

```json
{
  "ok": true,
  "data": {
    "items": [
      {
        "id": "cn_01HX0PA...",
        "publicCode": "EQT01-000042",
        "competitionId": "mathematics-distillation-challenge-equational-theories-stage1",
        "kind": "cheatsheet",
        "title": "Modular tricks v3",
        "remark": "Adds prime-modulus shortcut.",
        "author": { "sairId": "U-9f7e1c00", "displayName": "alice" },
        "track": null,
        "modelId": null,
        "favoriteCount": 4,
        "viewerHasFavorited": true,
        "publishedAt": "2026-04-12T09:00:00Z"
      },
      {
        "id": "cn_01JMAC...",
        "publicCode": "MAC01-000042",
        "competitionId": "modular-arithmetic-challenge",
        "kind": "model-reference",
        "title": "your-team/your-model",
        "remark": "Model revision for public comparison.",
        "author": { "sairId": "U-1a2b3c00", "displayName": "bob" },
        "track": null,
        "modelId": null,
        "favoriteCount": 2,
        "viewerHasFavorited": false,
        "publishedAt": "2026-06-08T09:00:00Z"
      }
    ],
    "nextCursor": null
  }
}
```

## Get an item

```http
GET /api/public/v1/contributor-network/items/{itemId}
```

**Scope**: `contributor-network.read`.

Returns one item with its full payload: `content` for `cheatsheet`, `solverCode` for `solver-template`, or `modelName` / `commitHash` for `model-reference`.

### Path parameters

| Parameter | Type   | Required | Description                  |
| :-------- | :----- | :------: | :--------------------------- |
| `itemId`  | string | Yes      | Contributor Network item ID. |

### Response fields

Returns a [ContributorNetworkItem](#contributor-network-item-fields).

**Example response for a cheatsheet item**

```json
{
  "ok": true,
  "data": {
    "id": "cn_01HX0PA...",
    "publicCode": "EQT01-000042",
    "competitionId": "mathematics-distillation-challenge-equational-theories-stage1",
    "kind": "cheatsheet",
    "title": "Modular tricks v3",
    "remark": "Adds prime-modulus shortcut.",
    "author": { "sairId": "U-9f7e1c00", "displayName": "alice" },
    "track": null,
    "modelId": null,
    "content": "When the modulus is prime, use Fermat's little theorem...",
    "parent": { "id": "cn_01HW...", "publicCode": "EQT01-000031" },
    "favoriteCount": 4,
    "viewerHasFavorited": true,
    "publishedAt": "2026-04-12T09:00:00Z"
  }
}
```

**Example response for a model-reference item**

```json
{
  "ok": true,
  "data": {
    "id": "cn_01JMAC...",
    "publicCode": "MAC01-000042",
    "competitionId": "modular-arithmetic-challenge",
    "kind": "model-reference",
    "title": "your-team/your-model",
    "remark": "Model revision for public comparison.",
    "author": { "sairId": "U-1a2b3c00", "displayName": "bob" },
    "track": null,
    "modelId": null,
    "modelName": "your-team/your-model",
    "commitHash": "0123456789abcdef0123456789abcdef01234567",
    "parent": null,
    "favoriteCount": 2,
    "viewerHasFavorited": false,
    "publishedAt": "2026-06-08T09:00:00Z"
  }
}
```

## Publish

```http
POST /api/public/v1/contributor-network/items
```

**Scope**: `contributor-network.write`.

Publishes a saved resource, a submitted text body, inline text, or model reference. The discriminator is `source.from`.

### Request fields

| Field                              | Type           | Required | Description                                                        |
| :--------------------------------- | :------------- | :------: | :----------------------------------------------------------------- |
| `competitionId`                    | string         | Yes      | Competition this item belongs to.                                  |
| `kind`                             | string         | Yes      | `cheatsheet`, `solver-template`, or `model-reference`. Must match `source`. |
| `source`                           | [PublishSource](#publish-source-fields) | Yes | Source resource, inline body, or model reference to publish.      |
| `parentContributorNetworkItemId`   | string \| null | No       | Parent item this publication forks from.                           |
| `remark`                           | string         | No       | Short note shown on the item card.                                 |
| `track`                            | string         | Conditional | Track ID from `submissionSpec.catalog.tracks[].id`. Required for `kind=solver-template`. |
| `modelId`                          | string         | Conditional | Model ID from `submissionSpec.catalog.models[].id`. Required for `kind=solver-template`. |

### Publish source fields

| Field              | Type   | Required | Description                                                        |
| :----------------- | :----- | :------: | :----------------------------------------------------------------- |
| `from`             | string | Yes      | `cheatsheet`, `solver-template`, `submission`, `inline`, or `model-reference`. |
| `cheatsheetId`     | string | Conditional | Required when `from=cheatsheet`.                                |
| `solverTemplateId` | string | Conditional | Required when `from=solver-template`.                            |
| `submissionId`     | string | Conditional | Required when `from=submission`. Publishes the stored text body of a `cheatsheet` (`content`) or `solver-participation` (`solverCode`) submission. `model-reference` and other bodiless kinds are not publishable this way. |
| `title`            | string | Conditional | Required when `from=inline`.                                     |
| `content`          | string | Conditional | Inline cheatsheet body. Required when `from=inline` and `kind=cheatsheet`. |
| `solverCode`       | string | Conditional | Inline Lean source. Required when `from=inline` and `kind=solver-template`. |
| `modelName`        | string | Conditional | Hugging Face model name. Required when `from=model-reference`.    |
| `commitHash`       | string | Conditional | Full 40-character lowercase hex commit SHA. Required when `from=model-reference`. |

**Example request body for a cheatsheet**

```json
{
  "competitionId": "mathematics-distillation-challenge-equational-theories-stage1",
  "kind": "cheatsheet",
  "source": { "from": "cheatsheet", "cheatsheetId": "cs_01HXYZ..." },
  "parentContributorNetworkItemId": null,
  "remark": "Adds prime-modulus shortcut."
}
```

**Example request body for a model-reference**

```json
{
  "competitionId": "modular-arithmetic-challenge",
  "kind": "model-reference",
  "source": {
    "from": "model-reference",
    "modelName": "your-team/your-model",
    "commitHash": "0123456789abcdef0123456789abcdef01234567"
  },
  "parentContributorNetworkItemId": null,
  "remark": "Model revision for public comparison."
}
```

For `kind=model-reference`, `track` and `modelId` must be omitted, and the item `title` is set to `modelName`.

### Response fields

Returns the created [ContributorNetworkItem](#contributor-network-item-fields) with its full payload.

## Withdraw an item

```http
DELETE /api/public/v1/contributor-network/items/{itemId}
```

**Scope**: `contributor-network.write`.

Withdraws an item authored by the calling account. Withdrawn items disappear from listings, direct lookups, graphs, and benchmark results.

### Path parameters

| Parameter | Type   | Required | Description                  |
| :-------- | :----- | :------: | :--------------------------- |
| `itemId`  | string | Yes      | Contributor Network item ID. |

### Response

Returns `204` with no body.

## Favorite an item

```http
PUT /api/public/v1/contributor-network/items/{itemId}/favorite
```

**Scope**: `contributor-network.write`.

Sets the caller's favorite flag for an item. This operation is idempotent.

### Path parameters

| Parameter | Type   | Required | Description                  |
| :-------- | :----- | :------: | :--------------------------- |
| `itemId`  | string | Yes      | Contributor Network item ID. |

### Response fields

| Field           | Type    | Description                              |
| :-------------- | :------ | :--------------------------------------- |
| `favorited`     | boolean | Always `true` on success.                |
| `favoriteCount` | integer | Updated favorite count for the item.     |

**Example response**

```json
{
  "ok": true,
  "data": {
    "favorited": true,
    "favoriteCount": 5
  }
}
```

## Unfavorite an item

```http
DELETE /api/public/v1/contributor-network/items/{itemId}/favorite
```

**Scope**: `contributor-network.write`.

Clears the caller's favorite flag for an item. This operation is idempotent.

### Path parameters

| Parameter | Type   | Required | Description                  |
| :-------- | :----- | :------: | :--------------------------- |
| `itemId`  | string | Yes      | Contributor Network item ID. |

### Response

Returns `204` with no body. Refetch the item to read the updated `favoriteCount`.

## List comments

```http
GET /api/public/v1/contributor-network/items/{itemId}/comments
```

**Scope**: `contributor-network.read`. This endpoint is cursor-paginated.

Lists comments for an item, sorted oldest-first. Soft-deleted comments remain in the list for thread continuity; `body` and `author.displayName` are `null`.

### Path parameters

| Parameter | Type   | Required | Description                  |
| :-------- | :----- | :------: | :--------------------------- |
| `itemId`  | string | Yes      | Contributor Network item ID. |

### Query parameters

| Parameter | Type    | Required | Description                                   |
| :-------- | :------ | :------: | :-------------------------------------------- |
| `cursor`  | string  | No       | Opaque cursor from the previous `nextCursor`. |
| `limit`   | integer | No       | Page size. Default `25`, maximum `100`.       |

### Response fields

| Field        | Type          | Description                          |
| :----------- | :------------ | :----------------------------------- |
| `items[]`    | [Comment](#comment-fields)[] | Comment records.                     |
| `nextCursor` | string \| null | Cursor for the next page, or `null`. |

### Comment fields

| Field                | Type           | Description                                            |
| :------------------- | :------------- | :----------------------------------------------------- |
| `id`                 | string         | Comment ID.                                           |
| `author`             | [CommentAuthor](#comment-author-fields) | Comment author.                         |
| `body`               | string \| null | Comment body, or `null` when deleted.                 |
| `createdAt`          | string         | ISO 8601 UTC creation timestamp.                      |
| `isDeleted`          | boolean        | Whether the comment has been soft-deleted.            |

### Comment author fields

| Field         | Type           | Description                            |
| :------------ | :------------- | :------------------------------------- |
| `sairId`      | string         | SAIR ID of the comment author.         |
| `displayName` | string \| null | Display name, or `null` when deleted.  |

```json
{
  "ok": true,
  "data": {
    "items": [
      {
        "id": "cmt_01HX...",
        "author": { "sairId": "U-...", "displayName": "alice" },
        "body": "Nice trick — what about composite moduli?",
        "createdAt": "2026-04-13T10:00:00Z",
        "isDeleted": false
      }
    ],
    "nextCursor": null
  }
}
```

## Create a comment

```http
POST /api/public/v1/contributor-network/items/{itemId}/comments
```

**Scope**: `contributor-network.write`.

Creates a comment on an item.

### Path parameters

| Parameter | Type   | Required | Description                  |
| :-------- | :----- | :------: | :--------------------------- |
| `itemId`  | string | Yes      | Contributor Network item ID. |

### Request fields

| Field  | Type   | Required | Description                                  |
| :----- | :----- | :------: | :------------------------------------------- |
| `body` | string | Yes      | Comment body. Must be non-empty after trim, maximum 5 000 characters. |

### Response fields

Returns the created [Comment](#comment-fields).

## Delete a comment

```http
DELETE /api/public/v1/contributor-network/items/{itemId}/comments/{commentId}
```

**Scope**: `contributor-network.write`.

Soft-deletes a comment. You may delete your own comments, and item authors may delete any comment on their own items.

### Path parameters

| Parameter   | Type   | Required | Description                  |
| :---------- | :----- | :------: | :--------------------------- |
| `itemId`    | string | Yes      | Contributor Network item ID. |
| `commentId` | string | Yes      | Comment ID.                  |

### Response

Returns `204` with no body.

## Get item lineage graph

```http
GET /api/public/v1/contributor-network/items/{itemId}/graph
```

**Scope**: `contributor-network.read`.

Returns the connected subgraph rooted at `itemId`: ancestors back to the root and descendants. `depth` is relative to the anchor; ancestors are negative, and the anchor is `0`.

### Path parameters

| Parameter | Type   | Required | Description                  |
| :-------- | :----- | :------: | :--------------------------- |
| `itemId`  | string | Yes      | Contributor Network item ID. |

### Response fields

| Field     | Type      | Description                  |
| :-------- | :-------- | :--------------------------- |
| `nodes[]` | [GraphNode](#graph-node-fields)[] | Graph nodes.                |
| `edges[]` | [GraphEdge](#graph-edge-fields)[] | Directed parent-child edges. |

### Graph node fields

| Field        | Type           | Description                   |
| :----------- | :------------- | :---------------------------- |
| `id`         | string         | Item ID.                      |
| `publicCode` | string \| null | Human-shareable code.         |
| `title`      | string         | Item title.                   |
| `kind`       | string         | `cheatsheet`, `solver-template`, or `model-reference`. |
| `depth`      | integer        | Depth relative to the anchor. |

### Graph edge fields

| Field    | Type   | Description     |
| :------- | :----- | :-------------- |
| `parent` | string | Parent item ID. |
| `child`  | string | Child item ID.  |

```json
{
  "ok": true,
  "data": {
    "nodes": [
      { "id": "cn_01HW...", "publicCode": "EQT01-000031", "title": "...", "kind": "cheatsheet", "depth": -1 },
      { "id": "cn_01HX0PA...", "publicCode": "EQT01-000042", "title": "...", "kind": "cheatsheet", "depth": 0 }
    ],
    "edges": [{ "parent": "cn_01HW...", "child": "cn_01HX0PA..." }]
  }
}
```

## Get global lineage graph

```http
GET /api/public/v1/contributor-network/graph
```

**Scope**: `contributor-network.read`.

Returns the lineage graph across all visible items. The response is capped at 2 000 nodes; add filters if you receive `GRAPH_TOO_LARGE`.

### Query parameters

| Parameter       | Type   | Required | Description                               |
| :-------------- | :----- | :------: | :---------------------------------------- |
| `competitionId` | string | No       | Restrict to one competition.              |
| `kind`          | string | No       | `cheatsheet`, `solver-template`, or `model-reference`. |

### Response fields

| Field     | Type                            | Description                                      |
| :-------- | :------------------------------ | :----------------------------------------------- |
| `nodes[]` | [GraphNode](#graph-node-fields)[] | Graph nodes. In the global graph, `depth` is `0`. |
| `edges[]` | [GraphEdge](#graph-edge-fields)[] | Directed parent-child edges.                    |

## List benchmarks

```http
GET /api/public/v1/contributor-network/benchmarks
```

**Scope**: `contributor-network.read`. This endpoint is cursor-paginated.

Lists platform-run benchmark summaries for published items. Benchmarks are not user-triggered; the platform sweeps newly published items on a schedule.

### Query parameters

| Parameter        | Type    | Required | Description                                                   |
| :--------------- | :------ | :------: | :------------------------------------------------------------ |
| `competitionId`  | string  | No       | Restrict to one competition.                                  |
| `problemSet`     | string  | No       | Restrict to one benchmark problem set.                        |
| `modelId`        | string  | No       | Restrict to one model.                                        |
| `minAvgAccuracy` | number  | No       | Minimum average accuracy, from `0` to `1`.                    |
| `search`         | string  | No       | Substring match on author display name or team number.        |
| `sortBy`         | string  | No       | `avgAccuracy` (default), `publishedAt`, or `scoredTotal`.     |
| `sortDirection`  | string  | No       | `desc` (default) or `asc`.                                    |
| `cursor`         | string  | No       | Opaque cursor from the previous `nextCursor`.                 |
| `limit`          | integer | No       | Page size. Default `25`, maximum `100`.                       |

### Response fields

| Field        | Type           | Description                          |
| :----------- | :------------- | :----------------------------------- |
| `items[]`    | [BenchmarkSummary](#benchmark-summary-fields)[] | Benchmark summary rows. |
| `nextCursor` | string \| null | Cursor for the next page, or `null`. |

### Benchmark summary fields

| Field                  | Type           | Description                                       |
| :--------------------- | :------------- | :------------------------------------------------ |
| `itemId`               | string         | Contributor Network item ID.                      |
| `publicCode`           | string \| null | Human-shareable code.                             |
| `title`                | string         | Item title.                                       |
| `author`               | [Author](#author-fields) | Item author.                              |
| `team`                 | [BenchmarkTeam](#benchmark-team-fields) \| null | Team metadata when available.     |
| `status`               | string         | `pending`, `running`, `done`, `failed`, or `cancelled`. |
| `problemSet`           | string         | Benchmark problem set ID.                         |
| `modelIds`             | string[]       | Models included in this row.                      |
| `avgAccuracy`          | number \| null | Average accuracy. Only `done` rows expose scores. |
| `scoredCorrect`        | integer \| null | Correct scored examples. Only `done` rows expose scores. |
| `scoredTotal`          | integer \| null | Total scored examples. Only `done` rows expose scores. |
| `viewerHasFavorited`   | boolean        | Whether caller has favorited the item.            |
| `publishedAt`          | string         | ISO 8601 UTC item publish timestamp.              |
| `completedAt`          | string \| null | ISO 8601 UTC completion timestamp, or `null`.     |

### Benchmark team fields

| Field        | Type           | Description         |
| :----------- | :------------- | :------------------ |
| `teamNumber` | string | Public team number. |

```json
{
  "ok": true,
  "data": {
    "items": [
      {
        "itemId": "cn_01HX0PA...",
        "publicCode": "EQT01-000042",
        "title": "Modular tricks v3",
        "author": { "sairId": "U-...", "displayName": "alice" },
        "team": { "teamNumber": "EQT01-T00001" },
        "status": "done",
        "problemSet": "pset_hard3",
        "modelIds": ["llama-3.3-70b-instruct", "openai-gpt-oss-120b"],
        "avgAccuracy": 0.78,
        "scoredCorrect": 312,
        "scoredTotal": 400,
        "viewerHasFavorited": false,
        "publishedAt": "2026-04-12T09:00:00Z",
        "completedAt": "2026-04-12T09:18:44Z"
      }
    ],
    "nextCursor": null
  }
}
```

## Get item benchmark

```http
GET /api/public/v1/contributor-network/items/{itemId}/benchmark
```

**Scope**: `contributor-network.read`.

Returns per-model benchmark breakdown for one item.

### Path parameters

| Parameter | Type   | Required | Description                  |
| :-------- | :----- | :------: | :--------------------------- |
| `itemId`  | string | Yes      | Contributor Network item ID. |

### Response fields

| Field                       | Type           | Description                                      |
| :-------------------------- | :------------- | :----------------------------------------------- |
| `itemId`                    | string         | Contributor Network item ID.                     |
| `status`                    | string         | `pending`, `running`, `done`, `failed`, or `cancelled`. |
| `problemSet`                | string         | Benchmark problem set ID.                        |
| `perModel[]`                | [BenchmarkModelMetric](#benchmark-model-metric-fields)[] | Per-model metrics.                               |
| `completedAt`               | string \| null | ISO 8601 UTC completion timestamp, or `null`.    |

### Benchmark model metric fields

| Field           | Type           | Description                      |
| :-------------- | :------------- | :------------------------------- |
| `modelId`       | string         | Model ID.                        |
| `scoredCorrect` | integer \| null | Correct scored examples. Only `done` rows expose scores. |
| `scoredTotal`   | integer \| null | Total scored examples. Only `done` rows expose scores. |
| `avgAccuracy`   | number \| null | Average accuracy for this model. |

```json
{
  "ok": true,
  "data": {
    "itemId": "cn_01HX0PA...",
    "status": "done",
    "problemSet": "pset_hard3",
    "perModel": [
      { "modelId": "llama-3.3-70b-instruct", "scoredCorrect": 152, "scoredTotal": 200, "avgAccuracy": 0.76 },
      { "modelId": "openai-gpt-oss-120b", "scoredCorrect": 160, "scoredTotal": 200, "avgAccuracy": 0.8 }
    ],
    "completedAt": "2026-04-12T09:18:44Z"
  }
}
```

## Errors

See [Errors](../errors.md). Endpoint-specific:

| Code                   | HTTP | When                                                                  |
| :--------------------- | :--: | :-------------------------------------------------------------------- |
| `RESOURCE_NOT_OWNED`   | 403  | Source cheatsheet, solver template, or submission is not owned by caller. |
| `ITEM_NOT_AUTHOR`      | 403  | Caller cannot withdraw or moderate this item.                         |
| `COMMENT_NOT_AUTHOR`   | 403  | Caller can only delete comments they can moderate.                    |
| `COMMENT_BODY_INVALID` | 422  | Comment body is empty or too long.                                    |
| `GRAPH_TOO_LARGE`      | 413  | Graph exceeds 2 000 nodes; add filters.                               |
| `RESOURCE_FIELD_INVALID` | 422 | Filter or request field is invalid for the endpoint, including invalid model names or commit hashes. |
| `NOT_FOUND`            | 404  | Withdrawn, not-visible, and non-existent items are hidden uniformly.  |
