@atproto/ozone 0.1.52 → 0.1.54
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +21 -0
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +6 -0
- package/dist/api/index.js.map +1 -1
- package/dist/api/moderation/queryStatuses.d.ts.map +1 -1
- package/dist/api/moderation/queryStatuses.js +6 -1
- package/dist/api/moderation/queryStatuses.js.map +1 -1
- package/dist/api/setting/listOptions.d.ts +4 -0
- package/dist/api/setting/listOptions.d.ts.map +1 -0
- package/dist/api/setting/listOptions.js +38 -0
- package/dist/api/setting/listOptions.js.map +1 -0
- package/dist/api/setting/removeOptions.d.ts +4 -0
- package/dist/api/setting/removeOptions.d.ts.map +1 -0
- package/dist/api/setting/removeOptions.js +55 -0
- package/dist/api/setting/removeOptions.js.map +1 -0
- package/dist/api/setting/upsertOption.d.ts +4 -0
- package/dist/api/setting/upsertOption.d.ts.map +1 -0
- package/dist/api/setting/upsertOption.js +109 -0
- package/dist/api/setting/upsertOption.js.map +1 -0
- package/dist/api/util.d.ts.map +1 -1
- package/dist/api/util.js +3 -1
- package/dist/api/util.js.map +1 -1
- package/dist/context.d.ts +3 -0
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +6 -0
- package/dist/context.js.map +1 -1
- package/dist/db/migrations/20241018T205730722Z-setting.d.ts +4 -0
- package/dist/db/migrations/20241018T205730722Z-setting.d.ts.map +1 -0
- package/dist/db/migrations/20241018T205730722Z-setting.js +26 -0
- package/dist/db/migrations/20241018T205730722Z-setting.js.map +1 -0
- package/dist/db/migrations/20241026T205730722Z-add-hosting-status-to-subject-status.d.ts +4 -0
- package/dist/db/migrations/20241026T205730722Z-add-hosting-status-to-subject-status.d.ts.map +1 -0
- package/dist/db/migrations/20241026T205730722Z-add-hosting-status-to-subject-status.js +57 -0
- package/dist/db/migrations/20241026T205730722Z-add-hosting-status-to-subject-status.js.map +1 -0
- package/dist/db/migrations/index.d.ts +2 -0
- package/dist/db/migrations/index.d.ts.map +1 -1
- package/dist/db/migrations/index.js +3 -1
- package/dist/db/migrations/index.js.map +1 -1
- package/dist/db/schema/index.d.ts +2 -1
- package/dist/db/schema/index.d.ts.map +1 -1
- package/dist/db/schema/moderation_event.d.ts +1 -1
- package/dist/db/schema/moderation_event.d.ts.map +1 -1
- package/dist/db/schema/moderation_subject_status.d.ts +6 -0
- package/dist/db/schema/moderation_subject_status.d.ts.map +1 -1
- package/dist/db/schema/setting.d.ts +21 -0
- package/dist/db/schema/setting.d.ts.map +1 -0
- package/dist/db/schema/setting.js +5 -0
- package/dist/db/schema/setting.js.map +1 -0
- package/dist/lexicon/index.d.ts +13 -0
- package/dist/lexicon/index.d.ts.map +1 -1
- package/dist/lexicon/index.js +36 -1
- package/dist/lexicon/index.js.map +1 -1
- package/dist/lexicon/lexicons.d.ts +396 -0
- package/dist/lexicon/lexicons.d.ts.map +1 -1
- package/dist/lexicon/lexicons.js +439 -3
- package/dist/lexicon/lexicons.js.map +1 -1
- package/dist/lexicon/types/app/bsky/unspecced/getConfig.d.ts +34 -0
- package/dist/lexicon/types/app/bsky/unspecced/getConfig.d.ts.map +1 -0
- package/dist/lexicon/types/app/bsky/unspecced/getConfig.js +3 -0
- package/dist/lexicon/types/app/bsky/unspecced/getConfig.js.map +1 -0
- package/dist/lexicon/types/tools/ozone/moderation/defs.d.ts +60 -2
- package/dist/lexicon/types/tools/ozone/moderation/defs.d.ts.map +1 -1
- package/dist/lexicon/types/tools/ozone/moderation/defs.js +50 -0
- package/dist/lexicon/types/tools/ozone/moderation/defs.js.map +1 -1
- package/dist/lexicon/types/tools/ozone/moderation/emitEvent.d.ts +1 -1
- package/dist/lexicon/types/tools/ozone/moderation/emitEvent.d.ts.map +1 -1
- package/dist/lexicon/types/tools/ozone/moderation/queryStatuses.d.ts +10 -0
- package/dist/lexicon/types/tools/ozone/moderation/queryStatuses.d.ts.map +1 -1
- package/dist/lexicon/types/tools/ozone/setting/defs.d.ts +20 -0
- package/dist/lexicon/types/tools/ozone/setting/defs.d.ts.map +1 -0
- package/dist/lexicon/types/tools/ozone/setting/defs.js +15 -0
- package/dist/lexicon/types/tools/ozone/setting/defs.js.map +1 -0
- package/dist/lexicon/types/tools/ozone/setting/listOptions.d.ts +43 -0
- package/dist/lexicon/types/tools/ozone/setting/listOptions.d.ts.map +1 -0
- package/dist/lexicon/types/tools/ozone/setting/listOptions.js +3 -0
- package/dist/lexicon/types/tools/ozone/setting/listOptions.js.map +1 -0
- package/dist/lexicon/types/tools/ozone/setting/removeOptions.d.ts +40 -0
- package/dist/lexicon/types/tools/ozone/setting/removeOptions.d.ts.map +1 -0
- package/dist/lexicon/types/tools/ozone/setting/removeOptions.js +3 -0
- package/dist/lexicon/types/tools/ozone/setting/removeOptions.js.map +1 -0
- package/dist/lexicon/types/tools/ozone/setting/upsertOption.d.ts +45 -0
- package/dist/lexicon/types/tools/ozone/setting/upsertOption.d.ts.map +1 -0
- package/dist/lexicon/types/tools/ozone/setting/upsertOption.js +3 -0
- package/dist/lexicon/types/tools/ozone/setting/upsertOption.js.map +1 -0
- package/dist/mod-service/index.d.ts +19 -2
- package/dist/mod-service/index.d.ts.map +1 -1
- package/dist/mod-service/index.js +37 -1
- package/dist/mod-service/index.js.map +1 -1
- package/dist/mod-service/status.d.ts +2 -22
- package/dist/mod-service/status.d.ts.map +1 -1
- package/dist/mod-service/status.js +91 -1
- package/dist/mod-service/status.js.map +1 -1
- package/dist/mod-service/types.d.ts +19 -1
- package/dist/mod-service/types.d.ts.map +1 -1
- package/dist/mod-service/views.d.ts.map +1 -1
- package/dist/mod-service/views.js +36 -1
- package/dist/mod-service/views.js.map +1 -1
- package/dist/setting/service.d.ts +33 -0
- package/dist/setting/service.d.ts.map +1 -0
- package/dist/setting/service.js +101 -0
- package/dist/setting/service.js.map +1 -0
- package/package.json +6 -6
- package/src/api/index.ts +6 -0
- package/src/api/moderation/queryStatuses.ts +10 -0
- package/src/api/setting/listOptions.ts +44 -0
- package/src/api/setting/removeOptions.ts +63 -0
- package/src/api/setting/upsertOption.ts +142 -0
- package/src/api/util.ts +3 -0
- package/src/context.ts +8 -0
- package/src/db/migrations/20241018T205730722Z-setting.ts +27 -0
- package/src/db/migrations/20241026T205730722Z-add-hosting-status-to-subject-status.ts +57 -0
- package/src/db/migrations/index.ts +2 -0
- package/src/db/schema/index.ts +3 -1
- package/src/db/schema/moderation_event.ts +3 -0
- package/src/db/schema/moderation_subject_status.ts +6 -0
- package/src/db/schema/setting.ts +24 -0
- package/src/lexicon/index.ts +58 -0
- package/src/lexicon/lexicons.ts +449 -3
- package/src/lexicon/types/app/bsky/unspecced/getConfig.ts +43 -0
- package/src/lexicon/types/tools/ozone/moderation/defs.ts +132 -0
- package/src/lexicon/types/tools/ozone/moderation/emitEvent.ts +3 -0
- package/src/lexicon/types/tools/ozone/moderation/queryStatuses.ts +10 -0
- package/src/lexicon/types/tools/ozone/setting/defs.ts +37 -0
- package/src/lexicon/types/tools/ozone/setting/listOptions.ts +53 -0
- package/src/lexicon/types/tools/ozone/setting/removeOptions.ts +49 -0
- package/src/lexicon/types/tools/ozone/setting/upsertOption.ts +58 -0
- package/src/mod-service/index.ts +52 -0
- package/src/mod-service/status.ts +114 -2
- package/src/mod-service/types.ts +25 -0
- package/src/mod-service/views.ts +45 -2
- package/src/setting/service.ts +148 -0
- package/tests/__snapshots__/get-record.test.ts.snap +8 -0
- package/tests/__snapshots__/get-records.test.ts.snap +4 -0
- package/tests/__snapshots__/get-repo.test.ts.snap +4 -0
- package/tests/__snapshots__/get-repos.test.ts.snap +4 -0
- package/tests/__snapshots__/moderation-events.test.ts.snap +4 -0
- package/tests/__snapshots__/moderation-statuses.test.ts.snap +24 -0
- package/tests/__snapshots__/settings.test.ts.snap +52 -0
- package/tests/record-and-account-events.test.ts +185 -0
- package/tests/settings.test.ts +310 -0
- package/tsconfig.build.tsbuildinfo +1 -1
- package/tsconfig.tests.tsbuildinfo +1 -1
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { Kysely } from 'kysely'
|
|
2
|
+
|
|
3
|
+
export async function up(db: Kysely<unknown>): Promise<void> {
|
|
4
|
+
await db.schema
|
|
5
|
+
.alterTable('moderation_subject_status')
|
|
6
|
+
.addColumn('hostingStatus', 'varchar', (col) =>
|
|
7
|
+
col.notNull().defaultTo('unknown'),
|
|
8
|
+
)
|
|
9
|
+
.execute()
|
|
10
|
+
await db.schema
|
|
11
|
+
.alterTable('moderation_subject_status')
|
|
12
|
+
.addColumn('hostingDeletedAt', 'varchar')
|
|
13
|
+
.execute()
|
|
14
|
+
await db.schema
|
|
15
|
+
.alterTable('moderation_subject_status')
|
|
16
|
+
.addColumn('hostingUpdatedAt', 'varchar')
|
|
17
|
+
.execute()
|
|
18
|
+
await db.schema
|
|
19
|
+
.alterTable('moderation_subject_status')
|
|
20
|
+
.addColumn('hostingCreatedAt', 'varchar')
|
|
21
|
+
.execute()
|
|
22
|
+
await db.schema
|
|
23
|
+
.alterTable('moderation_subject_status')
|
|
24
|
+
.addColumn('hostingDeactivatedAt', 'varchar')
|
|
25
|
+
.execute()
|
|
26
|
+
await db.schema
|
|
27
|
+
.alterTable('moderation_subject_status')
|
|
28
|
+
.addColumn('hostingReactivatedAt', 'varchar')
|
|
29
|
+
.execute()
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export async function down(db: Kysely<unknown>): Promise<void> {
|
|
33
|
+
await db.schema
|
|
34
|
+
.alterTable('moderation_subject_status')
|
|
35
|
+
.dropColumn('hostingStatus')
|
|
36
|
+
.execute()
|
|
37
|
+
await db.schema
|
|
38
|
+
.alterTable('moderation_subject_status')
|
|
39
|
+
.dropColumn('hostingDeletedAt')
|
|
40
|
+
.execute()
|
|
41
|
+
await db.schema
|
|
42
|
+
.alterTable('moderation_subject_status')
|
|
43
|
+
.dropColumn('hostingUpdatedAt')
|
|
44
|
+
.execute()
|
|
45
|
+
await db.schema
|
|
46
|
+
.alterTable('moderation_subject_status')
|
|
47
|
+
.dropColumn('hostingCreatedAt')
|
|
48
|
+
.execute()
|
|
49
|
+
await db.schema
|
|
50
|
+
.alterTable('moderation_subject_status')
|
|
51
|
+
.dropColumn('hostingDeactivatedAt')
|
|
52
|
+
.execute()
|
|
53
|
+
await db.schema
|
|
54
|
+
.alterTable('moderation_subject_status')
|
|
55
|
+
.dropColumn('hostingReactivatedAt')
|
|
56
|
+
.execute()
|
|
57
|
+
}
|
|
@@ -15,3 +15,5 @@ export * as _20240903T205730722Z from './20240903T205730722Z-add-template-lang'
|
|
|
15
15
|
export * as _20240904T205730722Z from './20240904T205730722Z-add-subject-did-index'
|
|
16
16
|
export * as _20241001T205730722Z from './20241001T205730722Z-subject-status-review-state-index'
|
|
17
17
|
export * as _20241008T205730722Z from './20241008T205730722Z-sets'
|
|
18
|
+
export * as _20241018T205730722Z from './20241018T205730722Z-setting'
|
|
19
|
+
export * as _20241026T205730722Z from './20241026T205730722Z-add-hosting-status-to-subject-status'
|
package/src/db/schema/index.ts
CHANGED
|
@@ -9,6 +9,7 @@ import * as signingKey from './signing_key'
|
|
|
9
9
|
import * as communicationTemplate from './communication_template'
|
|
10
10
|
import * as set from './ozone_set'
|
|
11
11
|
import * as member from './member'
|
|
12
|
+
import * as setting from './setting'
|
|
12
13
|
|
|
13
14
|
export type DatabaseSchemaType = modEvent.PartialDB &
|
|
14
15
|
modSubjectStatus.PartialDB &
|
|
@@ -19,7 +20,8 @@ export type DatabaseSchemaType = modEvent.PartialDB &
|
|
|
19
20
|
blobPushEvent.PartialDB &
|
|
20
21
|
communicationTemplate.PartialDB &
|
|
21
22
|
set.PartialDB &
|
|
22
|
-
member.PartialDB
|
|
23
|
+
member.PartialDB &
|
|
24
|
+
setting.PartialDB
|
|
23
25
|
|
|
24
26
|
export type DatabaseSchema = Kysely<DatabaseSchemaType>
|
|
25
27
|
|
|
@@ -19,6 +19,9 @@ export interface ModerationEvent {
|
|
|
19
19
|
| 'tools.ozone.moderation.defs#modEventEmail'
|
|
20
20
|
| 'tools.ozone.moderation.defs#modEventResolveAppeal'
|
|
21
21
|
| 'tools.ozone.moderation.defs#modEventTag'
|
|
22
|
+
| 'tools.ozone.moderation.defs#accountEvent'
|
|
23
|
+
| 'tools.ozone.moderation.defs#identityEvent'
|
|
24
|
+
| 'tools.ozone.moderation.defs#recordEvent'
|
|
22
25
|
subjectType:
|
|
23
26
|
| 'com.atproto.admin.defs#repoRef'
|
|
24
27
|
| 'com.atproto.repo.strongRef'
|
|
@@ -25,6 +25,12 @@ export interface ModerationSubjectStatus {
|
|
|
25
25
|
lastReviewedAt: string | null
|
|
26
26
|
lastReportedAt: string | null
|
|
27
27
|
lastAppealedAt: string | null
|
|
28
|
+
hostingUpdatedAt: string | null
|
|
29
|
+
hostingDeletedAt: string | null
|
|
30
|
+
hostingCreatedAt: string | null
|
|
31
|
+
hostingDeactivatedAt: string | null
|
|
32
|
+
hostingReactivatedAt: string | null
|
|
33
|
+
hostingStatus: string | null
|
|
28
34
|
muteUntil: string | null
|
|
29
35
|
muteReportingUntil: string | null
|
|
30
36
|
suspendUntil: string | null
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Generated, GeneratedAlways } from 'kysely'
|
|
2
|
+
import { Member } from './member'
|
|
3
|
+
|
|
4
|
+
export const settingTableName = 'setting'
|
|
5
|
+
|
|
6
|
+
export type SettingScope = 'personal' | 'instance'
|
|
7
|
+
|
|
8
|
+
export interface Setting {
|
|
9
|
+
id: GeneratedAlways<number>
|
|
10
|
+
key: string
|
|
11
|
+
value: Record<string, unknown>
|
|
12
|
+
managerRole: Member['role'] | null
|
|
13
|
+
description: string | null
|
|
14
|
+
did: string
|
|
15
|
+
scope: SettingScope
|
|
16
|
+
lastUpdatedBy: string
|
|
17
|
+
createdBy: string
|
|
18
|
+
createdAt: Generated<Date>
|
|
19
|
+
updatedAt: Generated<Date>
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export type PartialDB = {
|
|
23
|
+
[settingTableName]: Setting
|
|
24
|
+
}
|
package/src/lexicon/index.ts
CHANGED
|
@@ -134,6 +134,7 @@ import * as AppBskyNotificationListNotifications from './types/app/bsky/notifica
|
|
|
134
134
|
import * as AppBskyNotificationPutPreferences from './types/app/bsky/notification/putPreferences'
|
|
135
135
|
import * as AppBskyNotificationRegisterPush from './types/app/bsky/notification/registerPush'
|
|
136
136
|
import * as AppBskyNotificationUpdateSeen from './types/app/bsky/notification/updateSeen'
|
|
137
|
+
import * as AppBskyUnspeccedGetConfig from './types/app/bsky/unspecced/getConfig'
|
|
137
138
|
import * as AppBskyUnspeccedGetPopularFeedGenerators from './types/app/bsky/unspecced/getPopularFeedGenerators'
|
|
138
139
|
import * as AppBskyUnspeccedGetSuggestionsSkeleton from './types/app/bsky/unspecced/getSuggestionsSkeleton'
|
|
139
140
|
import * as AppBskyUnspeccedGetTaggedSuggestions from './types/app/bsky/unspecced/getTaggedSuggestions'
|
|
@@ -179,6 +180,9 @@ import * as ToolsOzoneSetDeleteValues from './types/tools/ozone/set/deleteValues
|
|
|
179
180
|
import * as ToolsOzoneSetGetValues from './types/tools/ozone/set/getValues'
|
|
180
181
|
import * as ToolsOzoneSetQuerySets from './types/tools/ozone/set/querySets'
|
|
181
182
|
import * as ToolsOzoneSetUpsertSet from './types/tools/ozone/set/upsertSet'
|
|
183
|
+
import * as ToolsOzoneSettingListOptions from './types/tools/ozone/setting/listOptions'
|
|
184
|
+
import * as ToolsOzoneSettingRemoveOptions from './types/tools/ozone/setting/removeOptions'
|
|
185
|
+
import * as ToolsOzoneSettingUpsertOption from './types/tools/ozone/setting/upsertOption'
|
|
182
186
|
import * as ToolsOzoneSignatureFindCorrelation from './types/tools/ozone/signature/findCorrelation'
|
|
183
187
|
import * as ToolsOzoneSignatureFindRelatedAccounts from './types/tools/ozone/signature/findRelatedAccounts'
|
|
184
188
|
import * as ToolsOzoneSignatureSearchAccounts from './types/tools/ozone/signature/searchAccounts'
|
|
@@ -1823,6 +1827,17 @@ export class AppBskyUnspeccedNS {
|
|
|
1823
1827
|
this._server = server
|
|
1824
1828
|
}
|
|
1825
1829
|
|
|
1830
|
+
getConfig<AV extends AuthVerifier>(
|
|
1831
|
+
cfg: ConfigOf<
|
|
1832
|
+
AV,
|
|
1833
|
+
AppBskyUnspeccedGetConfig.Handler<ExtractAuth<AV>>,
|
|
1834
|
+
AppBskyUnspeccedGetConfig.HandlerReqCtx<ExtractAuth<AV>>
|
|
1835
|
+
>,
|
|
1836
|
+
) {
|
|
1837
|
+
const nsid = 'app.bsky.unspecced.getConfig' // @ts-ignore
|
|
1838
|
+
return this._server.xrpc.method(nsid, cfg)
|
|
1839
|
+
}
|
|
1840
|
+
|
|
1826
1841
|
getPopularFeedGenerators<AV extends AuthVerifier>(
|
|
1827
1842
|
cfg: ConfigOf<
|
|
1828
1843
|
AV,
|
|
@@ -2171,6 +2186,7 @@ export class ToolsOzoneNS {
|
|
|
2171
2186
|
moderation: ToolsOzoneModerationNS
|
|
2172
2187
|
server: ToolsOzoneServerNS
|
|
2173
2188
|
set: ToolsOzoneSetNS
|
|
2189
|
+
setting: ToolsOzoneSettingNS
|
|
2174
2190
|
signature: ToolsOzoneSignatureNS
|
|
2175
2191
|
team: ToolsOzoneTeamNS
|
|
2176
2192
|
|
|
@@ -2180,6 +2196,7 @@ export class ToolsOzoneNS {
|
|
|
2180
2196
|
this.moderation = new ToolsOzoneModerationNS(server)
|
|
2181
2197
|
this.server = new ToolsOzoneServerNS(server)
|
|
2182
2198
|
this.set = new ToolsOzoneSetNS(server)
|
|
2199
|
+
this.setting = new ToolsOzoneSettingNS(server)
|
|
2183
2200
|
this.signature = new ToolsOzoneSignatureNS(server)
|
|
2184
2201
|
this.team = new ToolsOzoneTeamNS(server)
|
|
2185
2202
|
}
|
|
@@ -2437,6 +2454,47 @@ export class ToolsOzoneSetNS {
|
|
|
2437
2454
|
}
|
|
2438
2455
|
}
|
|
2439
2456
|
|
|
2457
|
+
export class ToolsOzoneSettingNS {
|
|
2458
|
+
_server: Server
|
|
2459
|
+
|
|
2460
|
+
constructor(server: Server) {
|
|
2461
|
+
this._server = server
|
|
2462
|
+
}
|
|
2463
|
+
|
|
2464
|
+
listOptions<AV extends AuthVerifier>(
|
|
2465
|
+
cfg: ConfigOf<
|
|
2466
|
+
AV,
|
|
2467
|
+
ToolsOzoneSettingListOptions.Handler<ExtractAuth<AV>>,
|
|
2468
|
+
ToolsOzoneSettingListOptions.HandlerReqCtx<ExtractAuth<AV>>
|
|
2469
|
+
>,
|
|
2470
|
+
) {
|
|
2471
|
+
const nsid = 'tools.ozone.setting.listOptions' // @ts-ignore
|
|
2472
|
+
return this._server.xrpc.method(nsid, cfg)
|
|
2473
|
+
}
|
|
2474
|
+
|
|
2475
|
+
removeOptions<AV extends AuthVerifier>(
|
|
2476
|
+
cfg: ConfigOf<
|
|
2477
|
+
AV,
|
|
2478
|
+
ToolsOzoneSettingRemoveOptions.Handler<ExtractAuth<AV>>,
|
|
2479
|
+
ToolsOzoneSettingRemoveOptions.HandlerReqCtx<ExtractAuth<AV>>
|
|
2480
|
+
>,
|
|
2481
|
+
) {
|
|
2482
|
+
const nsid = 'tools.ozone.setting.removeOptions' // @ts-ignore
|
|
2483
|
+
return this._server.xrpc.method(nsid, cfg)
|
|
2484
|
+
}
|
|
2485
|
+
|
|
2486
|
+
upsertOption<AV extends AuthVerifier>(
|
|
2487
|
+
cfg: ConfigOf<
|
|
2488
|
+
AV,
|
|
2489
|
+
ToolsOzoneSettingUpsertOption.Handler<ExtractAuth<AV>>,
|
|
2490
|
+
ToolsOzoneSettingUpsertOption.HandlerReqCtx<ExtractAuth<AV>>
|
|
2491
|
+
>,
|
|
2492
|
+
) {
|
|
2493
|
+
const nsid = 'tools.ozone.setting.upsertOption' // @ts-ignore
|
|
2494
|
+
return this._server.xrpc.method(nsid, cfg)
|
|
2495
|
+
}
|
|
2496
|
+
}
|
|
2497
|
+
|
|
2440
2498
|
export class ToolsOzoneSignatureNS {
|
|
2441
2499
|
_server: Server
|
|
2442
2500
|
|